glOrtho 相当于 VBO 的

glOrtho equivalent to VBO's

我正在尝试使用 LWJGLClickTeam Fusion 游戏移植到 Java。我决定简单地使用像素测量,因为这个游戏中的所有内容都是使用 PNG 文件完成的,甚至是动画(是的,真的)。我听说过名为 glOrtho() 的函数,它可以让您设置在 OpenGL 中绘制事物的方式。

虽然我设法使它与 glVertexf() 等函数一起使用,但包括 glOrtho() 在内的那些函数已被弃用,如果我是正确的,则在 OpenGL 3.1 中完全删除。所以,我正在使用现代方法,即使用 VBO's, Indices, Shaders 等。有什么方法可以使用 VBO 来实现 glOrtho() 的效果?

如果你需要我,我也可以在这里上传我现有的代码;请留下评论,我会用我现有的代码更新 post。

对于 OpenGL >= 3.1,您需要定义自己的矩阵。有一些库为您定义了它们。 GLM,举一个著名的例子。

glOrtho 矩阵定义可在此处找到:https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml

glOrtho 不是 "effect",而是一种将事物投影到屏幕上的方法。 Ortho指的是"orthogonal",意思是"no perspective".

您的投影矩阵 (glOrtho) 应该与您的 VBO 数据分开计算。整个固定功能堆栈已从核心配置文件中删除(包括 glVertexf 等等),因此您应该进行自己的矩阵数学运算,并将带有正交投影的投影矩阵发送到您作为着色器制服编写的着色器.

LWJGL 有一个 Matrix4f class 让生活变得更轻松,最后我检查它在 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;
}