【问题标题】:Replacement for glOrtho in LWJGL?替换 LWJGL 中的 glOrtho?
【发布时间】:2013-11-29 22:17:52
【问题描述】:

我正在从传统 OpenGL 迁移到现代 OpenGL,但我需要替换 glOrtho,因为它现在已被删除。由于导入的差异,我似乎无法确切地弄清楚如何在 Java 中使用 C++ 完成一些事情。

相关代码:GL11.glOrtho(0, Display.getWidth(), 0, Display.getWidth(), 100, -100); 这是我当前使用的正交函数,以及现在未使用的旧 glEnables。

【问题讨论】:

    标签: java opengl lwjgl


    【解决方案1】:

    好消息是glOrtho (...) 实现起来很简单,您甚至不需要像透视投影矩阵那样的任何三角函数。

    您将要构造一个 LWJGL Matrix4f,如下所示:


    (来源:microsoft.com
    ,给定:
    (来源:microsoft.com

    请记住,这个矩阵是列优先的,所以你可以这样填充它:

    Matrix4f.m00 = 2.0f/(right-left);
    Matrix4f.m01 = 0.0f;
    Matrix4f.m02 = 0.0f;
    Matrix4f.m03 = 0.0f;
    
    Matrix4f.m10 = 0.0f;
    Matrix4f.m11 = 2.0f/(top-bottom);
    Matrix4f.m12 = 0.0f;
    Matrix4f.m13 = 0.0f;
    
    Matrix4f.m20 = 0.0f;
    Matrix4f.m21 = 0.0f;
    Matrix4f.m22 = -2.0f/(far-near);
    Matrix4f.m23 = 0.0f;
    
    Matrix4f.m30 = -(right+left)/(right-left);
    Matrix4f.m31 = -(top+bottom)/(top-bottom);
    Matrix4f.m32 =   -(far+near)/(far-near);
    Matrix4f.m33 = 1.0f;
    

    【讨论】:

    • 我会在与 glOrtho 相同的位置使用它吗?还是我需要在每个循环中应用它?
    • @KenzieTogami:您正在转向“现代”OpenGL,对吗?你实际上会做的是将此矩阵传递给 GLSL 程序矩阵制服。现代 OpenGL 消除了“当前”矩阵堆栈,因此没有与当前矩阵相乘的函数,而是将所有矩阵传递给着色器。
    • 好的,我想我明白了。谢谢!
    【解决方案2】:

    如果你想在 Java 中使用 OpenGL,我会推荐 JOGL 而不是 LWJGL。由于 LWJGL 应该更像是一个“游戏引擎”。下面是一些示例代码。

        final GL2 gl = drawable.getGL().getGL2();
        gl.glOrtho(left, right, bottom, top, near_val, far_val);
        gl.glEnable(cap);
    

    http://jogamp.org/jogl/www/

    【讨论】:

    • 这真的没有多大帮助,问题是关于从传统 OpenGL 迁移到现代 OpenGL。无论您使用 LWJGL 还是 JOGL,glOrtho (...) 在现代 OpenGL(3.2+ 核心)中仍然不可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多