如何使用OpenGL在两个世界坐标点之间绘制一条线?

如何使用OpenGL在两个世界坐标点之间绘制一条线?,opengl,Opengl,我有一个基本的3D演示,使用VAO和着色器使用OpenGL绘制线条 // Example vertices float[] verts = { 1f, 1f, 1f, 0f, 0f, 0f }; // Loading to VAO etc. as standard and enabling shader here... // Draw call glBindVertexArray(vaoID); glDrawArrays(GL_LINES, 0, 2); 顶点着色器是基本

我有一个基本的3D演示,使用VAO和着色器使用OpenGL绘制线条

// Example vertices
float[] verts = { 
    1f, 1f, 1f,
    0f, 0f, 0f
};

// Loading to VAO etc. as standard and enabling shader here...

// Draw call
glBindVertexArray(vaoID);
glDrawArrays(GL_LINES, 0, 2);
顶点着色器是基本的,目前没有使用模型矩阵:

gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.0f);
这将输出在三维世界中正确绘制的线,但起点/终点仅基于顶点位置,这不太有用

我的问题是:如何在世界坐标中指定起点和终点位置,并在这些点之间画一条线


我可以想象我需要通过不同的模型矩阵变换两个顶点的位置,但是这是如何工作的,以及线的原始顶点应该是什么,还不清楚。

不,您将对两个点应用相同的变换。变换矩阵首先需要包含到(p2-p1)的缩放,然后是到p1(x,y,z)的平移。哦,你正确地选择了(0,0,0)和(1,1,1)的顶点。我想我有点遵循这个逻辑,但是缩放部分对我来说不太清楚。无论点的xyz位置如何,此操作都有效吗?我是否需要关注旋转,或者缩放和平移工作是否与线的方向无关?如果您只想在世界坐标系中的两条线之间定义一条线,则实际上不需要进行任何旋转。不管怎么说,我不确定这个麻烦是否值得,最好写下顶点并更新顶点缓冲区。在这种情况下,我会使用什么顶点?我想我有点误解了。对我来说,进行缩放和平移听起来更干净一些,那么如果线条需要改变位置,我只需要担心模型矩阵?如果你能发布一个完整的答案和一些示例代码,我很乐意检查它并接受它是否适合我。谢谢