我想在片段着色器中绘制一个对象与平面相交的线。
我将平面方程传递给片段着色器(a,b,c,d),并希望用红色绘制我的物体和这个均匀平面之间的交点。
无论我们放大多少,我都希望交点的宽度始终相同。
现在,我在片段着色器中得到了从我的对象到平面的距离:
// uPlane: vec4 where values are a.b.c.d (plane equation)
// vPos: wodlPosition of the fragment
vec4 prod = uPlane*vPos;
float distance = (prod.r + prod.g + prod.g + prod.a) / length(uPlane.xyz);
if(abs(distance) < 1.) {
gl_FragColor = vec4(1., 0., 0., .5);
} else {
gl_FragColor = vec4(0., 1., 0., .5);
}
这种方法的问题在于,当我放大/缩小时,交叉点的“宽度”会发生变化(见下面的截图)。
在我的物体和飞机制服的交叉处绘制“2px宽度”线的最佳方法是什么?
答案 0 :(得分:1)
您必须考虑&#34;缩放系数&#34; /缩放您的视图。对于2D情况(您的图片看起来非常2D),均匀缩放和无旋转这很容易。传递模型视图矩阵并提取[0] [0]个元素(或将该值传递给着色器)。用它除去你的距离值。 要从具有旋转和平移的模型视图矩阵中提取适当的缩放值,请参阅this。