2
我試圖用Cg來實現聚光燈效果。 我已經設法做正常的環境和漫射照明。OpenGL聚光燈與Cg
我明白聚光燈(位置,方向,截止角度)的基本功能,但在Cg中處理這些功能仍然沒有解決。
這是我如何計算聚光燈參數:
float4 dir_aux = mul(ModelViewProj, direction);
float4 lightP_aux = mul(ModelViewProj, lightPosition);
float3 lightP = lightP_aux.xyz;
float3 dir = normalize(dir_aux.xyz);
float3 P = IN.position;
float3 V = normalize(lightP - P);
dir = normalize(lightPosition - dir);
float angle = dot(V, dir);
方向是聚光燈指向(例如:(0,0,0))的像素
lightPosition是光線的位置
P是我試圖點亮的一點。 IN.position來自頂點着色器,它已經與modelViewProj相乘。
角度是光線方向與光線方向之間角度的餘弦,也是我試圖點亮的點的餘弦。
問題是改變光線的方向不會影響聚光燈。它總是以0,0,0爲中心。 如果我改變lightPosition,聚光燈會改變,但它仍然從0,0,0開始,並擴大oppsite光的位置
另一件事是當我計算方向矢量時,我使用lightPosition而不是lightP如果我使用lightP,聚光燈根本不起作用。
此外,聚光燈僅在場景的一半點亮。
我的主要參考文獻是第5章(照明),從The Cg Tutorial。