2012-07-21 79 views
4

我需要在兩個創建的網格之間畫一條線。每個網格與不同的模型矩陣相關聯。我一直在思考如何做到這一點,我想這:OpenGL:在兩個元素之間畫線

glMatrixMode(GL_MODELVIEW); 
glLoadMatrixf(first_object_model_matrix); 
glBegin(GL_LINES); 
glVertex3f(0, 0, 0); // object coord 
glMatrixMode(GL_MODELVIEW); 
glLoadMatrixf(first_object_model_matrix); 
glVertex3f(0, 0, 0); // ending point of the line 
glEnd(); 

但問題是,我不能叫glMatrixModeglLoadMatrixfglBeginglEnd之間。我也在使用着色器和可編程管線,所以用我的場景渲染返回到固定管線的想法並不令人興奮。

你能:

  • 建議我正是如何繪製兩個篩網(我有自己的模型矩陣)着色器之間的線路。

  • 推薦我如何寫一個類似於上面的代碼來繪製具有兩個網格模型矩陣的線。
+2

我完成它的唯一方法是將座標乘以各自的矩陣,然後使用標識模型視圖矩陣繪製線條。 – 2012-07-21 14:44:43

+2

是否有任何理由不能在渲染階段之前計算並存儲線條點? – Aesthete 2012-07-21 14:54:03

回答

4

通過將每個模型矩陣乘以一個模型矩陣來計算線的兩點。以下是僞代碼。由於您使用的是Qt,因此您可以使用其內置的數學庫來實現這一效果。

vec3 line_point_1 = model_matrix_object1 * vec4(0, 0, 0, 1); 
vec3 line_point_2 = model_matrix_object2 * vec4(0, 0, 0, 1); 
// Draw Lines 
1

第二點的位置可以簡單地從model_matrix_object2的w向量中取得。不需要與(0,0,0,1)相乘。

這是因爲OpenGL中的4x4矩陣通常是由3x3旋轉部分和平移向量組成的正交矩陣。最後一行然後用0,0,0,1填充。如果您想知道4x4矩陣將轉換的位置,只需在最右側的列中獲取矢量。

有關更多信息,請參閱Given a 4x4 homogeneous matrix, how can i get 3D world coords?

+0

我不明白,你能解釋一下好嗎? – 2012-07-21 19:02:42