我需要在我创建的两个网格之间画一条线。每个网格都与不同的模型矩阵相关联。我一直在思考如何做到这一点,我想到了这个:
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( );
但问题是我不能在glBegin
和glEnd
之间调用glMatrixMode
和glLoadMatrixf
。我也在使用着色器和可编程管道,所以在渲染场景时返回到固定管道的想法并不令人兴奋。
你能:
- 建议我如何使用着色器在两个网格(我有它们的模型矩阵)之间精确地绘制一条线
或
- 建议我如何编写类似于上面的代码来绘制具有两个网格模型矩阵的线
通过将每个点与一个模型矩阵相乘来计算直线的两点。以下是伪代码。既然你在使用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
第二个点的位置可以简单地从model_matrix_object2的w向量中获取。无需与(0,0,0,1)相乘。
这是因为OpenGL中的4x4矩阵通常是由3x3旋转部分和平移向量组成的正交矩阵。最后一行填充0,0,0,1。如果你想知道4x4矩阵的平移位置,只需在最右边的列中获取向量即可。
请参阅给定一个4x4齐次矩阵,如何获得3D世界坐标?了解更多信息。