【问题标题】:What is the best way to create camera movement in JOGL?在 JOGL 中创建相机运动的最佳方法是什么?
【发布时间】:2014-07-06 14:15:34
【问题描述】:

我正在努力做到这一点,以便我可以在世界各地移动相机,但是我很难找到能够清楚解释这一点的资源。我发现的大多数资源都在解释(至少我认为它们是)如何在不移动相机的情况下围绕相机移动世界来创造运动的错觉。

我已经实现了这个,但是世界的旋转导致世界围绕世界的原点而不是相机旋转。现在我的心态是,如果我可以在世界中移动相机并独立旋转它,我会得到更好的结果。我在问哪种方式更适合在 JOGL 中创建相机移动。围绕相机移动世界,还是在世界中移动相机?

【问题讨论】:

  • 类似于 waaitt 建议的东西在 JMonkeyEngine 3 中实现,它有一个 JOGL 后端,它可以成为灵感的来源。如果您更喜欢使用固定管道,请修改模型视图矩阵,只需使用 gluLookAt。看看这个问题:stackoverflow.com/questions/1342149/…
  • 移动相机等同于向相反方向移动世界。您面临的问题是围绕原点发生旋转。如果您的相机不在(世界)原点,您需要先将其平移到原点,执行旋转,然后将其平移回正确位置。

标签: java opengl camera jogl frame-rate


【解决方案1】:

使用带有着色器的现代 openGL,这样您就可以使用后者。将变换存储在相机对象上,并使用它来计算传递给对象的视图矩阵。尝试拥有多个相机和多个视口。

//C++
//choose camera to use in the viewport
for (int i = 0; i < myWin.allObj.size(); ++i)
{
    if (myWin.allObj[i]->name->val_s == "persp1") //set persp1 by default
        selCam = myWin.allObj[i];
}

//rendering loop
ViewM_t = glm::translate(glm::mat4(), -selCam->t->val_3);
ViewM_rx = glm::rotate(glm::mat4(), selCam->r->val_3.x, myWin.axisX);
ViewM_ry = glm::rotate(glm::mat4(), selCam->r->val_3.y, myWin.axisY);
ViewM = ViewM_t * ViewM_rx * ViewM_ry;

//in object
compute MVP and upload to GPU

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2017-04-13
    相关资源
    最近更新 更多