1

更新


我已经停止使用glutSolidCube并开始手动应用纹理。仍然无济于事。任何想法,如果没有,你能指出一个纹理成功应用于立方体的例子吗?

glRotatef(180, 0.0f, 1.0f, 0.0f);

glBindTexture(GL_TEXTURE_CUBE_MAP, texture);

glTranslatef(pos_x, 0, pos_z);

int size = 1;

// Begin Rending
glBegin(GL_QUADS);

// Face 1
glNormal3f( 0.0f, 0.0f, 1.0f);  

glTexCoord2f(0.0f, 0.0f);
glVertex3f( size, size,-size);

glTexCoord2f(1.0f, 0.0f);
glVertex3f(-size, size,-size);

glTexCoord2f(1.0f, 1.0f);
glVertex3f(-size, size, size);

glTexCoord2f(0.0f, 1.0f);
glVertex3f( size, size, size);    

// Face 2

glNormal3f( 0.0f, 0.0f,-1.0f);

glTexCoord2f(0.0f, 0.0f);
glVertex3f( size,-size, size);    

glTexCoord2f(1.0f, 0.0f);
glVertex3f(-size,-size, size);

glTexCoord2f(1.0f, 1.0f);
glVertex3f(-size,-size,-size);

glTexCoord2f(0.0f, 1.0f);
glVertex3f( size,-size,-size);

// Face 3


glTexCoord2f(0.0f, 0.0f);
glVertex3f( size, size, size);    

glTexCoord2f(1.0f, 0.0f);
glVertex3f(-size, size, size);

glTexCoord2f(1.0f, 1.0f);
glVertex3f(-size,-size, size);    

glTexCoord2f(0.0f, 1.0f);
glVertex3f( size,-size, size);

// Face 4

glNormal3f( 0.0f,-1.0f, 0.0f);  

glTexCoord2f(0.0f, 0.0f);
glVertex3f( size,-size,-size);

glTexCoord2f(1.0f, 0.0f);
glVertex3f(-size,-size,-size);

glTexCoord2f(1.0f, 1.0f);
glVertex3f(-size, size,-size);

glTexCoord2f(0.0f, 1.0f);
glVertex3f( size, size,-size);

// Face 5

glNormal3f( 1.0f, 0.0f, 0.0f);

glTexCoord2f(0.0f, 0.0f);
glVertex3f(-size, size, size);    

glTexCoord2f(1.0f, 0.0f);
glVertex3f(-size, size,-size);    

glTexCoord2f(1.0f, 1.0f);
glVertex3f(-size,-size,-size);

glTexCoord2f(0.0f, 1.0f);
glVertex3f(-size,-size, size);

// Face 6

glNormal3f( 1.0f, 0.0f, 0.0f);

glTexCoord2f(0.0f, 0.0f);
glVertex3f( size, size,-size);

glTexCoord2f(1.0f, 0.0f);
glVertex3f( size, size, size);

glTexCoord2f(1.0f, 1.0f);
glVertex3f( size,-size, size);

glTexCoord2f(0.0f, 1.0f);
glVertex3f( size,-size,-size);    

glEnd();

我正在使用 OpenGL + Glut 制作一个简单的基于体素的游戏,但在加载纹理并将其应用于立方体时遇到问题。纹理在这里创建:

texture = SOIL_load_OGL_cubemap (
    "block.png",
    "block.png",
    "block.png",
    "block.png",
    "block.png",
    "block.png",
    SOIL_LOAD_RGB,
    SOIL_CREATE_NEW_ID,
    SOIL_FLAG_MIPMAPS
);

并应用到这里的draw方法中:

glEnable(GL_TEXTURE_GEN_S); //enable texture coordinate generation
glEnable(GL_TEXTURE_GEN_T);
glBindTexture(GL_TEXTURE_2D, texture);
glutSolidCube(2);
glDisable(GL_TEXTURE_GEN_S); //enable texture coordinate generation
glDisable(GL_TEXTURE_GEN_T);

但是当我运行应用程序时,我仍然得到一个纯白色的立方体。


(来源:snag.gy

我错过了一些非常明显的东西吗?

4

1 回答 1

0

glutSolidCube 不包含 uv 坐标,因此 OpenGL 无法知道应该在哪里应用纹理。我相信只有 glutSolidTeapot 可以这样纹理?不过不确定。

无论如何,除了自动生成 uv 坐标之外,没有任何方法可以轻松地对 glutSolidCube 进行纹理处理。我不确定如何去做,但这个链接可能会有所帮助。如果您不想处理自动生成坐标,则只需手动绘制立方体并在那里指定 uvs。

于 2014-03-06T19:06:08.063 回答