2015-11-04 81 views
0

当我试图在四边形上绘制纹理(仅包含红色)时,我得到如下所示的结果:enter image description here 它不涵盖所有四边形,只包含其中的一部分。我尝试了不同的尺寸(当然,它们的宽度和高度都是偶数),图片格式,试图使用Paint和Photoshop来制作,但总是得到相同的结果。LWJGL无法正确绘制纹理

这里是我的代码:

package test2; 

import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; 
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT; 
import static org.lwjgl.opengl.GL11.GL_MODELVIEW; 
import static org.lwjgl.opengl.GL11.GL_PROJECTION; 
import static org.lwjgl.opengl.GL11.GL_QUADS; 
import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D; 
import static org.lwjgl.opengl.GL11.glBegin; 
import static org.lwjgl.opengl.GL11.glClear; 
import static org.lwjgl.opengl.GL11.glClearColor; 
import static org.lwjgl.opengl.GL11.glColor3f; 
import static org.lwjgl.opengl.GL11.glEnable; 
import static org.lwjgl.opengl.GL11.glEnd; 
import static org.lwjgl.opengl.GL11.glLoadIdentity; 
import static org.lwjgl.opengl.GL11.glMatrixMode; 
import static org.lwjgl.opengl.GL11.glOrtho; 
import static org.lwjgl.opengl.GL11.glTexCoord2f; 
import static org.lwjgl.opengl.GL11.glVertex2i; 

import java.io.IOException; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.Display; 
import org.newdawn.slick.opengl.Texture; 
import org.newdawn.slick.opengl.TextureLoader; 
import org.newdawn.slick.util.ResourceLoader; 

public class Main { 
    public static void main(String[] args){ 
     try { 
     Display.setFullscreen(true); 
     Display.setTitle("test"); 
     Display.create(); 
    } catch (LWJGLException e) { 
     e.printStackTrace(); 
    } 

     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     glOrtho(0, Display.getWidth(), Display.getHeight(), 0, 1, -1); 
     glMatrixMode(GL_MODELVIEW); 
     glEnable(GL_TEXTURE_2D); 

     while(true){ 
      glClearColor(1, 1, 1, 1); 
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

      Texture t = null; 

      try { 
       t = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("texture.png")); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      t.bind(); 

      glColor3f(1, 1, 1); 
      glBegin(GL_QUADS); 
      glTexCoord2f(0, 0); 
       glVertex2i(100, 100); 
      glTexCoord2f(0, 1); 
       glVertex2i(100, 200); 
      glTexCoord2f(1, 1); 
       glVertex2i(200, 200); 
      glTexCoord2f(1, 0); 
       glVertex2i(200, 100); 
      glEnd(); 


      Display.update(); 
      Display.sync(60); 
     } 
    } 
} 
+0

从图片我猜,矩形只覆盖屏幕的一部分,并且纹理应用于完整的矩形。 (因为你绘制的四边形总是100px的大小) – BDL

+0

纹理的大小是多少?我相信Slick为2种尺寸的纹理贴上纹理。 –

回答

0

现在我发现,纹理,其体重和身高的礼物(2^n)个完美绘图。但是我怎么处理其他纹理呢?是否有可能在OpenGL中正确使用它们?

+0

正如我在上面的评论中提到的那样,Slick会将纹理贴在两个幂上。使用其他的东西来加载纹理。 –