0
현재 쉐이더가있는 테스트 장면을 만들려고합니다. 이것은 내 코드입니다.OpenGL이 조각 쉐이더로 색상을 전달합니다.
vertexArray = GL.GenVertexArray();
GL.BindVertexArray(vertexArray);
float[] Vertices = new float[] {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
float[] Colors = new float[] {
1.0f, 1.0f, 0.0f, 1.0f,
1.0f, 1.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 1.0f
};
vertexBuffer = GL.GenBuffer();
colorBuffer = GL.GenBuffer();
GL.BindBuffer(BufferTarget.ArrayBuffer, vertexBuffer);
GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(sizeof(float) * Vertices.Length), Vertices, BufferUsageHint.StaticDraw);
GL.BindBuffer(BufferTarget.ArrayBuffer, colorBuffer);
GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(sizeof(float) * Colors.Length), Colors, BufferUsageHint.StaticDraw);
//Loading shaders...
렌더링 내 루프 :이 정점 셰이더 사용
GL.UseProgram(shaderProgram);
GL.EnableVertexAttribArray(0);
GL.BindBuffer(BufferTarget.ArrayBuffer, vertexBuffer);
GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, 0);
GL.BindBuffer(BufferTarget.ArrayBuffer, colorBuffer);
GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, 0, 0);
GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
GL.DisableVertexAttribArray(0);
GL.UseProgram(0);
:
#version 330 core
layout(location = 0) in vec3 position;
layout(location = 1) in vec4 color;
out vec4 vColor;
void main()
{
gl_Position = vec4(position, 1.0);
vColor = color;
}
을 그리고이 단편 쉐이더 : 나는 그것을 실행하면
#version 330 core
in vec4 vColor;
out vec4 fColor;
void main(void)
{
fColor = vColor;
}
, 난 얻을 삼각형이지만 검은 색입니다. 내 색상 배열에있는 것처럼 색을 원합니다. 프래그먼트 셰이더의 vColor를 vec4(1,0,0,1)
으로 변경하면 붉은 삼각형이 생깁니다. 그래서 두 쉐이더 사이에 문제가있을 것입니다. 아마도 버텍스 쉐이더가 프래그먼트 쉐이더에 색상을 전달하지 않을 수도 있습니다 ...
무엇이 잘못 되었나요? 색상을 올바르게 전달하려면 어떻게해야합니까?