| Attached Files | truck.md2 [^] (39,088 bytes) 07.02.2010 15:09
truck.tga [^] (624,302 bytes) 07.02.2010 15:09
skins.diff [^] (16,543 bytes) 07.02.2010 15:13 [Show Content] [Hide Content]Index: picomodel/pm_md2.c
===================================================================
--- picomodel/pm_md2.c (Revision 62)
+++ picomodel/pm_md2.c (Arbeitskopie)
@@ -1,6 +1,6 @@
/* -----------------------------------------------------------------------------
-PicoModel Library
+PicoModel Library
Copyright (c) 2002, Randy Reddig & seaw0lf
All rights reserved.
@@ -17,7 +17,7 @@
Neither the names of the copyright holders nor the names of its contributors may
be used to endorse or promote products derived from this software without
-specific prior written permission.
+specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -132,167 +132,167 @@
float md2_normals[ MD2_NUMVERTEXNORMALS ][ 3 ] =
{
{ -0.525731f, 0.000000f, 0.850651f },
- { -0.442863f, 0.238856f, 0.864188f },
- { -0.295242f, 0.000000f, 0.955423f },
- { -0.309017f, 0.500000f, 0.809017f },
- { -0.162460f, 0.262866f, 0.951056f },
+ { -0.442863f, 0.238856f, 0.864188f },
+ { -0.295242f, 0.000000f, 0.955423f },
+ { -0.309017f, 0.500000f, 0.809017f },
+ { -0.162460f, 0.262866f, 0.951056f },
{ 0.000000f, 0.000000f, 1.000000f },
{ 0.000000f, 0.850651f, 0.525731f },
{ -0.147621f, 0.716567f, 0.681718f },
- { 0.147621f, 0.716567f, 0.681718f },
- { 0.000000f, 0.525731f, 0.850651f },
- { 0.309017f, 0.500000f, 0.809017f },
- { 0.525731f, 0.000000f, 0.850651f },
- { 0.295242f, 0.000000f, 0.955423f },
- { 0.442863f, 0.238856f, 0.864188f },
- { 0.162460f, 0.262866f, 0.951056f },
- { -0.681718f, 0.147621f, 0.716567f },
- { -0.809017f, 0.309017f, 0.500000f },
- { -0.587785f, 0.425325f, 0.688191f },
- { -0.850651f, 0.525731f, 0.000000f },
- { -0.864188f, 0.442863f, 0.238856f },
- { -0.716567f, 0.681718f, 0.147621f },
- { -0.688191f, 0.587785f, 0.425325f },
- { -0.500000f, 0.809017f, 0.309017f },
- { -0.238856f, 0.864188f, 0.442863f },
- { -0.425325f, 0.688191f, 0.587785f },
- { -0.716567f, 0.681718f, -0.147621f },
- { -0.500000f, 0.809017f, -0.309017f },
- { -0.525731f, 0.850651f, 0.000000f },
- { 0.000000f, 0.850651f, -0.525731f },
- { -0.238856f, 0.864188f, -0.442863f },
- { 0.000000f, 0.955423f, -0.295242f },
- { -0.262866f, 0.951056f, -0.162460f },
- { 0.000000f, 1.000000f, 0.000000f },
- { 0.000000f, 0.955423f, 0.295242f },
- { -0.262866f, 0.951056f, 0.162460f },
- { 0.238856f, 0.864188f, 0.442863f },
- { 0.262866f, 0.951056f, 0.162460f },
- { 0.500000f, 0.809017f, 0.309017f },
- { 0.238856f, 0.864188f, -0.442863f },
- { 0.262866f, 0.951056f, -0.162460f },
- { 0.500000f, 0.809017f, -0.309017f },
- { 0.850651f, 0.525731f, 0.000000f },
- { 0.716567f, 0.681718f, 0.147621f },
- { 0.716567f, 0.681718f, -0.147621f },
- { 0.525731f, 0.850651f, 0.000000f },
- { 0.425325f, 0.688191f, 0.587785f },
- { 0.864188f, 0.442863f, 0.238856f },
- { 0.688191f, 0.587785f, 0.425325f },
- { 0.809017f, 0.309017f, 0.500000f },
- { 0.681718f, 0.147621f, 0.716567f },
- { 0.587785f, 0.425325f, 0.688191f },
- { 0.955423f, 0.295242f, 0.000000f },
- { 1.000000f, 0.000000f, 0.000000f },
- { 0.951056f, 0.162460f, 0.262866f },
- { 0.850651f, -0.525731f, 0.000000f },
- { 0.955423f, -0.295242f, 0.000000f },
- { 0.864188f, -0.442863f, 0.238856f },
- { 0.951056f, -0.162460f, 0.262866f },
- { 0.809017f, -0.309017f, 0.500000f },
- { 0.681718f, -0.147621f, 0.716567f },
- { 0.850651f, 0.000000f, 0.525731f },
- { 0.864188f, 0.442863f, -0.238856f },
- { 0.809017f, 0.309017f, -0.500000f },
- { 0.951056f, 0.162460f, -0.262866f },
- { 0.525731f, 0.000000f, -0.850651f },
- { 0.681718f, 0.147621f, -0.716567f },
- { 0.681718f, -0.147621f, -0.716567f },
- { 0.850651f, 0.000000f, -0.525731f },
- { 0.809017f, -0.309017f, -0.500000f },
- { 0.864188f, -0.442863f, -0.238856f },
- { 0.951056f, -0.162460f, -0.262866f },
- { 0.147621f, 0.716567f, -0.681718f },
- { 0.309017f, 0.500000f, -0.809017f },
- { 0.425325f, 0.688191f, -0.587785f },
- { 0.442863f, 0.238856f, -0.864188f },
- { 0.587785f, 0.425325f, -0.688191f },
- { 0.688191f, 0.587785f, -0.425325f },
- { -0.147621f, 0.716567f, -0.681718f },
- { -0.309017f, 0.500000f, -0.809017f },
- { 0.000000f, 0.525731f, -0.850651f },
- { -0.525731f, 0.000000f, -0.850651f },
- { -0.442863f, 0.238856f, -0.864188f },
- { -0.295242f, 0.000000f, -0.955423f },
- { -0.162460f, 0.262866f, -0.951056f },
- { 0.000000f, 0.000000f, -1.000000f },
- { 0.295242f, 0.000000f, -0.955423f },
- { 0.162460f, 0.262866f, -0.951056f },
- { -0.442863f, -0.238856f, -0.864188f },
- { -0.309017f, -0.500000f, -0.809017f },
- { -0.162460f, -0.262866f, -0.951056f },
- { 0.000000f, -0.850651f, -0.525731f },
- { -0.147621f, -0.716567f, -0.681718f },
- { 0.147621f, -0.716567f, -0.681718f },
- { 0.000000f, -0.525731f, -0.850651f },
- { 0.309017f, -0.500000f, -0.809017f },
- { 0.442863f, -0.238856f, -0.864188f },
- { 0.162460f, -0.262866f, -0.951056f },
- { 0.238856f, -0.864188f, -0.442863f },
- { 0.500000f, -0.809017f, -0.309017f },
- { 0.425325f, -0.688191f, -0.587785f },
- { 0.716567f, -0.681718f, -0.147621f },
- { 0.688191f, -0.587785f, -0.425325f },
- { 0.587785f, -0.425325f, -0.688191f },
- { 0.000000f, -0.955423f, -0.295242f },
- { 0.000000f, -1.000000f, 0.000000f },
- { 0.262866f, -0.951056f, -0.162460f },
- { 0.000000f, -0.850651f, 0.525731f },
- { 0.000000f, -0.955423f, 0.295242f },
- { 0.238856f, -0.864188f, 0.442863f },
- { 0.262866f, -0.951056f, 0.162460f },
- { 0.500000f, -0.809017f, 0.309017f },
- { 0.716567f, -0.681718f, 0.147621f },
- { 0.525731f, -0.850651f, 0.000000f },
- { -0.238856f, -0.864188f, -0.442863f },
- { -0.500000f, -0.809017f, -0.309017f },
- { -0.262866f, -0.951056f, -0.162460f },
- { -0.850651f, -0.525731f, 0.000000f },
- { -0.716567f, -0.681718f, -0.147621f },
- { -0.716567f, -0.681718f, 0.147621f },
- { -0.525731f, -0.850651f, 0.000000f },
- { -0.500000f, -0.809017f, 0.309017f },
- { -0.238856f, -0.864188f, 0.442863f },
- { -0.262866f, -0.951056f, 0.162460f },
- { -0.864188f, -0.442863f, 0.238856f },
- { -0.809017f, -0.309017f, 0.500000f },
- { -0.688191f, -0.587785f, 0.425325f },
- { -0.681718f, -0.147621f, 0.716567f },
- { -0.442863f, -0.238856f, 0.864188f },
- { -0.587785f, -0.425325f, 0.688191f },
- { -0.309017f, -0.500000f, 0.809017f },
- { -0.147621f, -0.716567f, 0.681718f },
- { -0.425325f, -0.688191f, 0.587785f },
- { -0.162460f, -0.262866f, 0.951056f },
- { 0.442863f, -0.238856f, 0.864188f },
- { 0.162460f, -0.262866f, 0.951056f },
- { 0.309017f, -0.500000f, 0.809017f },
- { 0.147621f, -0.716567f, 0.681718f },
- { 0.000000f, -0.525731f, 0.850651f },
- { 0.425325f, -0.688191f, 0.587785f },
- { 0.587785f, -0.425325f, 0.688191f },
- { 0.688191f, -0.587785f, 0.425325f },
- { -0.955423f, 0.295242f, 0.000000f },
- { -0.951056f, 0.162460f, 0.262866f },
- { -1.000000f, 0.000000f, 0.000000f },
- { -0.850651f, 0.000000f, 0.525731f },
- { -0.955423f, -0.295242f, 0.000000f },
- { -0.951056f, -0.162460f, 0.262866f },
- { -0.864188f, 0.442863f, -0.238856f },
- { -0.951056f, 0.162460f, -0.262866f },
- { -0.809017f, 0.309017f, -0.500000f },
+ { 0.147621f, 0.716567f, 0.681718f },
+ { 0.000000f, 0.525731f, 0.850651f },
+ { 0.309017f, 0.500000f, 0.809017f },
+ { 0.525731f, 0.000000f, 0.850651f },
+ { 0.295242f, 0.000000f, 0.955423f },
+ { 0.442863f, 0.238856f, 0.864188f },
+ { 0.162460f, 0.262866f, 0.951056f },
+ { -0.681718f, 0.147621f, 0.716567f },
+ { -0.809017f, 0.309017f, 0.500000f },
+ { -0.587785f, 0.425325f, 0.688191f },
+ { -0.850651f, 0.525731f, 0.000000f },
+ { -0.864188f, 0.442863f, 0.238856f },
+ { -0.716567f, 0.681718f, 0.147621f },
+ { -0.688191f, 0.587785f, 0.425325f },
+ { -0.500000f, 0.809017f, 0.309017f },
+ { -0.238856f, 0.864188f, 0.442863f },
+ { -0.425325f, 0.688191f, 0.587785f },
+ { -0.716567f, 0.681718f, -0.147621f },
+ { -0.500000f, 0.809017f, -0.309017f },
+ { -0.525731f, 0.850651f, 0.000000f },
+ { 0.000000f, 0.850651f, -0.525731f },
+ { -0.238856f, 0.864188f, -0.442863f },
+ { 0.000000f, 0.955423f, -0.295242f },
+ { -0.262866f, 0.951056f, -0.162460f },
+ { 0.000000f, 1.000000f, 0.000000f },
+ { 0.000000f, 0.955423f, 0.295242f },
+ { -0.262866f, 0.951056f, 0.162460f },
+ { 0.238856f, 0.864188f, 0.442863f },
+ { 0.262866f, 0.951056f, 0.162460f },
+ { 0.500000f, 0.809017f, 0.309017f },
+ { 0.238856f, 0.864188f, -0.442863f },
+ { 0.262866f, 0.951056f, -0.162460f },
+ { 0.500000f, 0.809017f, -0.309017f },
+ { 0.850651f, 0.525731f, 0.000000f },
+ { 0.716567f, 0.681718f, 0.147621f },
+ { 0.716567f, 0.681718f, -0.147621f },
+ { 0.525731f, 0.850651f, 0.000000f },
+ { 0.425325f, 0.688191f, 0.587785f },
+ { 0.864188f, 0.442863f, 0.238856f },
+ { 0.688191f, 0.587785f, 0.425325f },
+ { 0.809017f, 0.309017f, 0.500000f },
+ { 0.681718f, 0.147621f, 0.716567f },
+ { 0.587785f, 0.425325f, 0.688191f },
+ { 0.955423f, 0.295242f, 0.000000f },
+ { 1.000000f, 0.000000f, 0.000000f },
+ { 0.951056f, 0.162460f, 0.262866f },
+ { 0.850651f, -0.525731f, 0.000000f },
+ { 0.955423f, -0.295242f, 0.000000f },
+ { 0.864188f, -0.442863f, 0.238856f },
+ { 0.951056f, -0.162460f, 0.262866f },
+ { 0.809017f, -0.309017f, 0.500000f },
+ { 0.681718f, -0.147621f, 0.716567f },
+ { 0.850651f, 0.000000f, 0.525731f },
+ { 0.864188f, 0.442863f, -0.238856f },
+ { 0.809017f, 0.309017f, -0.500000f },
+ { 0.951056f, 0.162460f, -0.262866f },
+ { 0.525731f, 0.000000f, -0.850651f },
+ { 0.681718f, 0.147621f, -0.716567f },
+ { 0.681718f, -0.147621f, -0.716567f },
+ { 0.850651f, 0.000000f, -0.525731f },
+ { 0.809017f, -0.309017f, -0.500000f },
+ { 0.864188f, -0.442863f, -0.238856f },
+ { 0.951056f, -0.162460f, -0.262866f },
+ { 0.147621f, 0.716567f, -0.681718f },
+ { 0.309017f, 0.500000f, -0.809017f },
+ { 0.425325f, 0.688191f, -0.587785f },
+ { 0.442863f, 0.238856f, -0.864188f },
+ { 0.587785f, 0.425325f, -0.688191f },
+ { 0.688191f, 0.587785f, -0.425325f },
+ { -0.147621f, 0.716567f, -0.681718f },
+ { -0.309017f, 0.500000f, -0.809017f },
+ { 0.000000f, 0.525731f, -0.850651f },
+ { -0.525731f, 0.000000f, -0.850651f },
+ { -0.442863f, 0.238856f, -0.864188f },
+ { -0.295242f, 0.000000f, -0.955423f },
+ { -0.162460f, 0.262866f, -0.951056f },
+ { 0.000000f, 0.000000f, -1.000000f },
+ { 0.295242f, 0.000000f, -0.955423f },
+ { 0.162460f, 0.262866f, -0.951056f },
+ { -0.442863f, -0.238856f, -0.864188f },
+ { -0.309017f, -0.500000f, -0.809017f },
+ { -0.162460f, -0.262866f, -0.951056f },
+ { 0.000000f, -0.850651f, -0.525731f },
+ { -0.147621f, -0.716567f, -0.681718f },
+ { 0.147621f, -0.716567f, -0.681718f },
+ { 0.000000f, -0.525731f, -0.850651f },
+ { 0.309017f, -0.500000f, -0.809017f },
+ { 0.442863f, -0.238856f, -0.864188f },
+ { 0.162460f, -0.262866f, -0.951056f },
+ { 0.238856f, -0.864188f, -0.442863f },
+ { 0.500000f, -0.809017f, -0.309017f },
+ { 0.425325f, -0.688191f, -0.587785f },
+ { 0.716567f, -0.681718f, -0.147621f },
+ { 0.688191f, -0.587785f, -0.425325f },
+ { 0.587785f, -0.425325f, -0.688191f },
+ { 0.000000f, -0.955423f, -0.295242f },
+ { 0.000000f, -1.000000f, 0.000000f },
+ { 0.262866f, -0.951056f, -0.162460f },
+ { 0.000000f, -0.850651f, 0.525731f },
+ { 0.000000f, -0.955423f, 0.295242f },
+ { 0.238856f, -0.864188f, 0.442863f },
+ { 0.262866f, -0.951056f, 0.162460f },
+ { 0.500000f, -0.809017f, 0.309017f },
+ { 0.716567f, -0.681718f, 0.147621f },
+ { 0.525731f, -0.850651f, 0.000000f },
+ { -0.238856f, -0.864188f, -0.442863f },
+ { -0.500000f, -0.809017f, -0.309017f },
+ { -0.262866f, -0.951056f, -0.162460f },
+ { -0.850651f, -0.525731f, 0.000000f },
+ { -0.716567f, -0.681718f, -0.147621f },
+ { -0.716567f, -0.681718f, 0.147621f },
+ { -0.525731f, -0.850651f, 0.000000f },
+ { -0.500000f, -0.809017f, 0.309017f },
+ { -0.238856f, -0.864188f, 0.442863f },
+ { -0.262866f, -0.951056f, 0.162460f },
+ { -0.864188f, -0.442863f, 0.238856f },
+ { -0.809017f, -0.309017f, 0.500000f },
+ { -0.688191f, -0.587785f, 0.425325f },
+ { -0.681718f, -0.147621f, 0.716567f },
+ { -0.442863f, -0.238856f, 0.864188f },
+ { -0.587785f, -0.425325f, 0.688191f },
+ { -0.309017f, -0.500000f, 0.809017f },
+ { -0.147621f, -0.716567f, 0.681718f },
+ { -0.425325f, -0.688191f, 0.587785f },
+ { -0.162460f, -0.262866f, 0.951056f },
+ { 0.442863f, -0.238856f, 0.864188f },
+ { 0.162460f, -0.262866f, 0.951056f },
+ { 0.309017f, -0.500000f, 0.809017f },
+ { 0.147621f, -0.716567f, 0.681718f },
+ { 0.000000f, -0.525731f, 0.850651f },
+ { 0.425325f, -0.688191f, 0.587785f },
+ { 0.587785f, -0.425325f, 0.688191f },
+ { 0.688191f, -0.587785f, 0.425325f },
+ { -0.955423f, 0.295242f, 0.000000f },
+ { -0.951056f, 0.162460f, 0.262866f },
+ { -1.000000f, 0.000000f, 0.000000f },
+ { -0.850651f, 0.000000f, 0.525731f },
+ { -0.955423f, -0.295242f, 0.000000f },
+ { -0.951056f, -0.162460f, 0.262866f },
+ { -0.864188f, 0.442863f, -0.238856f },
+ { -0.951056f, 0.162460f, -0.262866f },
+ { -0.809017f, 0.309017f, -0.500000f },
{ -0.864188f, -0.442863f, -0.238856f },
- { -0.951056f, -0.162460f, -0.262866f },
- { -0.809017f, -0.309017f, -0.500000f },
- { -0.681718f, 0.147621f, -0.716567f },
- { -0.681718f, -0.147621f, -0.716567f },
- { -0.850651f, 0.000000f, -0.525731f },
- { -0.688191f, 0.587785f, -0.425325f },
- { -0.587785f, 0.425325f, -0.688191f },
- { -0.425325f, 0.688191f, -0.587785f },
- { -0.425325f, -0.688191f, -0.587785f },
- { -0.587785f, -0.425325f, -0.688191f },
- { -0.688191f, -0.587785f, -0.425325f },
+ { -0.951056f, -0.162460f, -0.262866f },
+ { -0.809017f, -0.309017f, -0.500000f },
+ { -0.681718f, 0.147621f, -0.716567f },
+ { -0.681718f, -0.147621f, -0.716567f },
+ { -0.850651f, 0.000000f, -0.525731f },
+ { -0.688191f, 0.587785f, -0.425325f },
+ { -0.587785f, 0.425325f, -0.688191f },
+ { -0.425325f, 0.688191f, -0.587785f },
+ { -0.425325f, -0.688191f, -0.587785f },
+ { -0.587785f, -0.425325f, -0.688191f },
+ { -0.688191f, -0.587785f, -0.425325f },
};
@@ -308,14 +308,14 @@
/* sanity check */
if( bufSize < ( sizeof( *md2 ) * 2) )
return PICO_PMV_ERROR_SIZE;
-
+
/* set as md2 */
md2 = (md2_t*) buffer;
-
+
/* check md2 magic */
- if( *((int*) md2->magic) != *((int*) MD2_MAGIC) )
+ if( *((int*) md2->magic) != *((int*) MD2_MAGIC) )
return PICO_PMV_ERROR_IDENT;
-
+
/* check md2 version */
if( _pico_little_long( md2->version ) != MD2_VERSION )
return PICO_PMV_ERROR_VERSION;
@@ -351,8 +351,8 @@
picoVec3_t xyz, normal;
picoVec2_t st;
picoColor_t color;
-
+
/* set as md2 */
bb = (picoByte_t*) buffer;
md2 = (md2_t*) buffer;
@@ -364,7 +364,7 @@
_pico_printf( PICO_ERROR, "%s is not an MD2 File!", fileName );
return NULL;
}
-
+
// swap md2
md2->version = _pico_little_long( md2->version );
@@ -392,7 +392,7 @@
_pico_printf( PICO_ERROR, "%s has 0 frames!", fileName );
return NULL;
}
-
+
if( frameNum < 0 || frameNum >= md2->numFrames )
{
_pico_printf( PICO_ERROR, "Invalid or out-of-range MD2 frame specified" );
@@ -434,10 +434,6 @@
// Print out md2 values
_pico_printf(PICO_VERBOSE,"Skins: %d Verts: %d STs: %d Triangles: %d Frames: %d\nSkin Name \"%s\"\n", md2->numSkins, md2->numXYZ, md2->numST, md2->numTris, md2->numFrames, &skinname );
- // detox Skin name
- _pico_setfext( skinname, "" );
- _pico_unixify( skinname );
-
/* create new pico model */
picoModel = PicoNewModel();
if( picoModel == NULL )
@@ -452,6 +448,37 @@
PicoSetModelName( picoModel, fileName );
PicoSetModelFileName( picoModel, fileName );
+ for (i = 0; i < md2->numSkins; i++) {
+ char *offsetSkin = (char*) (bb + md2->ofsSkins) + i * MD2_MAX_SKINNAME;
+ /* set Skin Name */
+ strncpy(skinname, offsetSkin, MD2_MAX_SKINNAME);
+
+ /* detox Skin name */
+ if (skinname[0] == '.') {/* special case ufoai skinpath */
+ char path[MD2_MAX_SKINNAME];
+ char skinnameRelative[MD2_MAX_SKINNAME];
+ strncpy(path, fileName, MD2_MAX_SKINNAME);
+ strncpy(skinnameRelative, skinname, MD2_MAX_SKINNAME);
+ _pico_unixify(path);
+ for (j = MD2_MAX_SKINNAME; j--;) {/* skip filename */
+ if (path[j] == '/')
+ break;
+ path[j] = '\0';
+ }
+ snprintf(skinname, MD2_MAX_SKINNAME, "%s%s", path, &skinnameRelative[1]);
+ }
+ _pico_setfext(skinname, "");
+
+ picoShader = PicoNewShader(picoModel);
+ if (picoShader == NULL) {
+ _pico_printf(PICO_ERROR, "Unable to allocate a new model shader");
+ PicoFreeModel(picoModel);
+ return NULL;
+ }
+
+ PicoSetShaderName(picoShader, skinname);
+ }
+
// allocate new pico surface
picoSurface = PicoNewSurface( picoModel );
if( picoSurface == NULL )
md2.diff [^] (8,224 bytes) 08.02.2010 19:18 [Show Content] [Hide Content]Index: libs/picomodel/pm_md2.c
===================================================================
--- libs/picomodel/pm_md2.c (Revision 5190)
+++ libs/picomodel/pm_md2.c (Arbeitskopie)
@@ -68,8 +68,6 @@
{
short Vert;
short ST;
- struct index_LUT_s *next;
-
} index_LUT_t;
typedef struct index_DUP_LUT_s
@@ -432,9 +430,6 @@
texCoord->t = _pico_little_short( texCoord->t );
}
- // set Skin Name
- strncpy(skinname, (const char*)(bb + md2->ofsSkins), MD2_MAX_SKINNAME );
-
// Print out md2 values
_pico_printf(PICO_VERBOSE,"Skins: %d Verts: %d STs: %d Triangles: %d Frames: %d\nSkin Name \"%s\"\n", md2->numSkins, md2->numXYZ, md2->numST, md2->numTris, md2->numFrames, &skinname );
@@ -517,166 +512,55 @@
p_index_LUT[i].next = NULL;
}
- // Fill in Look Up Table, and allocate/fill Linked List from vert array as needed for dup STs per Vert.
+ /* Fill in Look Up Table, and allocate/fill Linked List from vert array as needed for dup STs per Vert. */
tot_numVerts = md2->numXYZ;
- dups = 0;
- for(i=0; i<md2->numTris; i++)
- {
- p_md2Triangle = (md2Triangle_t *) ( bb + md2->ofsTris + (sizeof(md2Triangle_t)*i));
- for(j=0; j<3; j++)
- {
- if (p_index_LUT[p_md2Triangle->index_xyz[j]].ST == -1) // No Main Entry
+ for (i = 0; i < md2->numTris; i++) {
+ p_md2Triangle = (md2Triangle_t *) (bb + md2->ofsTris + (sizeof(md2Triangle_t) * i));
+ for (j = 0; j < 3; j++) {
+ if (p_index_LUT[p_md2Triangle->index_xyz[j]].ST == -1) /* No Main Entry */
p_index_LUT[p_md2Triangle->index_xyz[j]].ST = p_md2Triangle->index_st[j];
-
- else if (p_md2Triangle->index_st[j] == p_index_LUT[p_md2Triangle->index_xyz[j]].ST ) // Equal to Main Entry
- continue;
-
- else if ( (p_index_LUT[p_md2Triangle->index_xyz[j]].next == NULL) ) // Not equal to Main entry, and no LL entry
- { // Add first entry of LL from Main
- p_index_LUT2 = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t));
- if (p_index_LUT2 == NULL)
- _pico_printf( PICO_ERROR," Couldn't allocate memory!\n");
- p_index_LUT[p_md2Triangle->index_xyz[j]].next = (index_LUT_t *)p_index_LUT2;
- p_index_LUT2->Vert = dups;
- p_index_LUT2->ST = p_md2Triangle->index_st[j];
- p_index_LUT2->next = NULL;
- p_md2Triangle->index_xyz[j] = dups + md2->numXYZ; // Make change in Tri hunk
- dups++;
- }
- else // Try to find in LL from Main Entry
- {
- p_index_LUT3 = p_index_LUT2 = p_index_LUT[p_md2Triangle->index_xyz[j]].next;
- while ( (p_index_LUT2 != NULL) && (p_md2Triangle->index_xyz[j] != p_index_LUT2->Vert) ) // Walk down LL
- {
- p_index_LUT3 = p_index_LUT2;
- p_index_LUT2 = p_index_LUT2->next;
- }
- p_index_LUT2 = p_index_LUT3;
-
- if ( p_md2Triangle->index_st[j] == p_index_LUT2->ST ) // Found it
- {
- p_md2Triangle->index_xyz[j] = p_index_LUT2->Vert + md2->numXYZ; // Make change in Tri hunk
- continue;
- }
-
- if ( p_index_LUT2->next == NULL) // Didn't find it. Add entry to LL.
- {
- // Add the Entry
- p_index_LUT3 = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t));
- if (p_index_LUT3 == NULL)
- _pico_printf( PICO_ERROR," Couldn't allocate memory!\n");
- p_index_LUT2->next = (index_LUT_t *)p_index_LUT3;
- p_index_LUT3->Vert = p_md2Triangle->index_xyz[j];
- p_index_LUT3->ST = p_md2Triangle->index_st[j];
- p_index_LUT3->next = NULL;
- p_md2Triangle->index_xyz[j] = dups + md2->numXYZ; // Make change in Tri hunk
- dups++;
- }
- }
}
}
- // malloc and build array for Dup STs
- p_index_LUT_DUPS = (index_DUP_LUT_t *)_pico_alloc(sizeof(index_DUP_LUT_t) * dups);
- if (p_index_LUT_DUPS == NULL)
- _pico_printf( PICO_ERROR," Couldn't allocate memory!\n");
-
- dup_index = 0;
- for(i=0; i<md2->numXYZ; i++)
- {
- p_index_LUT2 = p_index_LUT[i].next;
- while (p_index_LUT2 != NULL)
- {
- p_index_LUT_DUPS[p_index_LUT2->Vert].OldVert = i;
- p_index_LUT_DUPS[p_index_LUT2->Vert].ST = p_index_LUT2->ST;
- dup_index++;
- p_index_LUT2 = p_index_LUT2->next;
- }
+ /* Build Picomodel */
+ triangle = (md2Triangle_t *) ((picoByte_t *) (bb + md2->ofsTris));
+ for (j = 0; j < md2->numTris; j++, triangle++) {
+ PicoSetSurfaceIndex(picoSurface, j * 3, triangle->index_xyz[0]);
+ PicoSetSurfaceIndex(picoSurface, j * 3 + 1, triangle->index_xyz[1]);
+ PicoSetSurfaceIndex(picoSurface, j * 3 + 2, triangle->index_xyz[2]);
}
- // Build Picomodel
- triangle = (md2Triangle_t *) ((picoByte_t *) (bb + md2->ofsTris) );
- texCoord = (md2St_t*) ((picoByte_t *) (bb + md2->ofsST) );
- vertex = (md2XyzNormal_t*) ((picoByte_t*) (frame->verts) );
- for( j = 0; j < md2->numTris; j++, triangle++ )
- {
- PicoSetSurfaceIndex( picoSurface, j*3 , triangle->index_xyz[0] );
- PicoSetSurfaceIndex( picoSurface, j*3+1 , triangle->index_xyz[1] );
- PicoSetSurfaceIndex( picoSurface, j*3+2 , triangle->index_xyz[2] );
- }
+ _pico_set_color(color, 255, 255, 255, 255);
- for(i=0; i< md2->numXYZ; i++, vertex++)
- {
+ texCoord = (md2St_t*) ((picoByte_t *) (bb + md2->ofsST));
+ vertex = (md2XyzNormal_t*) ((picoByte_t*) (frame->verts));
+ for (i = 0; i < md2->numXYZ; i++, vertex++) {
/* set vertex origin */
- xyz[ 0 ] = vertex->v[0] * frame->scale[0] + frame->translate[0];
- xyz[ 1 ] = vertex->v[1] * frame->scale[1] + frame->translate[1];
- xyz[ 2 ] = vertex->v[2] * frame->scale[2] + frame->translate[2];
- PicoSetSurfaceXYZ( picoSurface, i , xyz );
+ xyz[0] = vertex->v[0] * frame->scale[0] + frame->translate[0];
+ xyz[1] = vertex->v[1] * frame->scale[1] + frame->translate[1];
+ xyz[2] = vertex->v[2] * frame->scale[2] + frame->translate[2];
+ PicoSetSurfaceXYZ(picoSurface, i, xyz);
/* set normal */
- normal[ 0 ] = md2_normals[vertex->lightnormalindex][0];
- normal[ 1 ] = md2_normals[vertex->lightnormalindex][1];
- normal[ 2 ] = md2_normals[vertex->lightnormalindex][2];
- PicoSetSurfaceNormal( picoSurface, i , normal );
+ normal[0] = md2_normals[vertex->lightnormalindex][0];
+ normal[1] = md2_normals[vertex->lightnormalindex][1];
+ normal[2] = md2_normals[vertex->lightnormalindex][2];
+ PicoSetSurfaceNormal(picoSurface, i, normal);
/* set st coords */
- st[ 0 ] = ((texCoord[p_index_LUT[i].ST].s) / ((float)md2->skinWidth));
- st[ 1 ] = (texCoord[p_index_LUT[i].ST].t / ((float)md2->skinHeight));
- PicoSetSurfaceST( picoSurface, 0, i , st );
- }
+ st[0] = (float) texCoord[p_index_LUT[i].ST].s / (float) md2->skinWidth;
+ st[1] = (float) texCoord[p_index_LUT[i].ST].t / (float) md2->skinHeight;
+ PicoSetSurfaceST(picoSurface, 0, i, st);
- if (dups)
- {
- for(i=0; i<dups; i++)
- {
- j = p_index_LUT_DUPS[i].OldVert;
- /* set vertex origin */
- xyz[ 0 ] = frame->verts[j].v[0] * frame->scale[0] + frame->translate[0];
- xyz[ 1 ] = frame->verts[j].v[1] * frame->scale[1] + frame->translate[1];
- xyz[ 2 ] = frame->verts[j].v[2] * frame->scale[2] + frame->translate[2];
- PicoSetSurfaceXYZ( picoSurface, i + md2->numXYZ , xyz );
-
- /* set normal */
- normal[ 0 ] = md2_normals[frame->verts[j].lightnormalindex][0];
- normal[ 1 ] = md2_normals[frame->verts[j].lightnormalindex][1];
- normal[ 2 ] = md2_normals[frame->verts[j].lightnormalindex][2];
- PicoSetSurfaceNormal( picoSurface, i + md2->numXYZ , normal );
-
- /* set st coords */
- st[ 0 ] = ((texCoord[p_index_LUT_DUPS[i].ST].s) / ((float)md2->skinWidth));
- st[ 1 ] = (texCoord[p_index_LUT_DUPS[i].ST].t / ((float)md2->skinHeight));
- PicoSetSurfaceST( picoSurface, 0, i + md2->numXYZ , st );
- }
+ /* set color */
+ PicoSetSurfaceColor(picoSurface, 0, i, color);
}
- /* set color */
- PicoSetSurfaceColor( picoSurface, 0, 0, color );
+ /* Free malloc'ed LUTs */
+ _pico_free(p_index_LUT);
- // Free up malloc'ed LL entries
- for(i=0; i<md2->numXYZ; i++)
- {
- if(p_index_LUT[i].next != NULL)
- {
- p_index_LUT2 = p_index_LUT[i].next;
- do {
- p_index_LUT3 = p_index_LUT2->next;
- _pico_free(p_index_LUT2);
- p_index_LUT2 = p_index_LUT3;
- dups--;
- } while (p_index_LUT2 != NULL);
- }
- }
-
- if (dups)
- _pico_printf(PICO_WARNING, " Not all LL mallocs freed\n");
-
- // Free malloc'ed LUTs
- _pico_free(p_index_LUT);
- _pico_free(p_index_LUT_DUPS);
-
/* return the new pico model */
return picoModel;
-
}
|