【问题标题】:Texture coordinates don't work?纹理坐标不起作用?
【发布时间】:2011-08-05 20:42:47
【问题描述】:

说真的,我对这段代码很生气,因为它不起作用:

switch(particle) {
case 0:
    glBegin(GL_TRIANGLE_STRIP);         // STONE
        glNormal3f(0.0f, 0.0f, 1.0f);
        glTexCoord2d(1, 1); glVertex3f(x+size, y+size, 0.0f); // Top Right
        glTexCoord2d(0.5, 1); glVertex3f(x-size, y+size, 0.0f); // Top Left
        glTexCoord2d(1, 0.5); glVertex3f(x+size, y-size, 0.0f); // Bottom Right
        glTexCoord2d(0.5, 0.5); glVertex3f(x-size, y-size, 0.0f); // Bottom Left
    glEnd();
    break;
case 1:
    glBegin(GL_TRIANGLE_STRIP);         // EARTH
        glNormal3f(0.0f, 0.0f, 1.0f);
        glTexCoord2d(0.5, 0.5); glVertex3f(x+size, y+size, 0.0f); // Top Right
        glTexCoord2d(0, 0.5); glVertex3f(x-size, y+size, 0.0f); // Top Left
        glTexCoord2d(0.5, 0); glVertex3f(x+size, y-size, 0.0f); // Bottom Right
        glTexCoord2d(0, 0); glVertex3f(x-size, y-size, 0.0f); // Bottom Left
    glEnd();
    break;
}

案例 0 工作正常,但案例 1 没有,我不知道为什么...... 这是图像(32x32 和两个 16x16 子纹理):

【问题讨论】:

  • 定义“不工作?”屏幕上发生了哪些您认为无法正常工作的情况?
  • 没什么。在情况 0 中,应用程序呈现正确的子纹理。但如果情况 1 直接不渲染任何内容。我猜问题出在 glTextCoord2d(...) 但这些似乎是正确的:/
  • 如果将代码从案例 0 复制到案例 1 会发生什么?
  • 然后正确渲染石头颗粒:S
  • 如果 case 0 是正确的(是吗?),那么 case 1 不应该是TR=(0.5, 1) TL=(0, 1) BR=(0.5, 0.5) BL=(0, 0.5)吗?

标签: java opengl texture-mapping


【解决方案1】:

假设情况 0 显然可以正常工作,那么情况 1 的纹理坐标是错误的。它们应该是:

glBegin(GL_TRIANGLE_STRIP);         // EARTH
    glNormal3f(0.0f, 0.0f, 1.0f);
    glTexCoord2d(0.5, 1.0); glVertex3f(x+size, y+size, 0.0f); // Top Right
    glTexCoord2d(0, 1.0); glVertex3f(x-size, y+size, 0.0f); // Top Left
    glTexCoord2d(0.5, 0.5); glVertex3f(x+size, y-size, 0.0f); // Bottom Right
    glTexCoord2d(0, 0.5); glVertex3f(x-size, y-size, 0.0f); // Bottom Left
glEnd();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多