簡體   English   中英

在 OpenGL 中創建橢圓形或橢圓形光源?

[英]Creating a elliptic or oval light source in OpenGL?

我想為一個應用程序創建一個橢圓形光源。 我完全不知道如何實現這一點,有人有任何想法嗎?

我可以先創建一個聚光燈,然后旋轉投影矩陣,然后我最終可以得到一個橢圓形聚光燈而不是圓形聚光燈。

就像,您使用平面截取圓錐體,您可以獲得圓錐體截面,從圓形到橢圓形。 如果您使用的平面稍微旋轉而不是垂直於光線方向,則會得到一個橢圓。

您從經典的閃電着色器開始:

// Eye vector (towards the camera)
vec3 E = normalize(EyeDirection_cameraspace);
// Direction in which the triangle reflects the light
vec3 R = reflect(-l,n);
// Cosine of the angle between the Eye vector and the Reflect vector,
// clamped to 0
//  - Looking into the reflection -> 1
//  - Looking elsewhere -> < 1
float cosAlpha = clamp( dot( E,R ), 0,1 );

color =
  // Ambient : simulates indirect lighting
  MaterialAmbientColor +
  // Diffuse : "color" of the object
  MaterialDiffuseColor * LightColor * LightPower * cosTheta / (distance*distance) ;
  // Specular : reflective highlight, like a mirror
  MaterialSpecularColor * LightColor * LightPower * pow(cosAlpha,5) / (distance*distance);

光的圓形來自float cosAlpha = clamp( dot( E,R ), 0,1 ); ,更准確地說來自dot(E,R) 因為它對於恆定的 E;R 角度獲得相同的值(具有相同的原點 R 可以圍繞 E 繞圈,點將保持不變)。 要獲得橢圓形聚光燈,您必須更改此點積的結果。

首先,您必須為橢圓選擇主軸。 說 M(垂直於 E),然后變換 R 以沿 M 增加它。

所以執行R = R + R*abs(dot(R,M))*factor; dot(R,E)

編輯

此處提供一個實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM