0

我不明白为什么会这样:

glPushMatrix();
GL11.glBindTexture(this.target, this.textureID);
glColor3f(1, 1, 1);
glTranslated(posX, posY, 0);
glBegin(GL_QUADS);
    {
        glTexCoord2d(posXLeft, posYTop);
        glVertex2d(0, 0);
        glTexCoord2d(posXLeft, posYBottom);
        glVertex2d(0, verH);
        glTexCoord2d(posXRight, posYBottom);
        glVertex2d(verW, verH);
        glTexCoord2d(posXRight, posYTop);
        glVertex2d(verW, 0);
    }
    glEnd();
glPopMatrix();

工作完美,其中 posX 和 posY 显然是以像素为单位的位置,posXLeft 等是要显示的纹理的比率。

但是这个:

glPushMatrix();
GL11.glBindTexture(this.target, this.textureID);
glColor3f(1, 1, 1);
glTranslated(posX, posY, 0);
    glBegin(GL_LINES);
    {
    glVertex2d(10, 10);
    glVertex2d(800, 600);
}
glEnd();
glPopMatrix();

不是。绘制线条而不是一块纹理应该更容易。

我想要达到的是在纹理上添加一些之字形线来模拟损坏或破裂时的裂缝,但我什至无法画出一条线,所以我被困在这里。

有什么建议吗?

4

2 回答 2

2

You still got texturing enabled in your line drawing code. But you don't specify texture coordinates, so you'll draw your line with a solid color as defined by texture at the currently set texture coordinate.

My suggestion: Disable texturing for drawing that line.

于 2013-11-15T11:55:33.610 回答
0

正如 datenwolf 所说,您必须禁用纹理,但您必须重新启用它,尽管如果该属性设置不正确,您将在下一个绘图周期遇到问题。

解决方案是:

glPushMatrix();
GL11.glBindTexture(this.target, this.textureID);
glColor3f(1, 1, 1);
glDisable(GL_TEXTURE_2D);
glTranslated(posX, posY, 0);
    glBegin(GL_LINES);
    {
    glVertex2d(10, 10);
    glVertex2d(800, 600);
}
glEnd();
glEnable(GL_TEXTURE_2D);
glPopMatrix();

那应该可以解决您的问题。

于 2013-11-15T16:16:44.167 回答