我需要在我创建的两个网格之间画一条线。每个网格与不同的模型矩阵相关联。我一直在考虑如何做到这一点,我想到了这个:
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( );
但问题是我无法在glMatrixMode
和glLoadMatrixf
之间拨打glBegin
和glEnd
。我也使用着色器和可编程管道,因此在渲染场景时回到固定管道的想法并不令人兴奋。
你可以:
或
答案 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?。