iOS应用中如何用OpenGL 4x4矩阵将2D物体沿X轴移动10个单位?
如何在iOS OpenGL 2D场景中沿X轴移动物体?
嘿,作为OpenGL新手不用慌,这个问题其实挺基础的,咱们一步步来搞定它~
你现在的代码里,translation是(0.0f, 0.0f, 0.0f),对应的平移矩阵是单位矩阵,所以物体默认在原点位置。要沿X轴移动10个单位,核心就是修改平移向量的X分量,然后重新生成平移矩阵就行。
直接修改平移量的方案
OpenGL的平移矩阵结构你已经写对了——第四列的前三个元素分别对应X、Y、Z方向的平移距离。所以只需要把translation的X值改成10.0f,就能让物体沿X轴正方向移动10个单位:
// 修改平移向量的X分量为10.0f,Y和Z保持不变 Vect3F translation = Vect3F(10.0f, 0.0f, 0.0f); Matrix44F translationMatrix({ 1, 0, 0, translation[0], 0, 1, 0, translation[1], 0, 0, 1, translation[2], 0, 0, 0, 1 });
如果需要持续移动(比如动画效果)
要是你想让物体每一帧都移动一点,不用每次重新定义translation,可以在更新逻辑里累加X分量:
// 先在初始化时定义好平移向量 Vect3F translation = Vect3F(0.0f, 0.0f, 0.0f); Matrix44F translationMatrix; // 假设每一帧的更新函数里执行这段代码 void updateFrame() { // 每次X轴增加0.1个单位,速度可以根据需求调整 translation[0] += 0.1f; // 重新生成平移矩阵 translationMatrix = Matrix44F({ 1, 0, 0, translation[0], 0, 1, 0, translation[1], 0, 0, 1, translation[2], 0, 0, 0, 1 }); }
小提醒
OpenGL里矩阵乘法的顺序很关键!如果之后你需要给物体加旋转、缩放操作,记得遵循先缩放、再旋转、最后平移的顺序来组合矩阵,不然会出现奇怪的偏移效果哦。
内容的提问来源于stack exchange,提问作者Atalyk
相关产品推荐
相关产品推荐

