如何在opengl中按像素移动三维对象

2024-09-26 18:08:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在前面有一个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()

Tags: the函数模型图像度量像素width背景
1条回答
网友
1楼 · 发布于 2024-09-26 18:08:57

此答案扩展了@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}

相关问题 更多 >

    热门问题