XNA:与屏幕坐标匹配的正交投影

问题描述 投票:0回答:2

我将 XNA 与 SpriteBatch 和自定义绘制的顶点并行使用。目标是使两种技术具有相同的坐标系。 这意味着我需要一个映射到屏幕坐标的投影矩阵:(0, 0) 位于屏幕左上角,而宽度和高度由屏幕分辨率决定。

Matrix.CreateOrthographicOffCenter(0, width, 0, height, -1, 1);

效果很好,但中心位于左下角。

Matrix.CreateOrthographicOffCenter(0, width, height, 0, -1, 1);



根本不显示任何东西。

尝试将第一个投影矩阵与平移组合并将 y 缩放 -1 也根本不会显示任何内容。按正值进行缩放效果很好,翻译也是如此。但一旦我按负值缩放,我就根本得不到任何输出。

有什么想法吗?

PS:为了测试目的,我绘制的顶点远远超出了屏幕坐标,所以如果翻译中有一些错误,我至少会看到一些东西。

c# xna projection orthogonal
2个回答
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; } }
    

0
投票
精灵的 Y 坐标翻转,Z 顺序向后。

在下面的行中,我们翻转 Y 但保留 Z。因此,如果您使用

spribatch.Draw()

 的 LayerDepth 参数 -1 最接近屏幕而不是 1。

Matrix.CreateOrthographicOffCenter(0, width, -height, 0, -1, 1);


    

© www.soinside.com 2019 - 2024. All rights reserved.