Java glFrustum()完全没有必要?
所以我最近问了一个关于使用OpenGL4.2和LWJGL3在3D空间中渲染形状的问题。但是在修改代码几个小时后,我发现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
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做任何事情,矩阵和视口管理都是必不可少的。如果你想有透视效果(远处的对象更小),那么你肯定需要一个投影矩阵。