快速导航(持续更新中)
WebGL系列教程一(开篇)
WebGL系列教程二(环境搭建及着色器初始化)
WebGL系列教程三(使用缓冲区绘制三角形)
WebGL系列教程四(绘制彩色三角形)
WebGL系列教程五(使用索引绘制彩色立方体)
WebGL系列教程六(纹理映射与立方体贴图)
WebGL系列教程七(二维及三维旋转、平移、缩放)
WebGL系列教程八(GLSL着色器基础语法)
WebGL系列教程九(动画)
WebGL系列教程十(模型Model、视图View、投影Projection变换)
WebGL系列教程十一(光照原理及Blinn Phong着色模型)
目录
1 前言
上一讲我们讲了如何使用索引绘制彩色立方体,还留了一个思考题:怎么让立方体的每个面都保持一个颜色?这一讲我们就来解决这个问题,并引出纹理映射和立方体贴图。
2 思考题
怎么让立方体的每个面都保持一个颜色?那当然是让每个面的两个三角形都保持一个颜色就行了,那怎么让每个三角形都保持一个颜色呢?因为三角形的颜色是通过顶点的颜色插值出来的,自然是让三角形的每个顶点都保持一个颜色就可以了。
但是这样又产生了新问题,因为顶点是公用的,难道给每个顶点多个颜色吗?答:是的。

比如v0这个顶点,它被三个面公用,分别是前面、上面、右面。那么也就意味着它会有三个颜色,因为我们要让立方体每个表面都是一个颜色。回顾一下上一讲我们是怎么给顶点颜色的:
//顶点和颜色
let verticesColors = new Float32Array([
1.0, 1.0, 1.0, 1.0,1.0,1.0,//v0 近平面 右上 颜色
-1.0, 1.0, 1.0, 1.0,0.0,1.0,//v1 近平面 左上 颜色
-1.0,-1.0, 1.0, 1.0,0.0,1.0,//v2 近平面 左下 颜色
1.0,-1.0, 1.0, 1.0,1.0,0.0,//v3 近平面 右下 颜色
1.0,-1.0,-1.0, 1.0,0.0,1.0,//v4 远平面 右下 颜色
-1.0,-1.0,-1.0, 1.0,1.0,1.0,//v5 远平面 左下 颜色
-1.0, 1.0,-1.0, 0.0,0.0,1.0,//v6 远平面 左上 颜色
1.0, 1.0,-1.0, 0.0,1.0,1.0 //v7 远平面 右上 颜色
]);
//顶点索引
let indices = new Uint8Array([
0,1,2, 0,2,3,//近平面
4,5,6, 4,6,7,//远平面
1,2,5, 1,5,6,//左平面
0,3,4, 0,4,7,//右平面
3,4,2, 3,5,2,//下平面
0,7,6, 0,1,6 //上平面
]);
现在一个顶点三个颜色,那岂不是说顶点不够用了?是的,所以每个顶点我们要写三次。也就是说,这次顶点不能公用了。我们对上述代码进行修改
const verticesColors = new Float32Array([
// 前面
-1.0, -1.0, 1.0, 1.0, 0.0,1.0,//v2 红色
1.0, -1.0, 1.0, 1.0, 0.0,1.0,//v3 红色
1.0, 1.0, 1.0, 1.0, 0.0,1.0,//v0 红色
-1.0, 1.0, 1.0, 1.0, 0.0,1.0,//v1 红色
// 后面
-1.0, -1.0, -1.0, 0.0, 1.0, 0.0,//v5 绿色
1.0, -1.0, -1.0, 0.0, 1.0, 0.0,//v4 绿色
1.0, 1.0, -1.0, 0.0, 1.0, 0.0,//v7 绿色
-1.0, 1.0, -1.0, 0.0, 1.0, 0.0,//v6 绿色
// 上面
-1.0, 1.0, 1.0, 0.0, 0.0,1.0,//v1 蓝色
1.0, 1.0, 1.0, 0.0, 0.0,1.0,//v0 蓝色
1.0, 1.0, -1.0, 0.0, 0.0,1.0,//v7 蓝色
-1.0, 1.0, -1.0, 0.0, 0.0,1.0,//v6 蓝色
// 下面
-1.0, -1.0, 1.0, 0.0, 0.0,0.0,//v2 黑色
1.0, -1.0, 1.0, 0.0, 0.0,0.0,//v3 黑色
1.0, -1.0, -1.0, 0.0, 0.0,0.0,//v4 黑色
-1.0,

&spm=1001.2101.3001.5002&articleId=142164134&d=1&t=3&u=01e1050fbb0b4512bd6432e917e2b113)
1835

被折叠的 条评论
为什么被折叠?



