擅长:python、mysql、java
<p>如果该值是<code>float</code>,并且您知道它的范围,那么可以尝试使用上面的fragment shader进行着色,这样只会渲染非常接近渲染值的片段。在</p>
<p>最简单的方法是使用单个渲染过程在片段中使用类似以下内容:</p>
<pre><code>float x;
x = (value/10.0)+0.5; // 10 is distance of value you want the lines to render
x = x-floor(x); // x = value mod distance
if (abs(x-0.5)>0.001) discard; // do not render fragments too far from your line
</code></pre>
<p>代码只需判断您是否非常接近该值的每一个距离=10,并丢弃任何不是的片段。但是,直线/曲线的厚度可能会根据值密度和三角形大小分布而变化。必须正确设置常量(<code>distance=10,threshold=0.001</code>)才能使其工作。在</p>
<p>{这是一种非常相似的连续的方法。在</p>
<p>更准确的选择是在两次渲染中使用相同的原理。在第一个过程中,将值作为颜色渲染到某个纹理中。然后在第二个片段中,扫描周围的纹理,找到可渲染值的最近位置,然后根据到它的距离进行渲染或不渲染。这将提供精确的线条粗细。但为此,该值必须包含特定的可渲染值。这个<a href="https://stackoverflow.com/a/34708022/2521214">How to implement 2D raycasting light effect in GLSL</a>可能会有所帮助,因为它也会扫描纹理的所有方向(但目的不同)。在</p>
<p>如果上面的方法都不适合你,那么我想到的唯一的选择就是几何方法,即根据与网格的值相交(如与平面的横截面),从网格创建多段线。在</p>