采用同一副BMP位图(例如砖墙位图),向多个的四边形上进行贴图,不规则的四边形包括不同长度、宽度的矩形,以及梯形。
以前采用下述方式进行贴图:
glTexCoord2f(0.0f,0.0f); 
glVertex3f(v1.m_x,v1.m_y,v1.m_z);

glTexCoord2f(1.0f,0.0f); 
glVertex3f(v2.m_x,v2.m_y,v2.m_z);glTexCoord2f(1.0f,1.0f); 
glVertex3f(v3.m_x,v3.m_y,v3.m_z);

glTexCoord2f(0.0f,1.0f); 
glVertex3f(v4.m_x,v4.m_y,v4.m_z);由于不同的矩形的长度、宽度不一致,因此砖墙的纹理不统一,显示效果较差。现在需要将这些纹理的比例在显示上一致,例如一块砖的长度在任何四边形上都保持一致,在OpenGL中该如何设置?
恳请大家指点!

解决方案 »

  1.   

    有点不可能.用glTextParameteri 设一下 GL_TEXTURE_WRAP_S 与 GL_TEXTURE_WRAP_T 试试.这两个参数好象是做这个的.
      

  2.   

    glTextParameteri(GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTextParameteri(GL_TEXTURE_WRAP_T, GL_REPEAT);矩形长度和宽度不一致你要根据大小比例设置纹理坐标(纹理坐标不统一),不然纹理会被拉伸,纹理坐标可以设置大于1.0,以便重复显示
      

  3.   

    wglMakeCurrent(hDC,hglrc);
    glGenTextures(1, &uiBindID);
    glBindTexture(GL_TEXTURE_2D, uiBindID);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);// GL_NEAREST);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);// GL_NEAREST);
    glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &fLargest);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest);
    gluBuild2DMipmaps(GL_TEXTURE_2D,4,lCol,lRow,texFormat,GL_UNSIGNED_BYTE,tc);
    wglMakeCurrent(hDC,NULL);
    正如楼上所说,矩形的长宽与纹理坐标的大小应该比例一致。
      

  4.   

    EXT_texture_filter_anisotropic 这个参数需要OpenGL扩展库的支持,包含在哪个头文件里/?
      

  5.   

    GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT和
    GL_TEXTURE_MAX_ANISOTROPY_EXT,在vc6中需要哪个库支持?
      

  6.   

    glext.h
    《超级宝典》第三版上有。