【问题标题】:OpenGL: Set position instead of translating?OpenGL:设置位置而不是平移?
【发布时间】:2010-09-17 18:33:11
【问题描述】:

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

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

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

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

我正在将 OpenGL 与 JOGL 一起使用。

更新

@Bahbar 建议如下:

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

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

【问题讨论】:

    标签: java opengl graphics jogl


    【解决方案1】:

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

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

    【讨论】:

    • 好的,如何获取当前位置?
    • @Rosarch 没有什么像当前位置,只有模型矩阵的平移。
    • 我会失去这样的转换!有什么办法可以保持转换吗? 使用现代opengl
    • @XStylish:从您的评论中不清楚您想要实现什么。我建议您就您要解决的确切问题提出问题
    【解决方案2】:

    是的,您可以使用gluLookAt 命令设置您的视图位置。如果您查看 OpenGL 常见问题解答,有一个问题与您的问题最相关:8.060 How do I make the camera "orbit" around a point in my scene?

    您可以通过以下方式模拟轨道 平移/旋转场景/对象 把你的相机留在原处 地方。例如,环绕一个物体 放置在 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)。

    这个问题很可能与您正在尝试做的事情有关:GLU.gluLookAt in Java OpenGL bindings seems to do nothing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多