/// <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)); }
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); }