簡體   English   中英

在openGL / glsl中圍繞固定對象旋轉光

[英]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"

第四部分必須是一個,因為多虧了翻譯的可能性。

您可以在此處找到更多信息

3D圖形/ OpenGL中的模型矩陣

但是,他們正在使用列向量。 從旋轉矩陣判斷,我確實相信您使用行向量,所以平移分量位於模型矩陣的最后一行,而不是最后一列。

暫無
暫無

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

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