5

我可以将当​​前渲染位置设置为任意值,而不是仅仅给它从当前位置的偏移量吗?

这就是我目前正在做的事情:

gl.glTranslatef(3.0f, 0.0f, 2.0f);

它允许我说“我想向左移动”,但不能说“我想移动到点 (2, 1, 2)”。有没有办法做到后者?

我将 OpenGL 与 JOGL 一起使用。

更新

@Bahbar 建议如下:

gl.glLoadIdentity();
gl.glTranslatef(...);

当我这样做时,除了六行之外的所有内容都消失了。我不确定为什么。我遇到了远裁剪平面太近的问题,所以它们可能太远而无法渲染。

4

2 回答 2

6

是的。只需从单位矩阵开始。

gl.glLoadIdentity();
gl.glTranslatef(...);
于 2010-09-17T18:40:12.267 回答
0

是的,您可以使用gluLookAt命令设置视图位置。如果您查看 OpenGL 常见问题解答,有一个问题与您的问题最相关:8.060 如何使相机围绕场景中的某个点“运行”?

您可以通过平移/旋转场景/对象并将相机留在同一位置来模拟轨道。例如,要围绕放置在 Y 轴某处的物体进行轨道运行,同时不断查看原点,您可以这样做:

gluLookAt(camera[0], camera[1], camera[2], /* look from camera XYZ */
          0, 0, 0, /* look at the origin */
          0, 1, 0); /* positive Y up vector */ 
glRotatef(orbitDegrees, 0.f, 1.f, 0.f); /* orbit the Y axis */ 
          /* ...where orbitDegrees is derived from mouse motion */
glCallList(SCENE); /* draw the scene */

如果您坚持物理环绕摄像机位置,则需要先转换当前摄像机位置矢量,然后再将其用于查看转换。

无论哪种情况,我都建议您调查 gluLookAt()(如果您还没有使用此例程)。

请注意 gluLookAt 调用:作者将相机位置存储在 3 值数组中。如果您这样做,您将能够完全按照您的需要在绝对坐标中指定您的视点。

注意:如果您移动眼睛位置,您可能还需要指定视图方向。在此示例中,作者决定将视线集中在点 (0, 0, 0) 上。

这个问题很有可能与您尝试做的事情有关:Java OpenGL bindings 中的 GLU.gluLookAt 似乎什么都不做

于 2011-02-24T17:02:10.123 回答