2012-07-21 112 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