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、运行,实现效果
总结:主要使用了两个矩阵相结合,合成一个矩阵完成移动+旋转