테셀레이션 쉐이더는 두 개의 꼭지점에 대한 베 지어 곡선을 생성합니다. 정점은 두 좌표 x와 y로 구성됩니다 (vec2). 이제 모든 정점에는 색상이 있습니다. 내 질문 : 생성 된 커브에서 정점 당 색상을 보간하는 방법은 무엇입니까? 조각 쉐이더가 기본 색상 값 (빨간색)을 설정합니다. 하지만 나는 그가 보간 된 색을 얻길 원합니다. 예GLSL 보간 컬러 테셀레이션 쉐이더
:
vertex 1 [vec2(0.0, 0.0), vec4(1.0, 0.0, 0.0, 1.0)] // red
vertex 2 [vec2(1.0, 1.0), vec4(0.0, 1.0, 0.0, 1.0)] // blue
너무 적색에서 청색에 구배가 있어야한다. 테셀레이션 쉐이더로 어떻게 할 수 있습니까?
정점 셰이더 :
#version 400
layout (location = 0) in vec2 in_position;
layout (location = 1) in vec4 in_color;
void main()
{
gl_Position = vec4(in_position, 0.0, 1.0);
}
공간 분할 제어 쉐이더 :
#version 400
layout(vertices = 2) out;
uniform int NumSegments;
uniform int NumStrips;
void main()
{
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
gl_TessLevelOuter[0] = float(NumSegments);
gl_TessLevelOuter[1] = float(NumStrips);
}
공간 분할 평가 쉐이더 :
#version 400
layout(isolines) in;
uniform mat4 Projection;
uniform mat4 Modelview;
void main()
{
float u = gl_TessCoord.x;
vec3 p0 = gl_in[0].gl_Position.xyz;
vec3 p1 = vec3(0.5, gl_in[0].gl_Position.y, 0.0);
vec3 p2 = vec3(0.5, gl_in[1].gl_Position.y, 0.0);
vec3 p3 = gl_in[1].gl_Position.xyz;
float u1 = (1.0 - u);
float u2 = u * u;
// Bernstein polynomials
float b3 = u2 * u;
float b2 = 3.0 * u2 * u1;
float b1 = 3.0 * u * u1 * u1;
float b0 = u1 * u1 * u1;
// Cubic Bezier interpolation
vec3 p = p0 * b0 + p1 * b1 + p2 * b2 + p3 * b3;
gl_Position = Projection * Modelview * vec4(p, 1.0);
}
조각 쉐이더 :
#version 400
layout (location = 0) out vec4 FragColor;
void main()
{
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
'vs_alpha'와'in_alpha'는 무엇입니까? –
아, 죄송합니다, 이것은 첫 번째 시도에서 휴식입니다. 그래서 그냥 무시하십시오. –