4

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

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

但问题是我不能在glMatrixModeandglLoadMatrixf之间调用glBeginand glEnd。我还使用着色器和可编程管道,因此在渲染场景时返回到固定管道的想法并不令人兴奋。

你可以吗:

  • 准确地建议我如何使用着色器在两个网格(我有它们的模型矩阵)之间画一条线。

或者

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

2 回答 2

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
于 2012-07-21T15:56:17.977 回答
1

第二个点的位置可以简单地取自model_matrix_object2的w向量。无需乘以 (0,0,0,1)。

这是因为 OpenGL 中的 4x4 矩阵通常是由 3x3 旋转部分和平移向量组成的正交矩阵。然后用 0,0,0,1 填充最后一行。如果您想知道 4x4 矩阵的转换位置,只需在最右边的列中获取向量。

请参阅给定 4x4 齐次矩阵,我如何获得 3D 世界坐标?了解更多信息。

于 2012-07-21T19:01:48.530 回答