我有一个特定的模型作为观众的控件。用户可以单击它的不同部分来对查看器中的另一个模型执行转换(如Unity或Blender等应用程序中的控件/句柄)。
我们希望无论相机放大/缩小,控件都保持相同的尺寸。我已经尝试根据物体和相机之间的距离来缩放它的大小,但它并不是很正确。有没有一种标准的方法来完成这样的事情?
使用固定管道渲染控件,但我们使用可编程管道获得了其他组件。
答案 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周期来渲染它。