我试图按照示例代码简单地在黑色背景上显示一个矩形,但它似乎没有显示。我做的是
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。
答案 0 :(得分:1)
首先要做的事情是:你只需要运行整个
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);
将顶点放在(100,100)处,实际上等效于
glVertex2i(100, 100);
另外,请记住,负像素将在屏幕外呈现,因为OpenGL的坐标系原点(0,0)位于 左下方 和行为类似于数学类中坐标系的第一象限,而不像左上角带有(0,0)的传统计算机坐标系。
对于黑色背景,LWJGL的Display
默认为黑色背景,因此建议使用覆盖整个显示宽度和高度的背景颜色绘制四边形。一个四边形不会真正影响你的表现。
答案 1 :(得分:0)
glVertex2f
使用与glOrtho
相同的尺寸单位,因此,除非您的显示宽度和高度以1为单位,如10或更小,否则您可能看不到任何内容!