0

我正在学习 2D 的 Opengl(特别是使用 java slick2D 库,但这可能不是这个问题的一个因素)。我发现我可以更改 push 一个新的转换矩阵,例如将世界坐标转换为屏幕(视图)坐标。

我想用它来缩放我的视图,增加对象之间的距离,但是一旦完成,我想在屏幕坐标中绘制图像和形状,比如 HUD。基本上,我希望坐标改变,但图形保持不变,所以我可以在每个比例上渲染自定义图像。

这可以通过一些巧妙的转换或一些 OpenGL 选项来完成,而不是手动计算所有坐标吗?

4

2 回答 2

5
  1. 清除颜色和深度缓冲区

  2. 为缩放的 2D/3D 渲染设置投影/模型视图矩阵

  3. 启用深度测试

  4. 渲染缩放的 2D/3D 场景

  5. 重置 2D 叠加的投影/模型视图

  6. 禁用深度测试

  7. 绘制 2D 叠加

  8. 重复

于 2013-04-19T16:15:26.853 回答
1

好的,想通了,你必须使用两个单独的投影:

1.- 缩放世界坐标,以便在正确的场景位置上绘制对象:

    g.pushTransform();

    // Always zoom in the center of the screen.
    g.translate(resolution.getX(), resolution.getY());
    g.scale(scale, scale);

    // Move the view
    g.translate(-view.getX(), -view.getY());

2.- 推一个新矩阵来绘制对象,反转比例变换,使对象的图形不随比例变化:

    g.pushTransform();

    // Center on the current object.
    g.translate(pos.x, pos.y);

    // Undo scaling of graphics!
    g.scale(1.0f/scale, 1.0f/scale);
于 2013-04-19T23:44:34.563 回答