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