break;
case Groups. C_MATSHININESS:
m. Shininess = ProcessPercentageChunk ( child );
break;
case Groups. C_MATMAP:
ProcessPercentageChunk ( child );
ProcessTexMapChunk ( child, m );
break;
default:
SkipChunk ( child );
break;
}
tesRead += tesRead;
}
materials. Add ( name, m );
}
void ProcessTexMapChunk ( ThreeDSChunk chunk, Material m )
{
while ( tesRead < chunk. Length )
{
ThreeDSChunk child = new ThreeDSChunk ( reader );
switch ((Groups) child. ID)
{
case Groups. C_MATMAPFILE:
string name = ProcessString ( child );
Bitmap bmp;
try
{
bmp = new Bitmap ( base_dir + name );
}
catch ( Exception ex )
{
Console. WriteLine ( " ERROR: could not load file '{0}': {1}", base_dir + name, ex. Message );
break;
}
bmp. RotateFlip(RotateFlipType. RotateNoneFlipY);
System. Drawing. Imaging. BitmapData imgData = bmp. LockBits ( new Rectangle(new Point(0, 0), bmp. Size),
System. Drawing. Imaging. ImageLockMode. ReadOnly,
System. Drawing. Imaging. PixelFormat. Format32bppArgb);
m. BindTexture ( imgData. Width, imgData. Height, imgData. Scan0 );
bmp. UnlockBits(imgData);
bmp. Dispose();
break;
default:
SkipChunk ( child );
break;
}
tesRead += tesRead;
}
}
float[] ProcessColorChunk ( ThreeDSChunk chunk )
{
ThreeDSChunk child = new ThreeDSChunk ( reader );
float[] c = new float[] { (float) reader. ReadByte() / 256 , (float) reader. ReadByte() / 256 , (float) reader. ReadByte() / 256 };
tesRead += (int) child. Length;
return c;
}
int ProcessPercentageChunk ( ThreeDSChunk chunk )
{
ThreeDSChunk child = new ThreeDSChunk ( reader );
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |


