Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ipad 如何正确地将转换应用于OpenGL模型_Ipad_Opengl Es - Fatal编程技术网

Ipad 如何正确地将转换应用于OpenGL模型

Ipad 如何正确地将转换应用于OpenGL模型,ipad,opengl-es,Ipad,Opengl Es,六个月来,我一直在努力解决这个问题,并找到了一个可行的解决方案,但我就是不知道如何让我的模型按照我想要的方式运行。我正在为iPad渲染一个带有arcball旋转实现和缩放/平移功能的3D模型,尽管转换代码与桌面OpenGL相同。当前,用户可以通过单击模型来更改模型的旋转中心。旋转中心发生变化,但原点保持静止,这会导致模型从用户触摸屏幕的位置移开。我想让它做的是允许用户触摸模型,让模型保持静止,但让它将原点移动到用户触摸的地方。我不确定需要进行哪些转换或转换的顺序。当前的转换顺序是: glPush

六个月来,我一直在努力解决这个问题,并找到了一个可行的解决方案,但我就是不知道如何让我的模型按照我想要的方式运行。我正在为iPad渲染一个带有arcball旋转实现和缩放/平移功能的3D模型,尽管转换代码与桌面OpenGL相同。当前,用户可以通过单击模型来更改模型的旋转中心。旋转中心发生变化,但原点保持静止,这会导致模型从用户触摸屏幕的位置移开。我想让它做的是允许用户触摸模型,让模型保持静止,但让它将原点移动到用户触摸的地方。我不确定需要进行哪些转换或转换的顺序。当前的转换顺序是:

glPushMatrix();
glTranslatef(pan.x, pan.y, 0);
glMultMatrixf(mat); //this is my rotation/scale matrix I get from my arcball class
glTranslatef(-origin.x, -origin.y, -origin.z);
//draw model
glPopMatrix();

你知道需要做什么更改才能使原点移动而不是模型吗?

乍一看,我认为你应该在应用旋转矩阵之前将场景的原点移动到所需的旋转点,以便沿着全局轴移动。然后应用旋转矩阵,绘制项目,并将原点移回显示函数其余部分的原始原点(应在glPopMatrix中处理)


我试过了,它使原点不改变,只是改变了模型。
glPushMatrix();
glTranslatef(pan.x, pan.y, 0);
glTranslatef(-origin.x, -origin.y, -origin.z);
glMultMatrixf(mat); //this is my rotation/scale matrix I get from my arcball class
//draw model
glPopMatrix();