此代碼僅呈現一個十二面體和完全忽略了glBegin(GL_TRIANGLES)
塊:GLSL和在glBegin(GL_TRIANGLES)不工作
glutSolidDodecahedron();
glBegin(GL_TRIANGLES);
glNormal3f(1, 0, 0);
glVertex3f(11, 0, 0);
glNormal3f(0, 1, 1);
glVertex3f(-11, 0, 0);
glNormal3f(0, 0, 1);
glVertex3f(0, 0, 11);
glEnd();
兩個着色器是相當簡單:
頂點着色器:
varying vec3 normal;
void main()
{
gl_Position = ftransform();
gl_FrontColor = gl_Color;
gl_BackColor = gl_Color;
normal = gl_Normal;
normal = gl_NormalMatrix * normal;
}
and the frag:
uniform vec3 lightDir;
varying vec3 normal;
void main()
{
float intensity = dot(lightDir, normal);
gl_FragColor = 0.5 * (1.5 + intensity) * gl_Color;
}
儘管glutSolidX
函數的類型適用於這個例子(基於Lightouse3D教程),如何快速繪製三角形,從一幀到另一幀改變座標(我嘗試過使用數組和GL_DYNAMIC_DRAW,但與舊的相比工作太多了「固定管道」方法)。我看到其他人仍然成功地使用GLSL着色器的glBegin(..); glEnd();
塊,所以它必須是可能的。有什麼可能會丟失?
你有什麼錯誤?你有沒有嘗試從片段着色器輸出純色? –
你確定它完全忽略了只在渲染視錐體或背面剔除三角形之外渲染它的'glBegin/glEnd'塊?前者會非常奇怪(或實際上不可能),因爲'glutSolid ...'也不過是一個簡單的'glBegin/glEnd'塊。 –
@AndreasBrinck着色器正在編譯和鏈接,沒有任何錯誤。設置純色可以工作,但會忽略片段中的僞照明計算。 – teodron