发生了什么
绑定过程:
SDL_Surface *s = IMG_Load(filename.c_str());
glBindTexture(GL_TEXTURE_2D, textureIndex);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB,
s->w, s->h, GL_RGB, GL_UNSIGNED_BYTE, s->pixels);
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER,
GL_LINEAR );
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_LINEAR );
光栅过程(拟使用伪代码):
// gl pushMatrix, Traslation and rotations;
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureIndex);
glColor3f(1,1,1);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glDisable(GL_LIGHTING);
glBegin(GL_TRIANGLES);
for (face f in faces) {
glNormal3d(faceNormal.x, faceNormal.y, faceNormal.z);
for (i = 0, i < 3, ++i) {
glTexCoord3d(texturePoint[i].x, texturePoint[i].y, 0);
glVertex3d(vertex[i].x, vertex[i].y, vertex[i].z);
}
}
glEnd();
glPopMatrix();
// gl PopMatrix to exit from traslation / rotation context.
#1 楼
我看到您使用glEnable(GL_TEXTURE_GEN_S);但也可以使用glTexCoord(...)来加载坐标。这些是IIRC的互斥功能。如果要提供自己的纹理坐标,则无需使用glEnable(GL_TEXTURE_GEN_n)。评论
$ \ begingroup $
你说得对!我只是试图删除这些行,第一个示例现在的行为类似于第二个示例。至此,我认为第二个示例仅存在“旋转纹理”问题,我将尝试让您知道。
$ \ endgroup $
–phagio
16年7月7日在11:33
$ \ begingroup $
是的,我确认,这可以解决问题。非常感谢!
$ \ endgroup $
–phagio
16年7月7日在12:20
#2 楼
for (i = 0, i < 3, ++i)
glTexCoord3d(texturePoint[i].x, texturePoint[i].y, 0);
glVertex3d(v[i]->x(), v[i]->y(), v[i]->z());
此代码调用
glTexCoord3d
三次,仅调用glVertex3d
一次。您需要在for
循环周围放置更多的花括号。评论
$ \ begingroup $
嗨,谢谢你:)对不起,这是一个错字:周期是正确的(否则我将超出范围)。我要添加必要的括号。
$ \ endgroup $
–phagio
16年6月17日在13:29
#3 楼
您的几何体可能已为Direct3D做好了准备,其纹理空间原点的放置方式有所不同(左上角与左下角)。尝试翻转纹理的Y坐标(即,从底部到顶部加载)或V纹理的坐标(glTexCoord3d(texturePoint[i].x, 1.0f - texturePoint[i].y, 0);
)。评论
$ \ begingroup $
试过了,没有用。我认为Direct3D几何不是这种情况,因为我在Ubuntu上-Direct3D不是Microsoft专有的吗?
$ \ endgroup $
–phagio
16年6月20日在19:38
$ \ begingroup $
更新:它实际上与此有关,尽管这是一个小错误。
$ \ endgroup $
–phagio
16年7月21日在7:28
评论
您的GL_TEXTURE_MATRIX设置为什么?也许它具有一定的扩展性? (此外,此代码的矩阵模式是什么?您推送当前矩阵,但在执行此操作之前似乎没有设置模式。)在绑定代码之前:glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(70,3.0 / 4,0.2,1000); glMatrixMode(GL_MODELVIEW); glLoadIdentity();没有排序的缩放比例(实际上有缩放比例,但是当您提到它时,我将其删除,并且并没有太大改变结果)。