我有一个世界点列表 (XYZ),我想在 openGL window 中显示它们
I have a list of world points(XYZ) and I want to show them in a openGL window
我在 x 中的点在 0.25 和 1.21 之间,我在 y 中的点在 3 和 4 之间,我在 z 中的点在 99 和 101 之间。
这是我的顶点着色器
#version 330 core
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 1) in vec3 vertexColor;
// Output data ; will be interpolated for each fragment.
out vec3 fragmentColor;
// Values that stay constant for the whole mesh.
uniform mat4 MVP;
void main(){
// Output position of the vertex, in clip space : MVP * position
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
// The color of each vertex will be interpolated
// to produce the color of each fragment
fragmentColor = vertexColor;
}
这里是 c++ 中的代码
glm::mat4 Projection = glm::ortho(0.0f, 2.0f, 2.0f, 5.0f, 0.0f, 200.0f);
// Camera matrix
glm::mat4 View = glm::lookAt(
glm::vec3(4, 3, -3), // Camera is at (4,3,-3), in World Space
glm::vec3(0, 0, 0), // and looks at the origin
glm::vec3(0, 1, 0) // Head is up (set to 0,-1,0 to look upside-down)
);
// Model matrix : an identity matrix (model will be at the origin)
glm::mat4 Model = glm::mat4(1.0f);
// Our ModelViewProjection : multiplication of our 3 matrices
glm::mat4 MVP = Projection * View * Model; // Remember, matrix multiplication is the other way around
glm::mat4 modelview = MVP;
我还可以补充一点,我能够打印一个矩形,我使用该投影将顶点硬编码为 -1 和 1(注意这里是透视而不是正交)
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
你没有看向你的点云。 glm::lookAt
的第一个参数是相机的位置,第二个参数是你正在看的点。
因此视图的方向是 (0, 0, 0) - (4, 3, 3) = (-4, -3, 3).
如果点在 x: [0.25, 1.21], y: [3, 4], z: [99, 101] 范围内。视线不与该体积相交。
更改视图的目标 (center):
glm::mat4 View = glm::lookAt(
glm::vec3(4, 3, -3),
glm::vec3(0.73f, 3.5f, 100.0f),
glm::vec3(0, 1, 0));
glm::vec3(0.73f, 3.5f, 100.0f)
是点云的中心。
并且您需要确保投影的中心在视线上:
glm::ortho(-2.0f, 2.0f, 2.0f, -2.0f, 0.0f, 200.0f);
我在 x 中的点在 0.25 和 1.21 之间,我在 y 中的点在 3 和 4 之间,我在 z 中的点在 99 和 101 之间。
这是我的顶点着色器
#version 330 core
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 1) in vec3 vertexColor;
// Output data ; will be interpolated for each fragment.
out vec3 fragmentColor;
// Values that stay constant for the whole mesh.
uniform mat4 MVP;
void main(){
// Output position of the vertex, in clip space : MVP * position
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
// The color of each vertex will be interpolated
// to produce the color of each fragment
fragmentColor = vertexColor;
}
这里是 c++ 中的代码
glm::mat4 Projection = glm::ortho(0.0f, 2.0f, 2.0f, 5.0f, 0.0f, 200.0f);
// Camera matrix
glm::mat4 View = glm::lookAt(
glm::vec3(4, 3, -3), // Camera is at (4,3,-3), in World Space
glm::vec3(0, 0, 0), // and looks at the origin
glm::vec3(0, 1, 0) // Head is up (set to 0,-1,0 to look upside-down)
);
// Model matrix : an identity matrix (model will be at the origin)
glm::mat4 Model = glm::mat4(1.0f);
// Our ModelViewProjection : multiplication of our 3 matrices
glm::mat4 MVP = Projection * View * Model; // Remember, matrix multiplication is the other way around
glm::mat4 modelview = MVP;
我还可以补充一点,我能够打印一个矩形,我使用该投影将顶点硬编码为 -1 和 1(注意这里是透视而不是正交)
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
你没有看向你的点云。 glm::lookAt
的第一个参数是相机的位置,第二个参数是你正在看的点。
因此视图的方向是 (0, 0, 0) - (4, 3, 3) = (-4, -3, 3).
如果点在 x: [0.25, 1.21], y: [3, 4], z: [99, 101] 范围内。视线不与该体积相交。
更改视图的目标 (center):
glm::mat4 View = glm::lookAt(
glm::vec3(4, 3, -3),
glm::vec3(0.73f, 3.5f, 100.0f),
glm::vec3(0, 1, 0));
glm::vec3(0.73f, 3.5f, 100.0f)
是点云的中心。
并且您需要确保投影的中心在视线上:
glm::ortho(-2.0f, 2.0f, 2.0f, -2.0f, 0.0f, 200.0f);