【问题标题】:Binding textures with GL_TRIANGLES使用 GL_TRIANGLES 绑定纹理
【发布时间】:2014-03-15 17:28:36
【问题描述】:

过去我曾经将纹理绑定到 QUADS,然后用它渲染它们。如果我有一个动画,我必须将图像的特定部分绑定到四边形,那么我只需要使用通用坐标 [0..1] 就可以了。

问题是现在我再次尝试使用 openGL,我看到 GL_QUADS 已被弃用,现在我看到的只是用 TRIANGLES 渲染。我的问题是我不知道如何使用三角形绑定纹理。

谢谢

【问题讨论】:

    标签: opengl render gl-triangle-strip


    【解决方案1】:

    而不是单个四边形,而是将四边形分成 2 个三角形,类似于将四边形沿对角线切割。存在很多示例,stackoverflow 中最近的讨论如下:

    Index Buffer Object and UV Coordinates don't play nice

    【讨论】:

      【解决方案2】:

      这是一个如何将纹理绑定到 GL_TRIANGLE_STRIP 的示例

      float verts[] = {
          0, 0,
          w, 0,
          0, h,
          w, h,
      };
      
      const float texcoord[] = {
          u1 + 0 , v1 + v2,
          u1 + u2, v1 + v2,
          u1 + 0 , 0  + v2,
          u1 + u2, 0  + v2
      };
      
      /*
       1. uv(0,1)    +-----+   2. uv(1,1)
                     |    /|
                     |   / |
                     |  /  |
                     | /   |
                     |/    |
       3. uv(0,0)    +-----+   4. uv(1,0)
      */
      

      你可以像使用它一样简单

      glEnable(GL_TEXTURE_2D);
      
      glEnableClientState(GL_VERTEX_ARRAY);
      glEnableClientState(GL_TEXTURE_COORD_ARRAY);
      
      glTexCoordPointer(2, GL_FLOAT, 0, tex_coord);
      glVertexPointer(2, GL_FLOAT, 0, verts);
      
      glBindTexture(GL_TEXTURE_2D, texture_id);
      glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
      
      glDisable(GL_TEXTURE_2D);
      

      【讨论】:

      • 您的示例很好,但代码使用了已弃用的功能。应该改用glVertexAttribPointer
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 2013-09-07
      • 1970-01-01
      • 2011-07-13
      • 2015-02-26
      • 2014-07-11
      • 2013-02-22
      相关资源
      最近更新 更多