使用openGL实现一个用键盘控制的移动+旋转的正文形

1、继续上一个工程,修改顶点参数,将三角形改成正方形

//blockSize 1/2边长

GLfloatblockSize =0.2f;

//指定正方形的顶点数据 x,y,z

GLfloatvVerts[] = {

    -blockSize,-blockSize,0.0f,

   blockSize,-blockSize,0.0f,

   blockSize,blockSize,0.0f,

    -blockSize,blockSize,0.0f

};

voidsetupRC()

{

   //1.设置清屏颜色

   glClearColor(0.33f,0.45f,0.12f,1.0f);


   //初始化固定管线

   shaderManager.InitializeStockShaders();


   triangleBatch.Begin(GL_TRIANGLE_FAN,4);

   triangleBatch.CopyVertexData3f(vVerts);

   triangleBatch.End();

}

2、使用旋转矩加平移矩阵想结合,用平面着色器完成绘制

//利用矩阵帮助移动

   //mFinalTransform 结果矩阵

   //mTransformMatrix 平移矩阵

   //mRotationMatrix  旋转矩阵

   M3DMatrix44fmFinalTransform,mTransformMatrix,mRotationMatrix;


   //平移 x,y,z,w(缩放因子= 1)

   //3D中平移的原理与矩阵之间关系

   /*

     参数1:矩阵

     参数2、3、4:X,Y,Z上平移距离

     */

   m3dTranslationMatrix44(mTransformMatrix,xPos,yPos,0.0f);



   //增加难度! 一边移动,一边旋转

   staticfloatyRot =0.0f;


   /*

     参数1:矩阵

     参数2:弧度

     参数3:X:1,0 1:围绕X轴旋转,0不围绕X轴旋转

     参数4:Y:1,0

     参数5:Z:1,0

     */

   m3dRotationMatrix44(mRotationMatrix,m3dDegToRad(yRot),0.0f,0.0f,1.0f);


   //修改旋转度数

    yRot +=5.0f;


   //思考:结合2个矩阵的结果 平移矩阵 * 旋转矩阵 = 最终结果矩阵

   m3dMatrixMultiply44(mFinalTransform, mTransformMatrix, mRotationMatrix);

3、运行,实现效果

总结:主要使用了两个矩阵相结合,合成一个矩阵完成移动+旋转

你可能感兴趣的:(使用openGL实现一个用键盘控制的移动+旋转的正文形)