java - 如果我绘制多个四边形,OpenGL UV 坐标就会损坏

标签 java opengl bitmap rendering lwjgl

我正在尝试实现位图字体渲染。唯一让我非常困惑的事情是,当我为每个字符绘制四边形时,每次渲染一个新的四边形时,UV都绝对被破坏了。 如果我只渲染一个四边形,一切都可以。

(平铺 x = 3,y = 4)

enter image description here

这就是再加上几个字母的样子。 enter image description here

这是我渲染这些东西的代码:

...
    rc.translate(getTransform().getPos());
    drawTileAt(3, 4);
    rc.translate(100, 0, 0);
    drawTileAt(5, 5);
    rc.translate(200, 0, 0);
    drawTileAt(2,6);
    rc.translate(300,0,0);
    drawTileAt(1, 7);
...

public void drawTileAt(int x, int y)
{
    float w = 1f / 16f;
    float _x = 1f / 16f * x;
    float _y = 1f / 16f * y;
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glVertex2f(0, 100);GL11.glTexCoord2f(_x,_y);
    GL11.glVertex2f(0, 0);GL11.glTexCoord2f(_x + w,_y);
    GL11.glVertex2f(100,0);GL11.glTexCoord2f(_x + w,_y + w);
    GL11.glVertex2f(100, 100);
    GL11.glTexCoord2f(_x,_y + w);
    GL11.glEnd();
}

我也在用纹理坐标绘制 VBO 四边形,一切看起来都很好......

最佳答案

glVertex() 捆绑当前顶点状态(如纹理坐标!)并将其发送到 GPU。

因此,您需要在设置顶点位置之前设置纹理坐标:

GL11.glTexCoord2f(_x,_y);         GL11.glVertex2f(0, 100);
GL11.glTexCoord2f(_x + w,_y);     GL11.glVertex2f(0, 0);
GL11.glTexCoord2f(_x + w,_y + w); GL11.glVertex2f(100,0);
GL11.glTexCoord2f(_x,_y + w);     GL11.glVertex2f(100, 100);

关于java - 如果我绘制多个四边形,OpenGL UV 坐标就会损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28460464/

相关文章:

c++ - GLFW get Monitors count = 0,附加了另外两个监视器

java - 从相机 Intent 拍摄照片并在其上覆盖另一个小图像

c - 如何为 BITMAP 设置像素数据存储

java - CAS-Apereo Jasig : How to redirect to a custom web page after a successful login?

java - 如何避免GC暂停?

java - 远程使用 document4j 将 DOCX 转换为 PDF java

c++ - 在 OpenGL 中使用 SOIL 将纹理添加到三角形时出现问题

opengl - 3d 遮挡剔除

c++ - 为什么我的代码不渲染灰度效果

java - 有序流处理元素的状态映射操作是否以确定性方式进行?