我需要将纹理切成两半,然后更改它们的侧面(纹理的左部分到右角,右纹理到左角)。
我使用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
当位置和纹理坐标错误时,当我绘制一半时它们也会出错。
我想在着色器中我什么都不需要改变。