翻转纹理侧(切成两半),左侧的纹理绘制在右侧,右侧的纹理绘制在左侧

时间:2020-08-20 11:39:35

标签: c# opengl textures

我需要将纹理切成两半,然后更改它们的侧面(纹理的左部分到右角,右纹理到左角)。

我使用OpenGl.net框架。

enter image description here enter image description here

首先,我要进行这种增加:

  • glTexElem从6到12,

  • VertexAttribPointer的大小,

  • 大小BufferData,

         var glTexElements = new[]
         {
             0u, 1u, 3u,
             1u, 2u, 3u,
             3u, 2u, 4u,
             2u, 4u, 5u
         };
         ...
    
    
         Gl.BufferData(BufferTarget.ElementArrayBuffer, 
             (uint)(sizeof(uint) * glTexElements.Length), glTexElements, BufferUsage.StaticDraw);                                              
    
         Gl.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
    

接下来,我创建一个顶点,在其中放置两个半纹理(添加更多顶点):

        var verticies = new float[]
        { 

            //positions      // texture coords
            800/2,    0,      0.5f,   1f, // bottom right
            800/2,  600,      0.5f,   0f, // top right
            0,      600,      0f,     0f, // top left
            0,        0,      0f,     1f  // bottom left 
            ,

            800,       0,     1.0f, 1.0f, // bottom right
            800,     600,     1.0f,   0f, // top right
            800/2,   600,     0.5f,   0f, // top left
            800/2,      0,    0.5f,   1f  // bottom left 


        };//work

并绘制:

        ...
        Gl.BufferSubData(
            BufferTarget.ArrayBuffer, IntPtr.Zero, (uint)(sizeof(float) * verticies.Length), verticies);

        Gl.BindBuffer(BufferTarget.ElementArrayBuffer, _glTexArrayElemBuffer);

        Gl.DrawElements(PrimitiveType.Triangles,12, DrawElementsType.UnsignedInt, IntPtr.Zero);
        ...
  

现在可以正常工作了,但是当我尝试在屏幕左侧将纹理的正确部分放置到屏幕左侧时,

        var verticies = new float[]
        { 
            //positions      // texture coords
            800/2,    0,      1f,   1f, // bottom right
            800/2,  600,      1f,   0f, // top right
            0,      600,      0.5f, 0f, // top left
            0,        0,      0.5f, 1f  // bottom left 
            ...
       }//left side - right piece of texture -> dont work

当位置和纹理坐标错误时,当我绘制一半时它们也会出错。

我想在着色器中我什么都不需要改变。

0 个答案:

没有答案
相关问题