解决方案:在 OpenGL/GLSL 中绘制镶嵌的 LineLoops
我正在使用 OpenGL 和 GLSL 在球体上绘制 LineLoops(行星上的边界)。
由于定义线的点是由用户输入给出的,因此它们没有足够高的精度来防止球体内部的剪切。
我想使用镶嵌和/或几何着色器在现有点之间创建额外的点,以便点之间的距离不超过某个值(线不再夹在球体内)。
遗憾的是,关于 Tesselation Shaders 的信息并不多,所以我不太确定它们是如何工作的,但我知道我可以用它们细分图元。
这是我当前的顶点着色器:
#version 400
in layout(location = 0) vec3 position;
uniform float maxDist;
uniform float sphereRadius;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * vec4(position, 1.0);
}
如何使用 Tessalation/Geometry Shaders 在点之间创建更多顶点并偏移新创建的顶点,使它们具有给定的sphereRadius
制服长度。
我不是在寻找一种对每一行都进行细分的解决方案。我寻找一种解决方案,可以根据需要进行尽可能多的细分,以获得不超过maxDist
.
我现在画的是这样的:
glBindVertexArray(_vao);
glDrawArrays(GL_LINE_LOOP, 0, _size);
glBindVertexArray(0);