OpenGL 2.1/GLSL 1.2 응용 프로그램에 버텍스 및 프래그먼트 쉐이더를 추가하고 있습니다.고정 함수 재질과 조명을 조각 쉐이더로 패스 스루하는 방법은 무엇입니까?
버텍스 쉐이더 :
#version 120
void main(void)
{
gl_Position = ftransform();
gl_FrontColor = gl_Color;
}
조각 쉐이더 :
#version 120
void main(void)
{
if (/* test some condition */) {
discard;
} else {
gl_FragColor = gl_Color;
}
}
문제는 조건이 실패 할 경우, gl_FragColor
단지 gl.glColor3f()
마지막 호출 내 고정 기능이었다 무엇으로 설정됩니다 있다는 것입니다 방법.
대신 재료 및 조명 매개 변수에서 파생 된 일반 색상을 통과시키고 싶습니다. 예 :
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_AMBIENT, lightingAmbient, 0);
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_DIFFUSE, lightingDiffuse, 0);
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_SPECULAR, lightingSpecular, 0);
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_POSITION, directionalLightFront, 0);
gl.glMaterialfv(GL.GL_FRONT, GLLightingFunc.GL_AMBIENT, materialAmbient, 0);
gl.glMaterialfv(GL.GL_FRONT, GLLightingFunc.GL_DIFFUSE, materialDiffuse, 0);
gl.glMaterialfv(GL.GL_FRONT, GLLightingFunc.GL_SPECULAR, materialSpecular, 0);
gl.glMaterialfv(GL.GL_FRONT, GLLightingFunc.GL_EMISSION, materialEmissive, 0);
gl.glMaterialf(GL.GL_FRONT, GLLightingFunc.GL_SHININESS, shininess);
gl_FragColor
에이 값을 할당 할 방법이 있습니까? 아니면 프래그먼트 쉐이더에서 조명을 처음부터 구현해야합니까?
(참고, 나는 고급 조명 기술의 모든 종류의 일을하려고 아니에요. 내가 목적으로 클리핑을위한 쉐이더를 사용하고 단지 표준 조명 방법을 사용하려는거야.)