问题描述
我正在尝试制作纹理图集,但不会渲染。我在四边形上绘制纹理图集。我正在使用免费的测试图集。
我的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 (将#修改为@)