summaryrefslogtreecommitdiff
path: root/tools/im3d/linelist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/im3d/linelist.cpp')
-rw-r--r--tools/im3d/linelist.cpp176
1 files changed, 176 insertions, 0 deletions
diff --git a/tools/im3d/linelist.cpp b/tools/im3d/linelist.cpp
new file mode 100644
index 0000000..768e87a
--- /dev/null
+++ b/tools/im3d/linelist.cpp
@@ -0,0 +1,176 @@
+#include <rw.h>
+#include <skeleton.h>
+
+#include "im3d.h"
+
+float LineListData[28][5] = {
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 0.000f, 1.000f, 0.000f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 0.000f, -1.000f, 0.000f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 0.000f, 0.000f, 1.000f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 0.000f, 0.000f, -1.000f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 1.000f, 0.000f, 0.000f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ {-1.000f, 0.000f, 0.000f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 0.577f, 0.577f, 0.577f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 0.577f, -0.577f, 0.577f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ {-0.577f, 0.577f, -0.577f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ {-0.577f, -0.577f, -0.577f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 0.577f, -0.577f, -0.577f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 0.577f, 0.577f, -0.577f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ {-0.577f, -0.577f, 0.577f, 1.000f, 1.000f},
+
+ { 0.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ {-0.577f, 0.577f, 0.577f, 1.000f, 1.000f}
+};
+
+float IndexedLineListData[18][5] = {
+ { 0.000f, 1.000f, 0.000f, 0.000f, 0.000f},
+
+ { 0.577f, 0.577f, 0.577f, 0.000f, 0.000f},
+ { 0.577f, 0.577f, -0.577f, 0.000f, 0.000f},
+ {-0.577f, 0.577f, -0.577f, 0.000f, 0.000f},
+ {-0.577f, 0.577f, 0.577f, 0.000f, 0.000f},
+
+ { 0.000f, 0.000f, 1.000f, 0.000f, 0.000f},
+ { 0.707f, 0.000f, 0.707f, 0.000f, 0.000f},
+ { 1.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ { 0.707f, 0.000f, -0.707f, 0.000f, 0.000f},
+ { 0.000f, 0.000f, -1.000f, 0.000f, 0.000f},
+ {-0.707f, 0.000f, -0.707f, 0.000f, 0.000f},
+ {-1.000f, 0.000f, 0.000f, 0.000f, 0.000f},
+ {-0.707f, 0.000f, 0.707f, 0.000f, 0.000f},
+
+ { 0.577f, -0.577f, 0.577f, 0.000f, 0.000f},
+ { 0.577f, -0.577f, -0.577f, 0.000f, 0.000f},
+ {-0.577f, -0.577f, -0.577f, 0.000f, 0.000f},
+ {-0.577f, -0.577f, 0.577f, 0.000f, 0.000f},
+
+ { 0.000f, -1.000f, 0.000f, 0.000f, 0.000f}
+};
+
+rw::uint16 IndexedLineListIndices[96] = {
+ 0,1, 0,2, 0,3, 0,4, 1,2, 2,3, 3,4, 4,1,
+
+ 1,5, 1,6, 1,7, 2,7, 2,8, 2,9, 3,9, 3,10, 3,11, 4,11, 4,12, 4,5,
+ 5,6, 6,7, 7,8, 8,9, 9,10, 10,11, 11,12, 12,5,
+ 13,5, 13,6, 13,7, 14,7, 14,8, 14,9, 15,9, 15,10, 15,11, 16,11, 16,12, 16,5,
+
+ 17,13, 17,14, 17,15, 17,16, 13,14, 14,15, 15,16, 16,13
+};
+
+rw::RWDEVICE::Im3DVertex LineList[28];
+rw::RWDEVICE::Im3DVertex IndexedLineList[18];
+
+
+void
+LineListCreate(void)
+{
+ for(int i = 0; i < 28; i++){
+ LineList[i].setX(LineListData[i][0]);
+ LineList[i].setY(LineListData[i][1]);
+ LineList[i].setZ(LineListData[i][2]);
+ LineList[i].setU(LineListData[i][3]);
+ LineList[i].setV(LineListData[i][4]);
+ }
+}
+
+void
+LineListSetColor(bool white)
+{
+ rw::RGBA SolidColor1 = SolidRed;
+ rw::RGBA SolidColor2 = SolidWhite;
+
+ if(white){
+ SolidColor1 = SolidWhite;
+ SolidColor2 = SolidWhite;
+ }
+
+ for(int i = 0; i < 28; i += 2){
+ LineList[i].setColor(SolidColor1.red, SolidColor1.green,
+ SolidColor1.blue, SolidColor1.alpha);
+ LineList[i+1].setColor(SolidColor2.red, SolidColor2.green,
+ SolidColor2.blue, SolidColor2.alpha);
+ }
+}
+
+void
+LineListRender(rw::Matrix *transform, rw::uint32 transformFlags)
+{
+ rw::im3d::Transform(LineList, 28, transform, transformFlags);
+ rw::im3d::RenderPrimitive(rw::PRIMTYPELINELIST);
+ rw::im3d::End();
+}
+
+
+void
+IndexedLineListCreate(void)
+{
+ for(int i = 0; i < 18; i++){
+ IndexedLineList[i].setX(IndexedLineListData[i][0]);
+ IndexedLineList[i].setY(IndexedLineListData[i][1]);
+ IndexedLineList[i].setZ(IndexedLineListData[i][2]);
+ IndexedLineList[i].setU(IndexedLineListData[i][3]);
+ IndexedLineList[i].setV(IndexedLineListData[i][4]);
+ }
+}
+
+void
+IndexedLineListSetColor(bool white)
+{
+ int i;
+ rw::RGBA SolidColor1 = SolidRed;
+ rw::RGBA SolidColor2 = SolidGreen;
+ rw::RGBA SolidColor3 = SolidBlue;
+
+ if(white){
+ SolidColor1 = SolidWhite;
+ SolidColor2 = SolidWhite;
+ SolidColor3 = SolidWhite;
+ }
+
+ IndexedLineList[0].setColor(SolidColor1.red, SolidColor1.green,
+ SolidColor1.blue, SolidColor1.alpha);
+ for(i = 1; i < 5; i++)
+ IndexedLineList[i].setColor(SolidColor2.red, SolidColor2.green,
+ SolidColor2.blue, SolidColor2.alpha);
+ for(; i < 13; i++)
+ IndexedLineList[i].setColor(SolidColor3.red, SolidColor3.green,
+ SolidColor3.blue, SolidColor3.alpha);
+ for(; i < 17; i++)
+ IndexedLineList[i].setColor(SolidColor2.red, SolidColor2.green,
+ SolidColor2.blue, SolidColor2.alpha);
+ IndexedLineList[i].setColor(SolidColor1.red, SolidColor1.green,
+ SolidColor1.blue, SolidColor1.alpha);
+}
+
+void
+IndexedLineListRender(rw::Matrix *transform, rw::uint32 transformFlags)
+{
+ rw::im3d::Transform(IndexedLineList, 18, transform, transformFlags);
+ rw::im3d::RenderIndexedPrimitive(rw::PRIMTYPELINELIST, IndexedLineListIndices, 96);
+ rw::im3d::End();
+}