前田稔(Maeda Minoru)の超初心者のプログラム入門
public void OnResetDevice(object sender, EventArgs e) { Device dev = (Device)sender; dev.RenderState.ZBufferEnable = true; dev.RenderState.Ambient = System.Drawing.Color.FromArgb(0x202020); // Load the mesh from the specified file ExtendedMaterial[] materials = null; Directory.SetCurrentDirectory(@"c:\data\xfile\"); //mesh = Mesh.FromFile("cone.x", MeshFlags.SystemMemory, device, out materials); mesh = Mesh.FromFile("tiger.x", MeshFlags.SystemMemory, device, out materials); // Allocate a material/texture arrays meshMaterials = new Material[materials.Length]; meshTextures = new Texture[materials.Length]; // Copy the materials and load the textures for(int i = 0; i < meshMaterials.Length; i++) { meshMaterials[i] = materials[i].Material3D; meshMaterials[i].AmbientColor = meshMaterials[i].DiffuseColor; if ( (materials[i].TextureFilename != null) && (materials[i].TextureFilename.Length > 0) ) { // Create the texture meshTextures[i] = TextureLoader.FromFile(dev, materials[i].TextureFilename); } } // 法線情報がなければ計算して作成 if ((mesh.VertexFormat & VertexFormats.Normal) == 0) { Mesh temporaryMesh = mesh.Clone(mesh.Options.Value, mesh.VertexFormat | VertexFormats.Normal, device); // 法線を計算 temporaryMesh.ComputeNormals(); // 古いメッシュを破棄し、置き換える mesh.Dispose(); mesh = temporaryMesh; } } |