说我有这个界面:
interface Drawable { Vector2 DrawPosition { get; } Texture2D Texture { get; } float Rotation { get; } Vector2 Origin { get; } Vector2 Scale { get; } bool FlipHorizontally { get; } }
在扩展Microsoft.Xna.Framework.Game的类中,我重写了Draw(GameTime),这段代码就在那里:
Drawable d = ...; spriteBatch.Begin(); spriteBatch.Draw(d.Texture,d.DrawPosition,new Rectangle(0,d.Texture.Width,d.Texture.Height),Color.White,d.Rotation,d.Origin,d.Scale,d.FlipHorizontally ? SpriteEffects.FlipHorizontally : SpriteEffects.None,0); spriteBatch.End();
这使用SpriteBatch.Draw(Texture2D纹理,Vector2位置,Nullable sourceRectangle,Color颜色,float旋转,Vector2原点,Vector2 scale,SpriteEffects效果,float layerDepth)重载.
假设我有一组顶点,这些顶点构成了d.Texture返回的图像的粗略轮廓(也就是说,如果我在Microsoft Paint中打开图像并从顶点集合中的每个点进行铅笔处理,它将非常接近).如果我想绘制这些点以便它们使用GraphicsDevice.DrawUserPrimitives()遍历纹理,是否有办法仅使用矩阵转换顶点?关键是它只能使用矩阵,我没有其他的绘图选择,因为我实际上也需要将变换后的顶点用于其他事物.我已经尝试过类似的东西
Matrix.CreateTranslation(new Vector3(-d.Origin,0)) * Matrix.CreateScale(new Vector3(d.Scale,0)) * Matrix.CreateRotationZ(d.Rotation) * Matrix.CreateTranslation(new Vector3(d.DrawPosition,0)));
但它很难失败.有这个问题的解决方案吗?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。