我正在尝试使用ClickTeam Fusion
将Java
游戏移至LWJGL
。我决定简单地使用像素测量,因为这个游戏中的所有内容都是使用PNG
文件完成的,甚至是动画(是的,真的)。我听说过名为glOrtho()
的函数,它可以让你设置OpenGL
中绘制事物的方式。
虽然我设法使用glVertexf()
等功能,但我们不推荐使用glOrtho()
等功能,如果我在OpenGL 3.1
中完全删除了。所以,我正在使用现代的方式来使用VBO's, Indices, Shaders
等。有没有办法使用glOrtho()
来实现VBO
的效果?
如果你需要我,我也可以上传我在这里的当前代码;只需发表评论,我将使用当前的代码更新帖子。
答案 0 :(得分:3)
对于OpenGL> = 3.1,您需要定义自己的矩阵。有一些库为您定义了它们。 GLM,一个着名的名字。
glOrtho矩阵定义可以在这里找到:https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml
glOrtho不是一种“效果”,而是一种将事物投射到屏幕上的方法。 Ortho指的是“正交”,意思是“没有透视”。
答案 1 :(得分:0)
您的投影矩阵(glOrtho
)应与您的VBO数据分开计算。整个固定功能堆栈已从核心配置文件中删除(包括glVertexf
和诸如此类的东西),因此您应该进行自己的矩阵数学运算并将带有正交投影的投影矩阵发送到您作为着色器制服编写的着色器
LWJGL有一个Matrix4f类,让生活变得更轻松,最后我检查它在LWJGL 3.0中没有替换,但从那时起事情可能发生了变化。还有一些其他库可以替代。
无论哪种方式,您都应该能够在线找到glOrtho的实现。这是LWJGL为我提出的第一个:https://github.com/SilverTiger/lwjgl3-tutorial/blob/master/src/silvertiger/tutorial/lwjgl/math/Matrix4f.java
如果你决定推出自己的相关功能:
public static Matrix4f orthographic(float left, float right, float bottom, float top, float near, float far) {
Matrix4f ortho = new Matrix4f();
float tx = -(right + left) / (right - left);
float ty = -(top + bottom) / (top - bottom);
float tz = -(far + near) / (far - near);
ortho.m00 = 2f / (right - left);
ortho.m11 = 2f / (top - bottom);
ortho.m22 = -2f / (far - near);
ortho.m03 = tx;
ortho.m13 = ty;
ortho.m23 = tz;
return ortho;
}