#include #include #include "im3d.h" float TriFanData[34][5] = { { 0.000f, 0.000f, -1.000f, 0.500f, 0.500f}, { 0.000f, 1.000f, 0.000f, 0.500f, 1.000f}, { 0.383f, 0.924f, 0.000f, 0.691f, 0.962f}, { 0.707f, 0.707f, 0.000f, 0.854f, 0.854f}, { 0.924f, 0.383f, 0.000f, 0.962f, 0.691f}, { 1.000f, 0.000f, 0.000f, 1.000f, 0.500f}, { 0.924f, -0.383f, 0.000f, 0.962f, 0.309f}, { 0.707f, -0.707f, 0.000f, 0.854f, 0.146f}, { 0.383f, -0.924f, 0.000f, 0.691f, 0.038f}, { 0.000f, -1.000f, 0.000f, 0.500f, 0.000f}, {-0.383f, -0.924f, 0.000f, 0.309f, 0.038f}, {-0.707f, -0.707f, 0.000f, 0.146f, 0.146f}, {-0.924f, -0.383f, 0.000f, 0.038f, 0.309f}, {-1.000f, -0.000f, 0.000f, 0.000f, 0.500f}, {-0.924f, 0.383f, 0.000f, 0.038f, 0.691f}, {-0.707f, 0.707f, 0.000f, 0.146f, 0.854f}, {-0.383f, 0.924f, 0.000f, 0.309f, 0.962f}, { 0.000f, 1.000f, 0.000f, 0.500f, 1.000f}, {-0.383f, 0.924f, 0.000f, 0.309f, 0.962f}, {-0.707f, 0.707f, 0.000f, 0.146f, 0.854f}, {-0.924f, 0.383f, 0.000f, 0.038f, 0.691f}, {-1.000f, -0.000f, 0.000f, 0.000f, 0.500f}, {-0.924f, -0.383f, 0.000f, 0.038f, 0.309f}, {-0.707f, -0.707f, 0.000f, 0.146f, 0.146f}, {-0.383f, -0.924f, 0.000f, 0.309f, 0.038f}, { 0.000f, -1.000f, 0.000f, 0.500f, 0.000f}, { 0.383f, -0.924f, 0.000f, 0.691f, 0.038f}, { 0.707f, -0.707f, 0.000f, 0.854f, 0.146f}, { 0.924f, -0.383f, 0.000f, 0.962f, 0.309f}, { 1.000f, 0.000f, 0.000f, 1.000f, 0.500f}, { 0.924f, 0.383f, 0.000f, 0.962f, 0.691f}, { 0.707f, 0.707f, 0.000f, 0.854f, 0.854f}, { 0.383f, 0.924f, 0.000f, 0.691f, 0.962f}, { 0.000f, 1.000f, 0.000f, 0.500f, 1.000f} }; float IndexedTriFanData[17][5] = { /* top */ { 0.000f, 0.000f, -1.000f, 0.500f, 0.500f}, /* circle */ { 0.000f, 1.000f, 0.000f, 0.500f, 1.000f}, { 0.383f, 0.924f, 0.000f, 0.691f, 0.962f}, { 0.707f, 0.707f, 0.000f, 0.854f, 0.854f}, { 0.924f, 0.383f, 0.000f, 0.962f, 0.691f}, { 1.000f, 0.000f, 0.000f, 1.000f, 0.500f}, { 0.924f, -0.383f, 0.000f, 0.962f, 0.309f}, { 0.707f, -0.707f, 0.000f, 0.854f, 0.146f}, { 0.383f, -0.924f, 0.000f, 0.691f, 0.038f}, { 0.000f, -1.000f, 0.000f, 0.500f, 0.000f}, {-0.383f, -0.924f, 0.000f, 0.309f, 0.038f}, {-0.707f, -0.707f, 0.000f, 0.146f, 0.146f}, {-0.924f, -0.383f, 0.000f, 0.038f, 0.309f}, {-1.000f, -0.000f, 0.000f, 0.000f, 0.500f}, {-0.924f, 0.383f, 0.000f, 0.038f, 0.691f}, {-0.707f, 0.707f, 0.000f, 0.146f, 0.854f}, {-0.383f, 0.924f, 0.000f, 0.309f, 0.962f} }; rw::uint16 IndexedTriFanIndices[34] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; rw::RWDEVICE::Im3DVertex TriFan[34]; rw::RWDEVICE::Im3DVertex IndexedTriFan[17]; void TriFanCreate(void) { for(int i = 0; i < 34; i++){ TriFan[i].setX(TriFanData[i][0]); TriFan[i].setY(TriFanData[i][1]); TriFan[i].setZ(TriFanData[i][2]); TriFan[i].setU(TriFanData[i][3]); TriFan[i].setV(TriFanData[i][4]); } } void TriFanSetColor(bool white) { rw::RGBA SolidColor1 = SolidYellow; rw::RGBA SolidColor2 = SolidBlue; if(white){ SolidColor1 = SolidWhite; SolidColor2 = SolidWhite; } TriFan[0].setColor(SolidColor1.red, SolidColor1.green, SolidColor1.blue, SolidColor1.alpha); for(int i = 1; i < 34; i++) TriFan[i].setColor(SolidColor2.red, SolidColor2.green, SolidColor2.blue, SolidColor2.alpha); } void TriFanRender(rw::Matrix *transform, rw::uint32 transformFlags) { rw::im3d::Transform(TriFan, 34, transform, transformFlags); rw::im3d::RenderPrimitive(rw::PRIMTYPETRIFAN); rw::im3d::End(); } void IndexedTriFanCreate(void) { for(int i = 0; i < 17; i++){ IndexedTriFan[i].setX(IndexedTriFanData[i][0]); IndexedTriFan[i].setY(IndexedTriFanData[i][1]); IndexedTriFan[i].setZ(IndexedTriFanData[i][2]); IndexedTriFan[i].setU(IndexedTriFanData[i][3]); IndexedTriFan[i].setV(IndexedTriFanData[i][4]); } } void IndexedTriFanSetColor(bool white) { rw::RGBA SolidColor1 = SolidGreen; rw::RGBA SolidColor2 = SolidBlack; if(white){ SolidColor1 = SolidWhite; SolidColor2 = SolidWhite; } IndexedTriFan[0].setColor(SolidColor1.red, SolidColor1.green, SolidColor1.blue, SolidColor1.alpha); for(int i = 1; i < 17; i++) IndexedTriFan[i].setColor(SolidColor2.red, SolidColor2.green, SolidColor2.blue, SolidColor2.alpha); } void IndexedTriFanRender(rw::Matrix *transform, rw::uint32 transformFlags) { rw::im3d::Transform(IndexedTriFan, 17, transform, transformFlags); rw::im3d::RenderIndexedPrimitive(rw::PRIMTYPETRIFAN, IndexedTriFanIndices, 34); rw::im3d::End(); }