#include #include #include "im3d.h" float TriStripData[36][5] = { { 0.000f, 1.000f, -1.000f, 0.000f, 0.000f}, { 0.000f, 1.000f, 1.000f, 0.000f, 1.000f}, { 0.707f, 0.707f, -1.000f, 0.125f, 0.000f}, { 0.707f, 0.707f, 1.000f, 0.125f, 1.000f}, { 1.000f, 0.000f, -1.000f, 0.250f, 0.000f}, { 1.000f, 0.000f, 1.000f, 0.250f, 1.000f}, { 0.707f, -0.707f, -1.000f, 0.375f, 0.000f}, { 0.707f, -0.707f, 1.000f, 0.375f, 1.000f}, { 0.000f, -1.000f, -1.000f, 0.500f, 0.000f}, { 0.000f, -1.000f, 1.000f, 0.500f, 1.000f}, {-0.707f, -0.707f, -1.000f, 0.625f, 0.000f}, {-0.707f, -0.707f, 1.000f, 0.625f, 1.000f}, {-1.000f, -0.000f, -1.000f, 0.750f, 0.000f}, {-1.000f, -0.000f, 1.000f, 0.750f, 1.000f}, {-0.707f, 0.707f, -1.000f, 0.875f, 0.000f}, {-0.707f, 0.707f, 1.000f, 0.875f, 1.000f}, { 0.000f, 1.000f, -1.000f, 1.000f, 0.000f}, { 0.000f, 1.000f, 1.000f, 1.000f, 1.000f}, { 0.000f, 1.000f, 1.000f, 0.000f, 0.000f}, { 0.000f, 1.000f, -1.000f, 0.000f, 1.000f}, { 0.707f, 0.707f, 1.000f, 0.125f, 0.000f}, { 0.707f, 0.707f, -1.000f, 0.125f, 1.000f}, { 1.000f, 0.000f, 1.000f, 0.250f, 0.000f}, { 1.000f, 0.000f, -1.000f, 0.250f, 1.000f}, { 0.707f, -0.707f, 1.000f, 0.375f, 0.000f}, { 0.707f, -0.707f, -1.000f, 0.375f, 1.000f}, { 0.000f, -1.000f, 1.000f, 0.500f, 0.000f}, { 0.000f, -1.000f, -1.000f, 0.500f, 1.000f}, {-0.707f, -0.707f, 1.000f, 0.625f, 0.000f}, {-0.707f, -0.707f, -1.000f, 0.625f, 1.000f}, {-1.000f, -0.000f, 1.000f, 0.750f, 0.000f}, {-1.000f, -0.000f, -1.000f, 0.750f, 1.000f}, {-0.707f, 0.707f, 1.000f, 0.875f, 0.000f}, {-0.707f, 0.707f, -1.000f, 0.875f, 1.000f}, { 0.000f, 1.000f, 1.000f, 1.000f, 0.000f}, { 0.000f, 1.000f, -1.000f, 1.000f, 1.000f} }; float IndexedTriStripData[16][5] = { { 0.000f, 1.000f, 1.000f, 0.000f, 0.000f}, { 0.707f, 0.707f, 1.000f, 0.250f, 0.000f}, { 1.000f, 0.000f, 1.000f, 0.500f, 0.000f}, { 0.707f, -0.707f, 1.000f, 0.750f, 0.000f}, { 0.000f, -1.000f, 1.000f, 1.000f, 0.000f}, {-0.707f, -0.707f, 1.000f, 0.750f, 0.000f}, {-1.000f, -0.000f, 1.000f, 0.500f, 0.000f}, {-0.707f, 0.707f, 1.000f, 0.250f, 0.000f}, { 0.000f, 1.000f, -1.000f, 0.000f, 1.000f}, { 0.707f, 0.707f, -1.000f, 0.250f, 1.000f}, { 1.000f, 0.000f, -1.000f, 0.500f, 1.000f}, { 0.707f, -0.707f, -1.000f, 0.750f, 1.000f}, { 0.000f, -1.000f, -1.000f, 1.000f, 1.000f}, {-0.707f, -0.707f, -1.000f, 0.750f, 1.000f}, {-1.000f, -0.000f, -1.000f, 0.500f, 1.000f}, {-0.707f, 0.707f, -1.000f, 0.250f, 1.000f}, }; rw::uint16 IndexedTriStripIndices[36] = { 0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15, 0, 8, 8, 0, 9, 1, 10, 2, 11, 3, 12, 4, 13, 5, 14, 6, 15, 7, 8, 0 }; rw::RWDEVICE::Im3DVertex TriStrip[36]; rw::RWDEVICE::Im3DVertex IndexedTriStrip[16]; void TriStripCreate(void) { for(int i = 0; i < 36; i++){ TriStrip[i].setX(TriStripData[i][0]); TriStrip[i].setY(TriStripData[i][1]); TriStrip[i].setZ(TriStripData[i][2]); TriStrip[i].setU(TriStripData[i][3]); TriStrip[i].setV(TriStripData[i][4]); } } void TriStripSetColor(bool white) { rw::RGBA SolidColor1 = SolidRed; rw::RGBA SolidColor2 = SolidYellow; if(white){ SolidColor1 = SolidWhite; SolidColor2 = SolidWhite; } for(int i = 0; i < 36; i += 2){ TriStrip[i].setColor(SolidColor1.red, SolidColor1.green, SolidColor1.blue, SolidColor1.alpha); TriStrip[i+1].setColor(SolidColor2.red, SolidColor2.green, SolidColor2.blue, SolidColor2.alpha); } } void TriStripRender(rw::Matrix *transform, rw::uint32 transformFlags) { rw::im3d::Transform(TriStrip, 36, transform, transformFlags); rw::im3d::RenderPrimitive(rw::PRIMTYPETRISTRIP); rw::im3d::End(); } void IndexedTriStripCreate(void) { for(int i = 0; i < 16; i++){ IndexedTriStrip[i].setX(IndexedTriStripData[i][0]); IndexedTriStrip[i].setY(IndexedTriStripData[i][1]); IndexedTriStrip[i].setZ(IndexedTriStripData[i][2]); IndexedTriStrip[i].setU(IndexedTriStripData[i][3]); IndexedTriStrip[i].setV(IndexedTriStripData[i][4]); } } void IndexedTriStripSetColor(bool white) { int i; rw::RGBA SolidColor1 = SolidBlue; rw::RGBA SolidColor2 = SolidGreen; if(white){ SolidColor1 = SolidWhite; SolidColor2 = SolidWhite; } for(i = 0; i < 8; i++) IndexedTriStrip[i].setColor(SolidColor1.red, SolidColor1.green, SolidColor1.blue, SolidColor1.alpha); for(; i < 16; i++) IndexedTriStrip[i].setColor(SolidColor2.red, SolidColor2.green, SolidColor2.blue, SolidColor2.alpha); } void IndexedTriStripRender(rw::Matrix *transform, rw::uint32 transformFlags) { rw::im3d::Transform(IndexedTriStrip, 16, transform, transformFlags); rw::im3d::RenderIndexedPrimitive(rw::PRIMTYPETRISTRIP, IndexedTriStripIndices, 36); rw::im3d::End(); }