0

解决方案:在 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);
4

0 回答 0