
前田稔(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;
}
}
|
![]()
![]()