내 조각 셰이더는 다음과 같습니다.
#version 430 core
uniform vec4 Ambient;
uniform vec3 LightColor;
uniform vec3 LightDirection;
uniform vec3 HalfVector;
uniform float Shininess;
uniform float Strength;
in vec4 color;
in vec3 Normal;
out vec4 FragColor;
out vec3 directfeed;
out vec3 normalfeed;
void main()
{
float diffuse = max(0.0f, dot(Normal, LightDirection));
normalfeed = Normal;
directfeed = LightDirection;
float specular = max(0.0f, dot(Normal, HalfVector));
if(diffuse <= 0.00001)
specular = 0.0f;
else
specular = pow(specular, Shininess);
vec4 ReflectLight = vec4(LightColor*specular*Strength, 0.0);
FragColor = min(color*Ambient+ReflectLight, vec4(1.0));
}
나는이 두 줄을 삭제하는 경우 normalfeed = Normal;
와 directfeed = LightDirection;
, 결과는 다를 수 있지만,이 두 개의 매개 변수 normalfeed
와는 directfeed
왜 전혀 일을하지? 두 변수를 피드백 버퍼에 출력하려고하면 다음과 같이합니다.
char* oVerts[] = { "normalfeed" ,"gl_NextBuffer","directfeed" };
glTransformFeedbackVaryings(Program, 3, oVerts, GL_INTERLEAVED_ATTRIBS);
Program
다시 링크 후 아무것도 나오지 않습니다.
조각 셰이더에서 변환 피드백을 사용할 수 없습니다. 정점 또는 지오메트리 셰이더 만 허용됩니다. 이에 대한 문서는 다음을 참조하십시오.
https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTransformFeedbackVaryings.xhtml
당신은 변수에서 무엇을 기대 normalfeed
하고 directfeed
? 프레임 버퍼에서 일부 출력을 생성하기를 원하십니까? 둘 이상의 색상 부착물에서 출력을 활성화해야합니다. 이를 설정하려면 다음 기능에 대한 문서를 읽는 것이 좋습니다.
glDrawBuffers
glBindFramebuffer
glBindRenderbuffer
glRenderbufferStorage
glFramebufferRenderbuffer
선언 한 변수가 디버깅 목적인 경우 텍스처로 렌더링하는 것이 흥미로울 수 있습니다.
http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/
두 번째 패스에서 이러한 디버그 텍스처를 사용하여 실제 장면을 오버레이하는 쿼드를 그릴 수 있습니다. 이 기술은 깊이 버퍼 또는 표면 법선을 시각화하고 디버그하는 데 자주 사용됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다