我正在使用XNA和SpriteBatch以及并行绘制的自定义顶点。目标是为这两种技术提供相同的坐标系。 这意味着我需要一个映射到屏幕坐标的投影矩阵:(0,0)位于屏幕左上角,而宽度和高度由屏幕分辨率决定。
Matrix.CreateOrthographicOffCenter(0, width, 0, height, -1, 1);
运作良好,但中心位于底部 - 左上角。
Matrix.CreateOrthographicOffCenter(0, width, height, 0, -1, 1);
根本不显示任何内容。
尝试将第一个投影矩阵与平移相结合并将y缩放为-1并不会显示任何内容。通过正值进行缩放也很有效,翻译也是如此。但是只要我按负值缩放,我就不会得到任何输出。
有什么想法吗?
PS:出于测试目的,我绘制的顶点远远超出了屏幕坐标,所以如果翻译中出现错误,我至少会看到一些内容。
答案 0 :(得分:4)
我使用此代码初始化我的2D相机以绘制线条,并使用基本的自定义效果进行绘制。
Vector2 center;
center.X = Game.GraphicsDevice.Viewport.Width * 0.5f;
center.Y = Game.GraphicsDevice.Viewport.Height * 0.5f;
Matrix View = Matrix.CreateLookAt( new Vector3( center, 0 ), new Vector3( center, 1 ), new Vector3( 0, -1, 0 ) );
Matrix Projection = Matrix.CreateOrthographic( center.X * 2, center.Y * 2, -0.5f, 1 );
效果
uniform float4x4 xWorld;
uniform float4x4 xViewProjection;
void VS_Basico(in float4 inPos : POSITION, in float4 inColor: COLOR0, out float4 outPos: POSITION, out float4 outColor:COLOR0 )
{
float4 tmp = mul (inPos, xWorld);
outPos = mul (tmp, xViewProjection);
outColor = inColor;
}
technique Lines
{
pass Pass0
{
VertexShader = compile vs_2_0 VS_Basico();
FILLMODE = SOLID;
CULLMODE = NONE;
}
}