OpenGL代码注释2.1
2019-05-15 本文已影响0人
数字d
一、基础代码注释
1.定义一个着色器管理器,全局变量
GLShaderManager shaderManager;
2.定义一个模型视图矩阵,全局变量
GLMatrixStack modelViewMatrix;
3.定义一个投影矩阵,全局变量
GLMatrixStack projectionMatrix;
4.定义一个相机视角,观察者位置,全局变量
GLFrame cameraFrame;
5.定义世界坐标位置,全局变量
GLFrame objectFrame;
6.定义一个视景体,全局变量,用来构造投影矩阵
GLFrustum viewFrustum;
7.几何变换管道
GLGeometryTransform transformPipeline;
二、SetupRC()初始化函数代码注释
1.设置灰色背景
glClearColor(0.7f, 0.7f, 0.7f, 1.0f );
2.着色器初始化
shaderManager.InitializeStockShaders();
3.开启深度测试
glEnable(GL_DEPTH_TEST);
4.设置变换管线以使用两个矩阵堆栈
transformPipeline.SetMatrixStacks(modelViewMatrix, projectionMatrix);
5.移动观察者位置
cameraFrame.MoveForward(-20.0f);
7.构造二维数组散点集合
GLfloat vCoast[24][3] = {
{2.80, 1.20, 0.0 }, {2.0, 1.20, 0.0 },
{2.0, 1.08, 0.0 }, {2.0, 1.08, 0.0 },
{0.0, 0.80, 0.0 }, {-.32, 0.40, 0.0 },
{-.48, 0.2, 0.0 }, {-.40, 0.0, 0.0 },
{-.60, -.40, 0.0 }, {-.80, -.80, 0.0 },
{-.80, -1.4, 0.0 }, {-.40, -1.60, 0.0 },
{0.0, -1.20, 0.0 }, { .2, -.80, 0.0 },
{.48, -.40, 0.0 }, {.52, -.20, 0.0 },
{.48, .20, 0.0 }, {.80, .40, 0.0 },
{1.20, .80, 0.0 }, {1.60, .60, 0.0 },
{2.0, .60, 0.0 }, {2.2, .80, 0.0 },
{2.40, 1.0, 0.0 }, {2.80, 1.0, 0.0 }};
8.构造二维数组金字塔点集合
GLfloat vPyramid[12][3] = {
-2.0f, 0.0f, -2.0f,
2.0f, 0.0f, -2.0f,
0.0f, 4.0f, 0.0f,
2.0f, 0.0f, -2.0f,
2.0f, 0.0f, 2.0f,
0.0f, 4.0f, 0.0f,
2.0f, 0.0f, 2.0f,
-2.0f, 0.0f, 2.0f,
0.0f, 4.0f, 0.0f,
-2.0f, 0.0f, 2.0f,
-2.0f, 0.0f, -2.0f,
0.0f, 4.0f, 0.0f};
三、用点集合构造图元
1.
pointBatch.Begin(GL_POINTS, 24);
pointBatch.CopyVertexData3f(vCoast);
pointBatch.End();
2. 表示每一对顶点定义⼀个线段
lineBatch.Begin(GL_LINES, 24);
lineBatch.CopyVertexData3f(vCoast);
lineBatch.End();
3. ⼀个从第一个顶点依次经过每⼀个后续顶点⽽绘制的线条
lineStripBatch.Begin(GL_LINE_STRIP, 24);
lineStripBatch.CopyVertexData3f(vCoast);
lineStripBatch.End();
4. 和GL_LINE_STRIP相同,但是最后⼀个顶点和第⼀个顶点连接起来
lineLoopBatch.Begin(GL_LINE_LOOP, 24);
lineLoopBatch.CopyVertexData3f(vCoast);
lineLoopBatch.End();
5. 每3个顶点定义⼀个新的三角形实际效果旋转后是金字塔
triangleBatch.Begin(GL_TRIANGLES, 12);
triangleBatch.CopyVertexData3f(vPyramid);
triangleBatch.End();
6. 共⽤⼀个条带(strip)上的顶点的一组三角形
pointBatch.Begin(GL_TRIANGLE_STRIP, 24);
pointBatch.CopyVertexData3f(vCoast);
pointBatch.End();
7. 以一个圆点为中心呈扇形排列,共⽤相邻顶点的⼀组三角形
pointBatch.Begin(GL_TRIANGLE_FAN, 24);
pointBatch.CopyVertexData3f(vCoast);
pointBatch.End();
四、图元对照表快查
屏幕快照 2019-05-15 上午11.45.25.png