[英]Rotating a light around a stationary object in openGL/glsl
因此,我試圖圍繞場景中心靜止的物體旋轉光。 我很清楚,我將需要使用旋轉矩陣才能進行此轉換。 但是,我不確定如何在代碼中執行此操作。 我是線性代數的新手,所以在此過程中進行解釋的任何幫助都將大有幫助。
基本上,我現在正在處理這兩個對象,我不確定如何使光線在物體上循環。
mat4 rotation = mat4(
vec4( cos(aTimer), 0.0, sin(aTimer), 0.0),
vec4( 0, 1.0, 0.0, 0.0),
vec4(-sin(aTimer), 0.0, cos(aTimer), 0.0),
vec4( 0.0, 0.0, 0.0, 1.0)
);
這就是我的燈光設置方式:
float lightPosition[4] = {5.0, 5.0, 1.0, 0};
glLightfv(GL_LIGHT0, GL_POSITION, lightPositon);
這段代碼中的aTimer是一個不斷遞增的浮點數。
即使您希望光線圍繞對象旋轉,也不得為此目的使用旋轉矩陣,而應使用平移矩陣。
您要處理的矩陣是模型矩陣。 它定義了對象的方向,位置和比例。
您在這里擁有的矩陣是旋轉矩陣,因此燈光的方向將改變,但位置不會改變,這正是您想要的。
因此,這里有兩個問題需要解決:
1.正確定義矩陣。 由於您想要翻譯(圓形),因此我認為這是您需要的矩陣:
mat4 rotation = mat4(
vec4( 1.0, 0.0, 0.0, 0.0),
vec4( 0.0, 1.0, 0.0, 0.0),
vec4( 0.0, 0.0, 1.0, 0.0),
vec4( cos(aTimer), sin(aTimer), 0.0, 1.0)
);
2.為光源定義一個良好的位置頂點。 由於它是單個頂點,並且是移動光的模型矩陣的工作(上方),因此光矢量4D應該為:
float lightPosition[4] = {0.0f, 0.0f, 0.0f, 1.0f};
//In C, 0.0 is a double, you may have warnings at compilation for loss of precision, so use the suffix "f"
第四部分必須是一個,因為多虧了翻譯的可能性。
您可以在此處找到更多信息
但是,他們正在使用列向量。 從旋轉矩陣判斷,我確實相信您使用行向量,所以平移分量位於模型矩陣的最后一行,而不是最后一列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.