擅长:python、mysql、java
<p>假设您要绘制Z坐标为<code>ci</code>(对于“等高线间隔”)的倍数的等高线(等值线)。例如,对于<code>ci=5</code>,有效值为25、30、35等。
<br/>一个三角形可以没有、一个或多个等高线与之相交。我不在乎台词。我使用点,我检查碎片着色器中的每个片段。在</p>
<p/><p>第一个目标是在片段着色器中获取片段的世界坐标。
<br/>片段着色器接收<code>gl_FragCoord</code>,它在屏幕坐标中有<code>{x,y,z}</code>。或者在顶点着色器中,您可以使用<code>z</code>传递一个<em>变化</em>。阅读<a href="https://stackoverflow.com/questions/38938498/how-do-i-convert-gl-fragcoord-to-a-world-space-point-in-a-fragment-shader">this q&a</a>以了解如何进行此转换。在</p>
<p/><p>现在在世界坐标系中有一个<code>z</code>,现在是时候判断它是否属于轮廓了:</p>
<pre><code>float maxErr = 0.0001;
float dif = abs(z - (ci * floor(z/ci)));
if ( dif > maxErr )
color = triangleColor;
else
color = contourColor;
</code></pre>
<p>因为一个片段和一个像素不同,你可能会得到一条非宽度常量线。在</p>