-2

我将它用作我的 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);
4

3 回答 3

2
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glPushMatrix();
GL11.glLoadIdentity();

您正在将模型视图矩阵重置为身份,因此任何视图转换(对齐/定位“相机”)都会被覆盖。从技术上讲,您是在“默认”视图中绘制的,并且您是否应该使用可能超出查看体积范围的透视投影。

于 2011-10-09T14:23:44.897 回答
1

我自己解决了这个问题,我计算的坐标错误,但花了一段时间才弄清楚,因为它在游戏中看起来大部分都很好。

为了版权,我不得不在这里遗漏很多重要的代码,但我怀疑有人会发现我发现的错误。

于 2011-10-10T00:43:18.620 回答
0

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

根据您关于初始化程序的陈述(“在运行上述程序之前我禁用了其中一些,而我省略了一些”),您应该真正发布 GL 在渲染此立方体时所处的状态,或者在发布之前自行检查。可能是您在整理引擎所做的所有状态更改时自己发现了错误。

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

于 2011-10-09T18:22:38.033 回答