OpenGL 正方形渲染与移动

2020-07-15  本文已影响0人  _涼城
三角形渲染

OpenGL正方形渲染与移动

渲染
  1. 将正方形顶点存储在全局数组

    GLfloat vVerts[] = {
           -blockSize,-blockSize,0.0f,
           blockSize,-blockSize,0.0f,
           blockSize,blockSize,0.0f,
           -blockSize,blockSize,0.0f
    };
    
  2. 初始化

    void setupRC()
    {
       //设置清屏颜色(背景颜色)
       glClearColor(0.98f, 0.40f, 0.7f, 1);
       shaderManager.InitializeStockShaders();
       //修改为GL_TRIANGLE_FAN 链接方式,4个顶点
       triangleBatch.Begin(GL_TRIANGLE_FAN, 4);
       triangleBatch.CopyVertexData3f(vVerts);
       triangleBatch.End();
     }
    
  3. 重塑函数(glutReshapeFunc回调)

    /*
     在窗口大小改变时,接收新的宽度&高度。
    */
    void changeSize(int w,int h)
    {
       /*
        x,y 参数代表窗口中视图的左下角坐标,而宽度、高度是像素为表示,通常x,y 都是为0
       */
      glViewport(0, 0, w, h);
    
     }
    
  4. 渲染函数(glutDisplayFunc回调)

    void RenderScene(void)
    {
       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
       GLfloat vRed[] = {1.0,0.0,0.0,1.0f};
    //传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使    用指定颜色以默认笛卡尔坐标第在屏幕上渲染几何图形
     shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
     //提交着色器
      triangleBatch.Draw();
       //在开始的设置openGL 窗口的时候,我们指定要一个双缓冲区的渲染环  境。这就意味着将在后台缓冲区进行渲染,渲染结束后交换给前台。这种方式可以防止观察者看到可能伴随着动画帧与动画帧之间的闪烁的渲染过程。缓冲区交换平台将以平台特定的方式进行。
    //将后台缓冲区进行渲染,然后结束后交换给前台
      glutSwapBuffers();
     }
    
    
监听键盘函数

GLUT提供了另一个回调函数glutSpecialFunc,监听了特殊按键被调用的函数,例如功能键或方向键。

在Main函数中加入以下代码,注册SpecialKeys回调函数

glutSpecialFunc(SpecialKeys)
上一篇 下一篇

猜你喜欢

热点阅读