// gametools #include \ struct VS_INPUT { float2 texCoord : TEXCOORD0; float4 posObj: POSITION; }; struct VS_OUTPUT { float4 posScr: POSITION; float2 center: TEXCOORD0; float pointSize: PSIZE; float radius :TEXCOORD1; float4 color :TEXCOORD2; }; /////////////////////////////////////////////////////////////////////////////// // Vertexshader // Profile: 3x0 const float4x4 projMat; const float4x4 matView; const float4x4 matViewInv; sampler tex0: register(s0); VS_OUTPUT main(VS_INPUT input) { float pointSize = 40; float resolution = 128; VS_OUTPUT output = (VS_OUTPUT)0; output.pointSize = pointSize; output.radius = pointSize / resolution; float4 pos = tex2Dlod(tex0, float4(input.posObj.x, input.posObj.y,0,0)); //debug //output.posScr = float4(input.posObj.xy *2.0 - 1.0, 0, 1); //output.posScr = pos; output.center = output.posScr; //output.color = float4(1,0,1,1); if(pos.w == 0) { output.center = 0.0f; output.posScr = 1000.0f; //transform out of view } else { float4 mPosition = float4(normalize(pos.xyz),1); float4 cPosition = mul(mPosition, matView); float4 hPosition = mul(cPosition, projMat); output.posScr = hPosition; output.center = float2(hPosition.x, hPosition.y) / hPosition.w; } return output; } ///////////////////////////////////////////////////////////////////////////////