【问题标题】:How to setup OpenGL camera for a racing game如何为赛车游戏设置 OpenGL 相机
【发布时间】:2009-12-08 15:51:59
【问题描述】:

我需要视图来显示道路多边形(矩形 3.f * 100.f),道路的消失点位于视口的 3/4 高度,最近的道路边缘作为视口的底部。请参阅Crazy Taxi game 了解我想要做的示例。

我正在使用 iPhone SDK 3.1.2 默认的 OpenGL ES 项目模板。

我设置投影矩阵如下:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustumf(-2.25f, 2.25f, -1.5f, 1.5f, 0.1f, 1000.0f);

然后我使用 glRotatef 来调整横向模式并设置相机。

glMatrixMode(GL_MODELVIEW);

glLoadIdentity(); glRotatef(-90, 0.0f, 0.0f, 1.0f);

const float cameraAngle = 45.0f * M_PI / 180.0f; gluLookAt(0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 100.0f, 0.0f, cos(cameraAngle), sin(cameraAngle));

我的道路多边形三角带是这样的:

static const GLfloat roadVertices[] = {

-1.5f, 0.0f, 0.0f, 1.5f, 0.0f, 0.0f, -1.5f、0.0f、100.0f、 1.5f, 0.0f, 100.0f, };

而且我似乎无法为 gluLookAt 找到正确的参数。我的消失点总是在屏幕的中心。

【问题讨论】:

    标签: iphone opengl-es camera projection


    【解决方案1】:

    您想在真正的 3D 中执行此操作吗?基本上你看的点是屏幕的中心。您希望它是地平线以下屏幕的四分之一。

    您可以通过投影和视图(基本上不投影)反转最终位置来解决此问题。

    假设屏幕在 x 方向从 -1.0f 延伸到 1.0f,在 y 方向从 -1.0f 延伸到 1.0f,那么您希望地平线变为 (0.0f, 0.5f)。这意味着您需要向下看屏幕的四分之一(即-0.5f)。对于给定的 z(我们将随机选择 0.5f)。因此,如果我们采用您已经定义的视图以及“身份”矩阵以及“投影”矩阵,那么您可以通过 gluUnproject 传递它,如下所示:

    GLdouble eyeX, eyeY, eyeZ;
    gluUnproject( 0.0f, -0.5f, 0.5f, identity, view, projection, &eyeX, &eyeY, &eyeZ );
    

    然后您可以将您的眼睛值重新插入 gluLookAt,您现在将看到路面下方的一个点。

    我确信有无数其他方法可以做到这一点,但应该可以...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多