Пример #1
0
        /// <summary>
        ///     頂点データを入力レイアウトに格納
        /// </summary>
        /// <param name="vertexData"></param>
        /// <param name="verticies"></param>
        private void LoadVertex(VertexData vertexData, List <BasicInputLayout> verticies)
        {
            BasicInputLayout vertexInputlayout = new BasicInputLayout();

            vertexInputlayout.Position = new Vector4(vertexData.Position, 1f);
            vertexInputlayout.Normal   = vertexData.Normal;
            vertexInputlayout.UV       = vertexData.UV;
            vertexInputlayout.Index    = (uint)verticies.Count;
            if (vertexData.BoneWeight is BDEF1)
            {
                BDEF1 v = (BDEF1)vertexData.BoneWeight;
                vertexInputlayout.BoneIndex1  = (uint)v.boneIndex;
                vertexInputlayout.BoneWeight1 = 1.0f;
            }
            else if (vertexData.BoneWeight is BDEF2)
            {
                BDEF2 v = (BDEF2)vertexData.BoneWeight;
                vertexInputlayout.BoneIndex1  = (uint)v.Bone1ReferenceIndex;
                vertexInputlayout.BoneIndex2  = (uint)v.Bone2ReferenceIndex;
                vertexInputlayout.BoneWeight1 = v.Weight;
                vertexInputlayout.BoneWeight2 = 1f - v.Weight;
            }
            else if (vertexData.BoneWeight is SDEF)
            {
                //TODO 以下はBDEF2としての実装SDEFとして実装はされていない。
                SDEF v = (SDEF)vertexData.BoneWeight;
                vertexInputlayout.BoneIndex1  = (uint)v.Bone1ReferenceIndex;
                vertexInputlayout.BoneIndex2  = (uint)v.Bone2ReferenceIndex;
                vertexInputlayout.BoneWeight1 = v.Bone1Weight;
                vertexInputlayout.BoneWeight2 = 1f - v.Bone1Weight;
                vertexInputlayout.Sdef_C      = new Vector4(v.SDEF_C, 1f);
                vertexInputlayout.SdefR0      = v.SDEF_R0;
                vertexInputlayout.SdefR1      = v.SDEF_R1;
            }
            else
            {
                BDEF4 v         = (BDEF4)vertexData.BoneWeight;
                float sumWeight = v.Weights.X + v.Weights.X + v.Weights.Z + v.Weights.W;
                vertexInputlayout.BoneIndex1  = (uint)v.Bone1ReferenceIndex;
                vertexInputlayout.BoneIndex2  = (uint)v.Bone2ReferenceIndex;
                vertexInputlayout.BoneIndex3  = (uint)v.Bone3ReferenceIndex;
                vertexInputlayout.BoneIndex4  = (uint)v.Bone4ReferenceIndex;
                vertexInputlayout.BoneWeight1 = v.Weights.X / sumWeight;
                vertexInputlayout.BoneWeight2 = v.Weights.Y / sumWeight;
                vertexInputlayout.BoneWeight3 = v.Weights.Z / sumWeight;
                vertexInputlayout.BoneWeight4 = v.Weights.W / sumWeight;
            }
            verticies.Add((vertexInputlayout));
        }
Пример #2
0
        private void Initialize()
        {
            List <BasicInputLayout> verticies = new List <BasicInputLayout>();

            foreach (var face in this.mesh.Faces)
            {
                foreach (int vIndex in face.Indices)
                {
                    BasicInputLayout input = new BasicInputLayout();
                    input.Position = this.mesh.Vertices[vIndex].ToSlimDXVec4().InvX();
                    input.Normal   = this.mesh.Normals[vIndex].ToSlimDX();
                    if (this.mesh.GetTextureCoords(0) != null)
                    {
                        Vector3 vec = this.mesh.GetTextureCoords(0)[vIndex].ToSlimDX();
                        input.UV = new Vector2(vec.X, 1 - vec.Y);
                    }
                    input.BoneWeight1 = 1f;
                    input.BoneIndex1  = 0;
                    verticies.Add(input);
                }
            }
            this.vBuffer = CGHelper.CreateBuffer(verticies, this.context.DeviceManager.Device, BindFlags.VertexBuffer);
        }