立方体绘制基本原理
一个立方体是由8
个顶点组成,共6
个面,所以绘制立方体本质上就是绘制这6
个面共12
个三角形
顶点的坐标体系如下图所示,三维坐标的中心原点位于立方体的中心,但是要特别注意的是,前后方向表示的是Z轴,上下方向表示的是Y轴
立方体的顶点坐标和绘制顺序
立方体坐标定义如下:
static GLfloat vertices[] = {
// 位置 // 颜色
-0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, // 左下后 红色
0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f, // 右下后 绿色
0.5f, 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // 右上后 蓝色
-0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.0f, // 左上后 黄色
-0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, // 左下前 青色
0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 1.0f, // 右下前 品红
0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, // 右上前 灰色
-0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 1.0f // 左上前 白色
};
// 立方体索引数据
static GLuint indices[] = {
// 后面
0, 1, 2,
2, 3, 0,
// 前面
4, 5, 6,
6, 7, 4,
// 左面
0, 4, 7,
7, 3, 0,
// 右面
1, 5, 6,
6, 2, 1,
// 底面
0, 1, 5,
5, 4, 0,
// 顶面
3, 2, 6,
6, 7, 3
};
在这里vertices
定义不同的顶点,indices
数组中表示不同顶点的绘制顺序,每三个顶点构成一个三角形,最后由 glDrawElements(GL_TRIANGLES,36,GL_UNSIGNED_INT,0);
每三个顶点为一组绘制共12个三角形,不同的面和顶点的绑定关系如下:
立方体颜色和着色器
这里为立方体的每个顶点定义不同的颜色,同时在VertexShader
中将颜色传递给FragmentShader
,这样 FragmentShader
会得到经过插值后的每个片元的颜色,并将这个颜色设置为最终的显示,实现的是一个渐变色的效果,shader
程序如下:
static const char* vertexShaderSource