小编Luc*_*ius的帖子

雪碧变得模糊

我开始学习C#和XNA,我想显示一个动画精灵(由我的键盘移动).

我有这个精灵文件:

基本的精灵

要仅显示我需要的部分,我使用以下代码:

Rectangle cuttedSprite = new Rectangle(
    this.W * (int)this.mCurSprite.X, 
    this.H * (int)this.mCurSprite.Y, 
    this.W, 
    this.H
);
spriteBatch.Draw(this.mSpriteTexture, this.mPosition, cuttedSprite, Color.White);
Run Code Online (Sandbox Code Playgroud)

但我的问题是移动后渲染的图像模糊:

模糊问题

我试图通过改变来解决这个问题SamplerStates,但没有改变.有没有人有想法帮助我?

c# xna-4.0

7
推荐指数
1
解决办法
896
查看次数

3D相对于绝对变换

我正在尝试为我的3D游戏创建一个场景图,其中每个对象的转换都是相对于它的父级.图的每个节点都有一个旋转,缩放和平移向量.

将相对变换矩阵组合起来以获得对象的绝对变换的正确方法是什么?如果你能解释一下你的解决方案,我会很高兴的.


这是一个做错的例子:
这实际上是解决方案:

Matrix GetAbsoluteTransformation()
{
    if (!this.IsRoot())
    {
        return this.Transformation * this.Parent.GetAbsoluteTransformation();
    }
    else
    {
        return this.Transformation;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当父节点被旋转,缩放或移动时,子节点被转换相同的量,这是正确的行为! 但是孩子只会围绕自己的起源旋转,而不会围绕父母的起源移动.


应用:

有一个四轮车模型.车轮相对定位在汽车原点周围.车轮可以像真正的车轮一样旋转.如果我现在旋转汽车,车轮应始终保持与之相连.在这种情况下,汽车是根,轮子是子节点.

另一个例子是太阳系的模型.行星围绕自己的轴旋转,围绕太阳移动,卫星围绕行星移动.

transformation matrix hierarchy scenegraph

5
推荐指数
1
解决办法
2629
查看次数

使用顶点缓冲区绘制大量相同的模型?

我面临着许多开发人员可能找到解决方案的问题.我有一个小项目,地板设计有小立方体(100X100).如果我超过这个限制,我的游戏遭遇重大减速和联赛!

这是我如何画地板的:

//Function to draw my ground ( 100 X 100 X 1)
    public void DrawGround(GameTime gameTime)
    {
        // Copy any parent transforms.
        Matrix[] transforms = new Matrix[this.model.Bones.Count];
        this.model.CopyAbsoluteBoneTransformsTo(transforms);

        //loop 1 cube high
        for (int a = 0; a < 1; a++)
        {
            //loop 100 along cube
            for (int b = 0; b < 100; b++)
            {
                //loop 100 cubic wide
                for (int c = 0; c < 100; c++)
                {
                    // Draw the model. A model can have multiple …
Run Code Online (Sandbox Code Playgroud)

performance xna vertex-buffer

3
推荐指数
1
解决办法
1935
查看次数