首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在xna中保存旋转后的骨骼位置

在xna中保存旋转后的骨骼位置
EN

Stack Overflow用户
提问于 2013-02-16 13:11:27
回答 1查看 249关注 0票数 0

我正在开发一个在xna框架c#中解决魔方的游戏。我想知道如何在旋转骨骼位置后保存它们。我调用此方法来绘制构造立方体的面侧的骨骼。

代码语言:javascript
复制
protected void DrawModel()
{
    cube.CopyAbsoluteBoneTransformsTo(modelTransforms);
    ModelMeshCollection cubes = cube.Meshes;
    List<string> yellowFace = new List<string>();

    for (int i = 0; i < cubes.Count; i++)
    {
        if (cubes.ElementAt(i).Name.ToString().Contains("F"))
        {
            yellowFace.Add(cubes.ElementAt(i).Name.ToString());
        }
    }

    for (int j = 0; j < yellowFace.Count; j++)
    {

        foreach (BasicEffect eff in cubes[yellowFace.ElementAt(j)].Effects)
        {
            eff.View = View;
            eff.Projection = Projection;
            eff.EnableDefaultLighting();
            degree = (float)degree;
            if (xtan <= degree)
            {

                eff.World = Matrix.CreateFromAxisAngle(new Vector3(0, 0, 1), -xtan);


            }




        }


        cubes[yellowFace.ElementAt(j)].Draw();

    }

    for (int i = 0; i < cubes.Count; i++)
    {
        if (cubes.ElementAt(i).Name.ToString().Contains("F"))
        {
            continue;

        }
        else
        {
            foreach (BasicEffect eff in cubes.ElementAt(i).Effects)
            {
                eff.View = View;


                eff.World = Matrix.Identity;



                eff.Projection = Projection;
                eff.EnableDefaultLighting();
            }
            cubes.ElementAt(i).Draw();
        }

    }




}

在我运行游戏后,旋转运行良好,但一旦完成,游戏就会重新加载骨骼,就像它们在开始时一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-26 05:48:07

大家好,要在旋转后保存骨骼位置,您必须在矩阵变换中对它们进行变换

代码语言:javascript
复制
//this before the drawing loop
model.CopyAbsoluteBoneTransformsTo(modelTransforms);
//drawing loop .... 
//basiceffect loop
......
//after basiceffect loop
Matrix rotationmatrix = Matrix.CreateRotationX(angle);
// X,Y Z are the axis , angle is the rotaion value
mesh.parentbone.Transform = rotationmatrix * mesh.parentbone.transform;

//end drawing loop

我希望这对大家有帮助,谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14907183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档