C#OpenGL 4-纹理图集代码不起作用,没有任何绘制

问题描述

我正在尝试制作纹理图集,但不会渲染。我在四边形上绘制纹理图集。我正在使用免费的测试图集。

我的GLSL顶点着色器代码

#version 130

in vec3 vertexPosition;
in vec2 vertexUV;

out vec2 uv;

uniform mat4 projection_matrix;
uniform mat4 view_matrix;
uniform mat4 model_matrix;
uniform float numberOfRows;
uniform vec2 offset;

void main(void)
{
    uv = (vertexUV/numberOfRows) + offset;
    gl_Position = projection_matrix * view_matrix * model_matrix * vec4(vertexPosition,1);
}

我的GLSL片段着色器代码

#version 130

uniform sampler2D texture;

in vec2 uv;

out vec4 fragment;

void main(void)
{
    fragment = texture2D(texture,uv);
}

我的地图集代码是基于我的工作纹理代码

public class Atlas : Texture
{
    public int NumberOfRows = 1;
    public Atlas(Bitmap BitmapImage,int nor,bool FlipY = true) : base(BitmapImage,FlipY)
    {
        NumberOfRows = nor;
    }

    public float XOffset(int index)
    {
        int column = index % NumberOfRows;
        return (float)column / NumberOfRows;
    }
    public float YOffset(int index)
    {
        int row = index / NumberOfRows;
        return (float)row / NumberOfRows;
    }
}

绘图代码

Shaders.AtlasTexturedShader.Use();

Shaders.AtlasTexturedShader[Shaders.AtlasTexturedModel].SetValue(
    Matrix4.CreateScaling(Scale) *
    Matrix4.CreateTranslation(Position) *
    GetRotationMatrix());

Gl.BindTexture(atlas);

if(AtlasIndex != OldAtlasIndex) Shaders.AtlasTexturedShader[Shaders.AtlasTexturedOffset].SetValue(
    new Vector2(atlas.XOffset(AtlasIndex),atlas.YOffset(AtlasIndex)));
Gl.BindBufferToShaderAttribute(Vertices,Shaders.AtlasTexturedShader,Shaders.AtlasTexturedPosition);
Gl.BindBufferToShaderAttribute(UV,Shaders.AtlasTexturedUV);
Gl.BindBuffer(Index);

if (Type == QuadType.Bench) Gl.DrawArrays(BeginMode.Quads,Index.Count);
if (Type == QuadType.Fan) Gl.DrawArrays(BeginMode.TriangleFan,Index.Count);

OldAtlasIndex = AtlasIndex;

我已经连接了所有内容,并且仔细检查了是否在着色器中设置了所有内容。我也尝试过用DrawArrays()切换DrawElements()。有谁知道我如何使我的地图集代码正常工作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)