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. \color{red}{GL\_POINTS} \color{black}{表示每个顶点在屏幕上都是单独点}

    pointBatch.Begin(GL_POINTS, 24);
    pointBatch.CopyVertexData3f(vCoast);
    pointBatch.End();

\color{gray}{效果:}

屏幕快照 2019-05-15 上午11.08.48.png

2. \color{red}{ GL\_LINES } 表示每一对顶点定义⼀个线段

    lineBatch.Begin(GL_LINES, 24);
    lineBatch.CopyVertexData3f(vCoast);
    lineBatch.End();

\color{gray}{效果:}

屏幕快照 2019-05-15 上午11.09.05.png

3. \color{red}{ GL\_LINE\_STRIP } ⼀个从第一个顶点依次经过每⼀个后续顶点⽽绘制的线条

    lineStripBatch.Begin(GL_LINE_STRIP, 24);
    lineStripBatch.CopyVertexData3f(vCoast);
    lineStripBatch.End();

\color{gray}{效果:}

屏幕快照 2019-05-15 上午11.09.14.png

4. \color{red}{ GL\_LINE\_LOOP} 和GL_LINE_STRIP相同,但是最后⼀个顶点和第⼀个顶点连接起来

     lineLoopBatch.Begin(GL_LINE_LOOP, 24);
    lineLoopBatch.CopyVertexData3f(vCoast);
    lineLoopBatch.End();

\color{gray}{效果:}

屏幕快照 2019-05-15 上午11.09.23.png

5. \color{red}{ GL\_TRIANGLES } 每3个顶点定义⼀个新的三角形实际效果旋转后是金字塔

    triangleBatch.Begin(GL_TRIANGLES, 12);
    triangleBatch.CopyVertexData3f(vPyramid);
    triangleBatch.End();

\color{gray}{效果:}

屏幕快照 2019-05-15 上午11.22.12.png

6. \color{red}{ GL\_TRIANGLE\_STRIP } 共⽤⼀个条带(strip)上的顶点的一组三角形

    pointBatch.Begin(GL_TRIANGLE_STRIP, 24);
    pointBatch.CopyVertexData3f(vCoast);
    pointBatch.End();

\color{gray}{效果:}

[图片上传中...(屏幕快照 2019-05-15 上午11.23.11.png-ee1739-1557891368868-0)]

7. \color{red}{ GL\_TRIANGLE\_FAN } 以一个圆点为中心呈扇形排列,共⽤相邻顶点的⼀组三角形

    pointBatch.Begin(GL_TRIANGLE_FAN, 24);
    pointBatch.CopyVertexData3f(vCoast);
    pointBatch.End();

\color{gray}{效果:}

屏幕快照 2019-05-15 上午11.23.11.png

四、图元对照表快查


屏幕快照 2019-05-15 上午11.45.25.png

参考来源:https://www.jianshu.com/p/981e6c278dac

上一篇下一篇

猜你喜欢

热点阅读