即使使用GL_REPEAT,为什么我的纹理也会拉伸?

时间:2013-04-05 12:52:23

标签: opengl graphics 3d textures texture-mapping

enter image description here这是我的输出:![在此处输入图像说明] [2]

当我的墙很长时,图像被拉伸,当它们很小时,图像被挤压。

我的加载纹理代码,loadTGATexture方法来自superBible。

glGenTextures(1,&texture);  
glBindTexture(GL_TEXTURE_2D,texture);   
LoadTGATexture(textureFile, GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_REPEAT);

我给出纹理坐标的代码片段是: (j是建筑物墙壁的索引)

    buildingArray[j][0] = n2.x;
    buildingArray[j][3] = 0;
    buildingArray[j][4] = n2.y;

    texBlgArray[j][0] = repeat_after_length;
    texBlgArray[j][5] = 0;

    normals[j][0] = normal.x;
    normals[j][6] = normal.y;
    normals[j][7] = normal.z;

    j++;

我将长度重复设置为1。

我认为如果长度为>则纹理GL_REPEAT会发生。 1,我应该将其设置为大于1的值,但如果我这样做,纹理中的窗口变得非常小而且大而不是。窗户是可见的。我想要平铺纹理,我不希望我的纹理纹理图像的尺寸发生任何变化:enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:5)

即使在长墙上,你的纹理坐标也可能被标准化(即它们的左角为[0,0],右下角为[1,1])。如果要重复纹理,则需要坐标超过 1.0。因此,如果三角形边的长度是x,则纹理应该超过x * some k。