我已经实现了我的“引擎”,它曾经很好地画线。但是现在,在我实现了简单的 sprite 之后,线条不再渲染(但 sprite 可以)。当我将 glEnable(GL_TEXTURE_2D) 放入我的初始化代码中时,一切都出错了。
glClearColor(0.0f,0.0f,0.0f,0.0f);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glEnable( GL_BLEND );
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, 1, -1);
我的线条是这样画的:
glLineWidth(lineWidth);
glColor4f(color.getR(), color.getG(), color.getB(), color.getA());
if(transformToViewport) {
Point a = vp.transformCoords(begin);
Point b = vp.transformCoords(end);
glVertex3f(a.coords[0], a.coords[1], 0);
glVertex3f(b.coords[0], b.coords[1], 0);
}
else {
glVertex3f(begin.coords[0], begin.coords[1], 0);
glVertex3f(end.coords[0], end.coords[1], 0);
}
和 Sprite :
float transformedH = vp.transformLength(height);
float transformedW = vp.transformLength(width);
Point transformedCenter = vp.transformCoords(center);
glBindTexture(GL_TEXTURE_2D, texture.getTextureID());
glTexCoord2f(0f, 1f);
glVertex2f(transformedCenter.coords[0] - transformedW / 2, transformedCenter.coords[1] - transformedH / 2);
glTexCoord2f(1f, 1f);
glVertex2f(transformedCenter.coords[0] + transformedW / 2, transformedCenter.coords[1] - transformedH / 2);
glTexCoord2f(0f, 0f);
glVertex2f(transformedCenter.coords[0] - transformedW / 2, transformedCenter.coords[1] + transformedH / 2);
glTexCoord2f(1f, 1f);
glVertex2f(transformedCenter.coords[0] + transformedW / 2, transformedCenter.coords[1] - transformedH / 2);
glTexCoord2f(1f, 0f);
glVertex2f(transformedCenter.coords[0] + transformedW / 2, transformedCenter.coords[1] + transformedH / 2);
glTexCoord2f(0f, 0f);
glVertex2f(transformedCenter.coords[0] - transformedW / 2, transformedCenter.coords[1] + transformedH / 2);
glBindTexture(GL_TEXTURE_2D, 0);
最佳答案
在绘制纹理之前(例如在方法中)使用 glEnable(GL_TEXTURE_2D);
,然后在之后立即使用 glDisable(GL_TEXTURE_2D);
。
对于初学者(有时对于更复杂的系统),最好将 glEnable
和 glDisable
调用配对在一起,以防止不必要的功能被用于事物(在某些情况下会导致问题,例如)您不需要它们。
关于java - OpenGL 只渲染纹理,而不是线条(可能很简单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20429127/