无论相机位置如何,渲染具有相同尺寸的3D模型

时间:2015-08-21 14:28:42

标签: opengl camera scale immediate-mode

我有一个特定的模型作为观众的控件。用户可以单击它的不同部分来对查看器中的另一个模型执行转换(如Unity或Blender等应用程序中的控件/句柄)。

我们希望无论相机放大/缩小,控件都保持相同的尺寸。我已经尝试根据物体和相机之间的距离来缩放它的大小,但它并不是很正确。有没有一种标准的方法来完成这样的事情?

使用固定管道渲染控件,但我们使用可编程管道获得了其他组件。

2 个答案:

答案 0 :(得分:0)

使用固定管道,最简单的方法是在渲染控件时不应用任何转换:

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();

// draw controls

glPopMatrix();

glMatrixMode(GL_MODELVIEW);
glPopMatrix();

glPushMatrix() / glPopMatrix()调用将确保在此代码片段末尾恢复以前的矩阵。

根本没有变换,映射到窗口的坐标范围在两个坐标方向上都是[-1.0 .. 1.0]。如果您还需要其他任何内容,可以在开始绘制控件之前应用必要的转换。

答案 1 :(得分:-1)

简单的答案是“使用可编程管道”,因为编写

并不困难
if(normalObject) {
    gl_Position = projection * view * model * vertex;
} else {
    gl_Position = specialMVPMatrix * vertex;
}

虽然你会花费更多的代码试图让它在固定功能管道中运行,并且需要更多的CPU周期来渲染它。