我在前面有一个3d模型,在背景中有一个图像。我正在尝试按像素移动3d模型(x,y)。但是glTranslatef
函数将它移动到其他一些度量中。
我尝试glViewport(0, 0, width, height)
然后glOrtho(x, width, height, y, 0.0, 1.0)
但是它使对象
消失。
这是我的代码:
# draw the 3d model
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, width, height, 0.0, 0.0, 1.0)
gluPerspective(45, (width / height), 0.1, 50.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glTranslatef(0, 0, -5)
glEnable(GL_DEPTH_TEST)
# reddering the 3d object
box.render()
此答案扩展了@user253751在上述问题中的最后一条评论:
是的,您需要三个矩阵
Model, View and Projection
将对象从局部空间转换为screen coordinates
(像素空间)OpenGL转换通常如下所示:
World space //Model Matrix
>View Space //View Matrix
>NDC Coordinates (Clip Space) //Projection Matrix
>;Screen Coordinates
//OpenGL会自动执行此操作因此,要从屏幕坐标(像素坐标)开始,只需应用这些矩阵的倒数
例如,假设您在
(100, 100)
的屏幕坐标中有和对象,并且希望将其移动到(300, 300)
通过反向视图和投影将坐标
(300, 300)
还原为3D世界空间,找到世界空间坐标(x、y、z),并在那里变换对象的位置。(这也称为光线投射)如果没有MVP系统设置,您将很难通过像素移动对象
下面是OpenGL中{}和{}上的{a1}
相关问题 更多 >
编程相关推荐