3
我正在爲我的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
的方法嗎?或者我是否需要在片段着色器中從頭開始實施照明?
(注意,我沒有試圖做任何形式的先進的照明技術。我使用的着色器裁剪目的,只想使用標準的照明方式。)