|
小弟正在研究vertex shader输出的xyz坐标与屏幕像素的位置,
故写了一个Effect大概如下:
float4x4 matWorldViewProj;
struct VS_OUTPUT
{
float4 Position : POSITION;
}
VS_OUTPUT VS(float4 pos : POSITION)
{
VS_OUTPUT out = (VS_OUTPUT)0;
out.Position = mul(pos, matWorldViewProj);
out.Position.x = 0.0f;
out.Position.y = 0.0f;
out.Position.z = 0.0f;
//out.Position.w = 0.0f; 这一句只有注释掉,屏幕中心才能显示出来一个像素大小的点
}
如上面所说,out.Position.w = 0.0f;这一句只有注释掉,屏幕中心才能显示出来一个像素大小的点。
我尝试过很多值,正的负的,从10000 ~~~~~~ 0.000001,只要赋值,点就显示不出来了。
如果不给 w 赋值,单单改变xyz为0.0f,那么所有的顶点都编程屏幕中间的一个点了。这是我想要的效果。
我还想移动到这个点到屏幕的四个角,但是试验了一下,移动的位移是与w有关系的。
请问:
1. 怎么样写xyzw,把他们移动到屏幕的任何位置?
2. 屏幕的像素和vertex shader输出的XYZW是如何对应的?(单就画点元素来说)
3. 为何我改变w就无法显示呢?是不是哪里出错了? |
|