0
我想绘制圆形图形,但是我唯一的数据是顶点位置。所以我用C++画出了点,并且它们出现在正确的位置上。我的点大小设置为20像素,因此这些点大到足以丢弃一些像素以获得一个圆。从顶点位置绘制圆形图示
我想我可以从顶点着色器发送顶点像素位置到片段着色器,然后计算片段位置和顶点位置之间的距离。这导致了圆形的splats,但是其中大部分将被隐藏。我究竟做错了什么?
CG顶点着色器:
void main(
float4 pvec: POSITION,
uniform float4x4 modelView,
uniform float4x4 modelViewIT,
uniform float4x4 modelViewProj,
uniform float2 wsize,
uniform float near,
uniform float top,
uniform float bottom,
out float4 pout: POSITION,
out float4 color: COLOR,
out float2 vpos: TEXCOORD0
)
{
//position of point correctly projected
pout = mul(modelViewProj, pvec);
vpos = float2((pout.xy * 0.5 + 0.5) * wsize);
color = float4(0.0, 0.0, 1.0, 1.0);
}
CG片段着色器:
void main(
float4 col : COLOR,
float2 wpos : WPOS,
float2 vpos: TEXCOORD0,
uniform float2 unproj_scale,
uniform float2 unproj_offset,
uniform float f_near,
uniform float zb_scale,
uniform float zb_offset,
uniform float epsilon,
out float4 colorout : COLOR
)
{
float xDiff = abs(vpos.x - wpos.x);
float yDiff = abs(vpos.y - wpos.y);
if ((xDiff * xDiff + yDiff * yDiff) > 20.0) {
col.r = 1.0;
}
colorout = col;
}
您在计算屏幕空间中的位置时缺少透视部分;) – Joost
这是正确的..谢谢:) – Aloys