summaryrefslogtreecommitdiff
path: root/tools/im3d/tristrip.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/im3d/tristrip.cpp')
-rw-r--r--tools/im3d/tristrip.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/tools/im3d/tristrip.cpp b/tools/im3d/tristrip.cpp
new file mode 100644
index 0000000..93c1496
--- /dev/null
+++ b/tools/im3d/tristrip.cpp
@@ -0,0 +1,169 @@
+#include <rw.h>
+#include <skeleton.h>
+
+#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();
+}