c++ - 初学者的 opengl 多纹理

标签 c++ opengl animation textures

我有一个需要多个纹理的动画项目,我打算看到所有这些,但我的模型上只有 1 个纹理覆盖。我看不到对象上的所有 tga 文件。

    GLuint LoadTexture(char *TexName)
  {
TGAImg Img;        // Image loader

  // Load our Texture
   if(Img.Load(TexName)!=IMG_OK)
    return -1;

   glGenTextures(1,textures);            // Allocate space for texture
   glBindTexture(GL_TEXTURE_2D,textures[0]); // Set our Tex handle as current

   // Create the texture
    if(Img.GetBPP()==24)
     glTexImage2D(GL_TEXTURE_2D,0,3,Img.GetWidth(),Img.GetHeight(),0,GL_RGB,GL_UNSIGNED_BYTE,Img.GetImg());
    else if(Img.GetBPP()==32)
     glTexImage2D(GL_TEXTURE_2D,0,4,Img.GetWidth(),Img.GetHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,Img.GetImg());
    else
     return -1;

   // Specify filtering and edge actions
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);

   return textures[0];
  }

void Draw()
{
    glEnable(GL_TEXTURE_2D);

    glGenTextures(17,textures);

    for (int i = 0; i<17; i++){
         textures[i] = LoadTexture(textureNames[i   
         glBindTexture(GL_TEXTURE_2D, textures[i]);
    }

    glEnableClientState(GL_VERTEX_ARRAY);                   
    glEnableClientState(GL_NORMAL_ARRAY);
    glVertexPointer(3,GL_FLOAT,0,triangleArr);              
    glNormalPointer(GL_FLOAT, 0, normals);                  
    glDrawArrays(GL_TRIANGLES, 0, TotalConnectedTriangles); 
    glDisableClientState(GL_VERTEX_ARRAY);                  
    glDisableClientState(GL_NORMAL_ARRAY);  
}

void initialize () 
{
    glViewport(0, 0, 500, 500);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0, 1, 0.1, 1000.0);
    glMatrixMode(GL_MODELVIEW);

    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
    glShadeModel( GL_SMOOTH );
    glEnable( GL_DEPTH_TEST );

    glEnable(GL_TEXTURE_2D);    
    textures[textureIndex] = LoadTexture(textureNames[textureIndex]);   
    glBindTexture(GL_TEXTURE_2D, textures[textureIndex]);

    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);


    glEnableClientState(GL_TEXTURE_COORD_ARRAY);    
    glTexCoordPointer(2, GL_FLOAT, 0, textureArr);

}
</code>`enter code here`

我不确定是否需要发布我的 obj 文件?

最佳答案

查看 glActiveTexture 的文档.在循环中调用 glBindTexture 并不像您想象的那样。

关于c++ - 初学者的 opengl 多纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19756742/

相关文章:

c# - WPF 中的图标混合动画

c++ - 如何在OpenGL中处理纹理动画?

c++ - 动态规划 MPILOT

html - 关键帧动画回到初始状态

c++ - printf 的用户定义函数

c++ - 如何在 OpenGL C++ 上制作曲线顶点

python - 如何渲染同一列表中的多个多边形

c++ - 3d 空间中的文本 - 如何回车? (openGL, C++, OSX)

c++ - 可变参数模板 initilizer_list 技巧

c++ - 使用数组和结构的四分卫评级函数表现得很奇怪