3

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

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

控件是使用固定管道渲染的,但我们还有其他组件使用可编程管道。

4

2 回答 2

0

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

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

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

// draw controls

glPopMatrix();

glMatrixMode(GL_MODELVIEW);
glPopMatrix();

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

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

于 2015-08-21T15:28:01.403 回答
0

简单的答案是“使用可编程管道”,因为编写起来并不难

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

而您将花费更多的代码来尝试使其在固定功能管道中工作,并且需要更多的 CPU 周期来渲染它。

于 2015-08-21T14:39:14.867 回答