我正在学习 2D 的 Opengl(特别是使用 java slick2D 库,但这可能不是这个问题的一个因素)。我发现我可以更改 push 一个新的转换矩阵,例如将世界坐标转换为屏幕(视图)坐标。
我想用它来缩放我的视图,增加对象之间的距离,但是一旦完成,我想在屏幕坐标中绘制图像和形状,比如 HUD。基本上,我希望坐标改变,但图形保持不变,所以我可以在每个比例上渲染自定义图像。
这可以通过一些巧妙的转换或一些 OpenGL 选项来完成,而不是手动计算所有坐标吗?
我正在学习 2D 的 Opengl(特别是使用 java slick2D 库,但这可能不是这个问题的一个因素)。我发现我可以更改 push 一个新的转换矩阵,例如将世界坐标转换为屏幕(视图)坐标。
我想用它来缩放我的视图,增加对象之间的距离,但是一旦完成,我想在屏幕坐标中绘制图像和形状,比如 HUD。基本上,我希望坐标改变,但图形保持不变,所以我可以在每个比例上渲染自定义图像。
这可以通过一些巧妙的转换或一些 OpenGL 选项来完成,而不是手动计算所有坐标吗?
清除颜色和深度缓冲区
为缩放的 2D/3D 渲染设置投影/模型视图矩阵
启用深度测试
渲染缩放的 2D/3D 场景
重置 2D 叠加的投影/模型视图
禁用深度测试
绘制 2D 叠加
重复
好的,想通了,你必须使用两个单独的投影:
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);