Java 修复我的opengl渲染函数

Java 修复我的opengl渲染函数,java,opengl,lwjgl,Java,Opengl,Lwjgl,我正在使用它作为lwjgl游戏渲染功能的一部分。它不会在屏幕上渲染任何东西,但我不知道是什么搞砸了。该程序已经绘制了一个高级的纹理立方体世界,这将是选择一个玩家正在看。可能是我错过了一些愚蠢的场景。我试过在渲染循环的所有不同时间运行它,还尝试了一些设置。空间坐标绝对正确 目前,我只是想让它在选定的立方体上渲染一个白色正方形 GL11.glMatrixMode(GL11.GL_MODELVIEW); GL11.glPushMatrix(); GL11.glLoadI

我正在使用它作为lwjgl游戏渲染功能的一部分。它不会在屏幕上渲染任何东西,但我不知道是什么搞砸了。该程序已经绘制了一个高级的纹理立方体世界,这将是选择一个玩家正在看。可能是我错过了一些愚蠢的场景。我试过在渲染循环的所有不同时间运行它,还尝试了一些设置。空间坐标绝对正确

目前,我只是想让它在选定的立方体上渲染一个白色正方形

        GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glPushMatrix();
    GL11.glLoadIdentity();
    System.out.println("coords: "+left+" "+bottom+" "+back);
    GL11.glColor3f(255f, 255f, 255f);
    //left
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glVertex3f(left, bottom, back);
    GL11.glVertex3f(left, bottom, front);
    GL11.glVertex3f(left, top, front);
    GL11.glVertex3f(left, top, back);
    //right
    GL11.glVertex3f(right, bottom, front);
    GL11.glVertex3f(right, bottom, back);
    GL11.glVertex3f(right, top, back);
    GL11.glVertex3f(right, top, front);
    //top
    GL11.glVertex3f(left, top, front);
    GL11.glVertex3f(right, top, front);
    GL11.glVertex3f(right, top, back);
    GL11.glVertex3f(left, top, back);
    //front
    GL11.glVertex3f(left, bottom, front);
    GL11.glVertex3f(right, bottom, front);
    GL11.glVertex3f(right, top, front);
    GL11.glVertex3f(left, top, front);
    //back
    GL11.glVertex3f(right, bottom, back);
    GL11.glVertex3f(left, bottom, back);
    GL11.glVertex3f(left, top, back);
    GL11.glVertex3f(right, top, back);
    //bottom
    GL11.glVertex3f(right, bottom, front);
    GL11.glVertex3f(left, bottom, front);
    GL11.glVertex3f(left, bottom, back);
    GL11.glVertex3f(right, bottom, back);
    GL11.glEnd();
    GL11.glPopMatrix();
还有我所有的初始值设定项,其中一些我在运行上面的程序之前禁用了,还有一些我省略了,因为它们很容易准备/反转。我不能发布完整的代码,因为它太长了,这个游戏的图形引擎已经在开发中了

    GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE,GL11.GL_MODULATE);
    GL11.glClearColor(0.47f,0.55f,1.0f, 0.0f); 
    GL11.glClearDepth(1.0f); 
    GL11.glEnable(GL11.GL_DEPTH_TEST);
    GL11.glDepthFunc(GL11.GL_LEQUAL);
        GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
        GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
        GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glEnable(GL11.GL_ALPHA_TEST);
        GL11.glEnable( GL13.GL_MULTISAMPLE );
        GL11.glEnable( GL13.GL_SAMPLE_ALPHA_TO_COVERAGE );
        GL11.glAlphaFunc(GL11.GL_GREATER, (float) 0.01);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        GL11.glTexParameterf( GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);

您正在将modelview矩阵重置为identity,因此任何视图变换(对齐/定位“摄影机”)都将被覆盖。从技术上讲,您是在“默认”视图中绘制的,是否应该使用透视投影(可能在查看体积的边界之外)。

您启用了纹理,但没有为顶点提供任何纹理坐标。你也没有给他们法线,所以我希望你没有启用照明

根据您关于初始值设定项的陈述(“在运行上述命令之前,我禁用了一些初始值设定项,而我省略了一些初始值设定项”),您应该在呈现此多维数据集时发布GL的状态,或者在发布之前自己检查它。这可能是你甚至发现自己的错误时,摆弄所有的状态变化,你的引擎


一般来说,您应该降低显式初始化代码的级别,并始终在渲染之前立即设置所有需要的状态,因为这样可以防止出现您不知道GL实际处于哪种状态的奇怪情况。永远记住,OpenGL是一个状态机。

我自己解决了这个问题,我计算的坐标是错误的,但我花了一段时间才弄清楚,因为它在我看来基本上很好


为了版权,我不得不在这里省略了很多重要的代码,但我怀疑是否有人会发现我发现的bug。

是的,这就是我的意图。我从原点对象空间绘制块,我有函数通过对象空间移动透视图来查看它们。这不应该是问题,这些四边形根本没有渲染,我的透视图很好。我已经设置了坐标,将坐标与函数的其余部分一起放在我的面前。我不确定我是否足够清楚,这个答案并没有解决问题,因为我个人已经排除了透视问题。我将所有配置都放在主帖子中,希望这会有所帮助。此外,我在运气不佳的情况下摆弄过使用glDrawArrays(是的,我把它设置正确了),并且我尝试过禁用我的正常渲染系统,以防它被覆盖。两者都不起作用。在那之后,我删除了所有的矩阵堆叠调用,因此它像任何简单的程序一样简单,也没有运气。顺便说一句,当设置浮点颜色时(如
glColor3f
),值应该在[0,1]而不是[0255],但这不应该是你的问题,因为它们会自动被钳制到[0,1]。请注意这一点。
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glPushMatrix();
GL11.glLoadIdentity();