Java can';在openGL中渲染形状
我试图按照示例代码简单地在黑色背景上显示一个矩形,但它似乎没有显示出来。我所做的是Java can';在openGL中渲染形状,java,opengl,lwjgl,Java,Opengl,Lwjgl,我试图按照示例代码简单地在黑色背景上显示一个矩形,但它似乎没有显示出来。我所做的是 private static void initGL(){ glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1); glMatrixMode(GL_MODELVIEW); glDisable(GL_DEPTH_
private static void initGL(){
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1);
glMatrixMode(GL_MODELVIEW);
glDisable(GL_DEPTH_TEST); //2D mode
glColor3f(0.5f, 0.0f, 1.0f);
glBegin(GL_QUADS);
glVertex2f(-0.75, 0.75);
glVertex2f(-0.75, -0.75);
glVertex2f(0.75, -0.75);
glVertex2f(0.75, 0.75);
glEnd();
}
除了黑色背景外,它不会在屏幕上显示任何内容。有人知道我可能做错了什么吗?我在eclipse中使用lwjgl。第一件事:您只需运行整个
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1);
glMatrixMode(GL_MODELVIEW);
在您的程序中,可能在您运行Display.create()
后不久,会发生一次事件
此外,您正在使用错误的顶点进行细分。你写的
glVertex2f(-0.75, 0.75);
glVertex2f(-0.75, -0.75);
glVertex2f(0.75, -0.75);
glVertex2f(0.75, 0.75);
这意味着绘制一个从(-0.75,-0.75)像素到(0.75,0.75)像素的矩形。这太小了,不值得注意。我猜您假定glVertex2f
处理显示宽度的分数。事实并非如此glVertex2f
处理实际坐标,它只允许分数像素,不像glVertex2i
(这很有用,信不信由你,它有助于更平滑的动画)。差不多
glVertex2f(100F, 100F);
将顶点放置在(100100)处,实际上相当于
glVertex2i(100, 100);
另外,请记住,负像素将在屏幕外渲染,因为OpenGL的坐标系原点(0,0)位于左下角,其行为类似于数学课中坐标系的第一个象限,而不像传统的计算机坐标系(0,0)位于左上角
至于黑色背景,LWJGL的
显示
默认为黑色背景,因此建议使用您的背景颜色绘制一个覆盖整个显示宽度和高度的四边形。一个四元组不会真正影响您的性能。第一件事:您只需运行整个四元组
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1);
glMatrixMode(GL_MODELVIEW);
在您的程序中,可能在您运行Display.create()
后不久,会发生一次事件
此外,您正在使用错误的顶点进行细分。你写的
glVertex2f(-0.75, 0.75);
glVertex2f(-0.75, -0.75);
glVertex2f(0.75, -0.75);
glVertex2f(0.75, 0.75);
这意味着绘制一个从(-0.75,-0.75)像素到(0.75,0.75)像素的矩形。这太小了,不值得注意。我猜您假定glVertex2f
处理显示宽度的分数。事实并非如此glVertex2f
处理实际坐标,它只允许分数像素,不像glVertex2i
(这很有用,信不信由你,它有助于更平滑的动画)。差不多
glVertex2f(100F, 100F);
将顶点放置在(100100)处,实际上相当于
glVertex2i(100, 100);
另外,请记住,负像素将在屏幕外渲染,因为OpenGL的坐标系原点(0,0)位于左下角,其行为类似于数学课中坐标系的第一个象限,而不像传统的计算机坐标系(0,0)位于左上角
至于黑色背景,LWJGL的
显示
默认为黑色背景,因此建议使用您的背景颜色绘制一个覆盖整个显示宽度和高度的四边形。一个四元组不会真正影响您的性能。glVertex2f
使用与您的glorto
相同的大小单位,因此除非您的显示宽度和高度以1为单位,例如10或更少,否则您可能看不到任何东西 glVertex2f
使用与您的glOrtho
相同的大小单位,因此除非您的显示宽度和高度以1为单位,例如10或更小,否则您可能看不到任何东西 请注意,glVertex并不总是直接映射到像素,仅当您将正交坐标系设置为等于显示大小时才会直接映射到像素。如果OP使用的是一个恒等正交矩阵,而不是从屏幕宽度/高度导出的恒等正交矩阵,那么他的-.75到.75的正方形会像预期的那样填充屏幕的中间50%。“你只需要在程序中运行整个过程一次”-不,这是一个常见的误解(虽然这在他的案例和许多其他简单案例中都有效,但它并不像你想象的那么好)。请注意,glVertex并不总是直接映射到像素,仅当您将正交坐标系设置为等于显示大小时才会直接映射到像素。如果OP使用的是标识正交矩阵,而不是从屏幕宽度/高度派生的矩阵,则他的-.75到.75正方形将按预期填充屏幕中间50%的区域。“你只需要在你的程序中运行整个程序一次”-不,这是一个常见的误解(虽然在他的情况下和其他许多简单的情况下都是有效的,但这并不像你想象的那么好)。虽然这没有Leo的答案解释得那么清楚,但它在glVertex
和glOrtho
调用中的值之间建立了更好的联系。虽然这没有Leo的答案解释得那么清楚,但它在glVertex
和glOrtho
调用中的值之间建立了更好的联系。