我想在3D空间中的特定位置绘制文本和图像。 场景以3D渲染,我想在XYZ坐标上显示渲染的2D文本和图像。
我有来自场景和ViewPort的“世界”,“视图”,“投影矩阵”。 我不想渲染真实的3D字体,也不想显示带有纹理顶点的图像。
我已经尝试了一些与变换矩阵的矩阵乘法,并且还尝试将基本效果用作begin-method的参数。但是他们都不为我工作。
eff.World = Graph3DGame.Current.currentWorld;
eff.View = Graph3DGame.Current.currentView;
eff.Projection = Graph3DGame.Current.currentPerspective;
spriteBatch.Begin(0, null, null, null, null, eff);
spriteBatch.DrawString(Fonts.Math, "hello, world!", new Vector2(100,100), Color.Blue);
spriteBatch.End();
希望任何人都可以提供帮助。
答案 0 :(得分:2)
如果具有x,y,z坐标,则可以通过使用视口投影3d坐标来在屏幕上找到实际对应的2d坐标。基本上这应该可行:
var position3d = new Vector3(1,1,1);
var viewport = GraphicsDevice.Viewport;
var position2d = viewport.Project(position3d, projectionMatrix, viewMatrix, worldMatrix);
position2d值将具有z值,您可以根据需要忽略该值。
然后,您可以使用此控件为您绘制文本(如果您希望我居中):
var text = "Hello, world!";
var measure = myFont.Measure("Hello, world!");
var centeredPosition = new Vector2(position2d.X - measure.X / 2, position2d.Y - measure.Y / 2);
spriteBatch.Begin();
spriteBatch.DrawString(myFont, text, centeredPosition, Color.Blue);
希望有帮助。