[英]I get white texture OpenGL
我正在嘗試繪制紋理,但是它是白色的:(我檢查了一下,紋理是32 * 32像素。
這是我的繪圖代碼:
GL11.glBegin(GL11.GL_QUADS);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, Loader.textures.get(3).getTextureID());
GL11.glVertex2f(n.getPosition().x * 40 + 3, n.getPosition().y * 40 + 3);
GL11.glVertex2f(n.getPosition().x * 40 + 3, n.getPosition().y * 40 + 37);
GL11.glVertex2f(n.getPosition().x * 40 + 37, n.getPosition().y * 40 + 37);
GL11.glVertex2f(n.getPosition().x * 40 + 37, n.getPosition().y * 40 + 3);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
GL11.glEnd();
並初始化OpenGL:
try {
Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
Display.create();
Display.setTitle(title);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, WIDTH, HEIGHT, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_CULL_FACE);
glCullFace(GL11.GL_BACK);
glClearColor(0.25f, 0.25f, 0.25f, 1);
} catch (LWJGLException e) {
e.printStackTrace();
}
GL11.glViewport(0, 0, WIDTH, HEIGHT);
lastFrameTime = getCurrentTime();
請幫幫我!
您必須指定紋理坐標 。 我不確定您所處的確切語法,但是生成的代碼應與此類似:
GL11.glBegin(GL11.GL_QUADS);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, Loader.textures.get(3).getTextureID());
GL11.glVertex2f(n.getPosition().x * 40 + 3, n.getPosition().y * 40 + 3);
GL11.glTexCoord2f(0f, 0f);
GL11.glVertex2f(n.getPosition().x * 40 + 3, n.getPosition().y * 40 + 37);
GL11.glTexCoord2f(0f, 1f);
GL11.glVertex2f(n.getPosition().x * 40 + 37, n.getPosition().y * 40 + 37);
GL11.glTexCoord2f(1f, 1f);
GL11.glVertex2f(n.getPosition().x * 40 + 37, n.getPosition().y * 40 + 3);
GL11.glTexCoord2f(1f, 0f);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
GL11.glEnd();
你有兩個問題。
首先,您不能在glBegin/End
的邊界內調用glBindTexture
。 您可以在之前或之后調用它:
GL11.glBindTexture(GL11.GL_TEXTURE_2D, loader.textures.get(3).getTextureID());
GL11.glBegin(GL11.GL_QUADS);
...
其次,您需要提供紋理坐標。 這些應該為每個頂點提供。 並且必須在調用glVertex
之前提供紋理坐標:
GL11.glTexCoord2f(0.0, 0.0);
GL11.glVertex2f(n.getPosition().x * 40 + 3, n.getPosition().y * 40 + 3);
GL11.glTexCoord2f(0.0, 1.0);
GL11.glVertex2f(n.getPosition().x * 40 + 3, n.getPosition().y * 40 + 37);
GL11.glTexCoord2f(1.0, 1.0);
GL11.glVertex2f(n.getPosition().x * 40 + 37, n.getPosition().y * 40 + 37);
GL11.glTexCoord2f(1.0, 0.0);
GL11.glVertex2f(n.getPosition().x * 40 + 37, n.getPosition().y * 40 + 3);
確切地說,要使用哪個紋理坐標取決於確切的映射方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.