完全不需要glFrustum()?

时间:2016-02-06 05:18:10

标签: java opengl lwjgl

所以我最近问了一个关于使用OpenGL 4.2和LWJGL 3在3D空间中渲染形状的问题。但是在修改代码几个小时之后,我发现glFrustum()glOrtho()函数是完全没必要。我觉得不应该这样。这是我的代码,它呈现一个围绕Y轴旋转的彩色三角形。

import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import org.lwjgl.opengl.GL;
import org.lwjgl.system.MemoryUtil;

public class TestClass
{
    public static void main (String[] args)
    {
        if (glfwInit() == GL_FALSE)
        {
            System.out.println ("GLFW initialization failed.");
            System.exit (1);
        }

        glfwWindowHint (GLFW_RESIZABLE, GL_FALSE);
        long window = glfwCreateWindow (1280, 720, "OpenGL Window", MemoryUtil.NULL, MemoryUtil.NULL);
        glfwMakeContextCurrent (window);
        glfwSwapInterval (1);
        GL.createCapabilities();
        glfwShowWindow (window);

        while (glfwWindowShouldClose (window) == GL_FALSE)
        {
            glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glRotatef (1, 0, 1, 0);

            glBegin (GL_TRIANGLES);
            glColor3f (1, 0, 0);
            glVertex3f (0, 0.5f, 0);
            glColor3f (0, 1, 0);
            glVertex3f (-0.5f, -0.5f, 0);
            glColor3f (0, 0, 1);
            glVertex3f (0.5f, -0.5f, 0);
            glEnd();

            glfwSwapBuffers (window);
            glfwPollEvents();
        }

        glfwDestroyWindow (window);
        glfwTerminate();
    }
}

我可以不用任何投影矩阵而烦恼,或者我会遇到问题吗?

干杯, 星云

1 个答案:

答案 0 :(得分:0)

这取决于你正在做什么。你想要做更高级的openGL(2.0+),你需要切换到可编程管道并编写自己的着色器。虽然这看起来很难,但起初它却以自由提供了回报。如果您决定使用可编程管道,则不会使用固定管道功能,例如glOrtho()glfrustum()以及其他即时模式渲染调用,如glBegin(GLenum)glVertex3f(float, float, float)。另请注意,立即模式与3.0+渲染管道不兼容。

所有人都说,这并不能立即完全无用,它对于快速和肮脏的演示仍然很有用,但是如果你想对图形密集型应用程序(如游戏)进行编程,那么你就会#39 ; ll可能至少需要openGL 3.0。

如果你想学习高级的openGL,我可以推荐The Official Guide to Learning OpengGL,这是我读过的,但是需要对C ++有一点了解(不要太多)。如果你想要一个更容易的开始,有一些很好的youtube系列在频道上,如ThinMatrix's OpenGL tutorial与LWJGL非常深入(尽管版本2所有openGL调用保持不变),thebenybox谁有多个系列,包括一个OpenGL游戏引擎。

希望这澄清了你的一些困惑!