【问题标题】:Why is my Texture Quad positioned incorrectly with glTexCoord2f using LWJGL?为什么我的纹理四边形使用 LWJGL 使用 glTexCoord2f 定位不正确?
【发布时间】:2014-10-08 17:26:46
【问题描述】:

如果我能制作这些,我将用草、树和其他东西制作 2D 冒险游戏。我的问题是,当我使用 glTexCoord2f 将纹理钳制为四边形时,它们彼此分离大约 25 个像素。这些四边形应该像任何 2D 游戏一样连接在一起。

我用 SlickUtil 加载它们,纹理的大小是 100x100

这是我渲染四边形和 InitGL 的源代码

public static void Render(){
    example--;
    GL11.glLoadIdentity();
    Color.white.bind();
    system.Game.ground.bind();
    GL11.glTranslatef(example, 0, 0);
    //I used for loop for cloning quad at each side.
    for(int x = 0; x <= width; x++){
        GL11.glBegin(GL11.GL_QUADS);
        GL11.glTexCoord2f(0, 0);
        GL11.glVertex2f(x * 100, 0);
        GL11.glTexCoord2f(1, 0);
        GL11.glVertex2f(x * 100 + 100, 0);
        GL11.glTexCoord2f(1, 1);
        GL11.glVertex2f(x * 100 + 100, 100);
        GL11.glTexCoord2f(0, 1);
        GL11.glVertex2f(x * 100, 100);
        GL11.glEnd();
    }
    GL11.glLoadIdentity();
}

这是我的 InitGL 代码。

GL11.glEnable(GL11.GL_TEXTURE_2D);              
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);         

GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

GL11.glViewport(0,0,width,height);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, width, height, 0, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);

【问题讨论】:

  • 您可以从不使用固定功能管道开始,而是使用着色器和 VBO
  • 你的纹理尺寸是多少?你是如何加载它们的?这听起来可能是一个常见问题,您使用的库将纹理大小四舍五入为 2 的幂,而您的实际纹理大小不是 2 的幂。
  • 看起来你试图在你的问题中包含一个截图,但有些事情搞砸了......你能在你的问题中对![][1]做点什么吗?如果您链接到屏幕截图,我可以为您嵌入。
  • 问题是我没有足够的声誉来包含图像。

标签: opengl 2d lwjgl


【解决方案1】:

SlickUtil 仅读取尺寸为 2 次方的纹理。原因是,只有从 OpenGL 2.0 开始,OpenGL 才能读取非二维次方的纹理。尝试加载尺寸为 128 x 128 像素的纹理。然后以 100 x 100 像素显示它(就像您在示例中所做的那样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多