OpenGL / GLM 3D模型纹理问题

时间:2015-12-08 18:17:41

标签: opengl

我正在使用OpenGL,GLM,ILU和GLUT库来加载和纹理化3D模型。模型似乎正确加载,但是当纹理化时,纹理似乎重复出现。

我在下面放了两张图片,显示没有纹理的纹理。

非织构化

织构

如果你仔细观察最后一张图像,纹理会以微小的比例应用,并在整个模型中重复。

对于代码,我首先加载纹理。

ILboolean success = false;

if (ilGetInteger(IL_VERSION_NUM) < IL_VERSION)
{
    return false;
}

ilInit();  /*Initialize the DevIL library*/
ilGenImages(1, &ilTextureID); //Generate DevIL image objects
ilBindImage(ilTextureID); /* Binding of image object */
success = ilLoadImage((const ILstring)theFilename); /* Loading of image*/

if (!success)
{
    ilDeleteImages(1, &ilTextureID);
    return false;
}

success = ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE); // Convert every colour component into unsigned byte.
if (!success)
{
    return false;
}

textureWidth = ilGetInteger(IL_IMAGE_WIDTH);
textureHeight = ilGetInteger(IL_IMAGE_HEIGHT);

glGenTextures(1, &GLTextureID); // GLTexture name generation 
glBindTexture(GL_TEXTURE_2D, GLTextureID); // Binding of GLtexture name 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Use linear interpolation for magnification filter
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // Use linear interpolation for minifying filter 
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),
    ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
    ilGetData()); /* Texture specification */
glBindTexture(GL_TEXTURE_2D, GLTextureID); // Binding of GLtexture name 

ilDeleteImages(1, &ilTextureID);

我尝试过添加

等内容
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

但这似乎只是使模型没有纹理。

然后我调用该方法来建模加载方法并应用纹理:

m_model = glmReadOBJ(mdlFilename);
glmFacetNormals(m_model);
glmVertexNormals(m_model, 180.0f, false);
m_TextureID = mdlTexture.getTexture();
m_model->textures[m_model->numtextures - 1].id = m_TextureID;
m_model->textures[m_model->numtextures - 1].width = mdlTexture.getTWidth();
m_model->textures[m_model->numtextures - 1].height =mdlTexture.getTHeight();

对于上面的代码,在我调试的过程中,我得到了负值 &#34;顶点&#34;,&#34;法线&#34;和&#34; facetnorms&#34;对于3D模型,但我正在获得&#34; numnormals&#34;,&#34; numtexcoords&#34;和&#34; numfacetnorms&#34;。我不完全确定这是否正常。

最后是渲染模型:

glPushMatrix();
//transformations here...
glTranslatef(mdlPosition.x, 0.0f, -mdlPosition.z);
glRotatef(mdlRotationAngle, 0, 1, 0);
glScalef(mdlScale.x, mdlScale.y, mdlScale.z);
glmDraw(m_model, GLM_SMOOTH | GLM_TEXTURE | GLM_MATERIAL);  
glPopMatrix();

0 个答案:

没有答案