Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java glFrustum()完全没有必要?_Java_Opengl_Lwjgl - Fatal编程技术网

Java glFrustum()完全没有必要?

Java glFrustum()完全没有必要?,java,opengl,lwjgl,Java,Opengl,Lwjgl,所以我最近问了一个关于使用OpenGL4.2和LWJGL3在3D空间中渲染形状的问题。但是在修改代码几个小时后,我发现glFrustum()和glOrtho()函数完全没有必要。我觉得不应该是这样。这是我的代码,它渲染了一个围绕Y轴旋转的彩色三角形 import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.opengl.GL11.*; import org.lwjgl.opengl.GL; import org.lwjgl.syst

所以我最近问了一个关于使用OpenGL4.2和LWJGL3在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();
    }
}
我能不麻烦使用任何投影矩阵吗?或者我会遇到问题吗

干杯,
星云这取决于你在做什么。如果您想使用更高级的openGL(2.0+),则需要切换到可编程管道并编写自己的着色器。虽然这看起来很难,而且一开始是这样,但它带来了自由。如果决定使用可编程管道,则不会使用固定管道函数,如
glOrtho()
glfrustum()
和其他即时模式渲染调用,如
glBegin(GLenum)
glVertex3f(float,float,float)
。还要记住,立即模式与3.0+渲染管道不兼容

总而言之,这并不会使即时完全无用,它对于快速、肮脏的演示仍然有用,但是如果你想编写图形密集型应用程序,比如游戏,你可能至少需要openGL 3.0

如果你想学习高级OpenGL,我可以推荐,这是我读过的,但是它需要对C++的一个小的理解(不要太多的THO)。如果你想有一个更简单的开始,有一些很好的youtube系列在频道上,比如LWJGL(尽管版本2所有openGL调用保持不变),它有多个系列,包括一个openGL游戏引擎


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

你打算做比你现在做的更复杂的事情吗?如果你想用OpenGL做任何事情,矩阵和视口管理都是必不可少的。如果你想有透视效果(远处的对象更小),那么你肯定需要一个投影矩阵。