我正在使用它作为我的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);
答案 0 :(得分:2)
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glPushMatrix();
GL11.glLoadIdentity();
您正在将模型视图矩阵重置为标识,因此将覆盖任何视图变换(对齐/定位“摄像机”)。从技术上讲,您正在绘制“默认”视图,并且您应该使用可能在查看体积范围之外的透视投影。
答案 1 :(得分:1)
我自己解决了这个问题,我在计算坐标时出错了,但是由于看起来大部分都是精美的,所以需要一段时间来解决这个问题。
为了版权,我不得不在这里遗漏了很多重要的代码,但我怀疑是否有人会发现我发现的错误。
答案 2 :(得分:0)
启用纹理,但不要为顶点指定任何纹理坐标。你也不给他们法线,所以我希望你不要启用照明。
根据你关于初始值设定项的陈述(“我在运行上面的内容之前禁用了一些,其中一些我省略了”)你应该真正发布GL在渲染这个多维数据集时的状态,或者在发布检查之前它自己。在摆弄引擎所做的所有状态更改时,您甚至可能会自己发现错误。
一般情况下,您应该从显式初始化代码中降级并始终在渲染之前立即设置所需的所有状态,因为这可以防止您不知道GL实际处于哪种状态的奇怪事情。永远记住,OpenGL是一个状态机。