OpenGL:在两个元素之间绘制线条

时间:2012-07-21 14:36:35

标签: c++ qt opengl graphics line

我需要在我创建的两个网格之间画一条线。每个网格与不同的模型矩阵相关联。我一直在考虑如何做到这一点,我想到了这个:

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( );

但问题是我无法在glMatrixModeglLoadMatrixf之间拨打glBeginglEnd。我也使用着色器和可编程管道,因此在渲染场景时回到固定管道的想法并不令人兴奋。

你可以:

  • 建议我如何在两个网格之间画一条线(我有他们的模型矩阵)和着色器。

  • 建议我如何编写类似于上面的代码来绘制一个具有两个网格模型矩阵的线。

2 个答案:

答案 0 :(得分: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 :(得分: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?