summaryrefslogtreecommitdiff
path: root/tools/im3d/trifan.cpp
diff options
context:
space:
mode:
authorclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
committerclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
commit847962910f0bff071f3bf07c9abb87764fb6cac3 (patch)
treeddcd429e134c7fd5f72ddc97ced175de8d66fcd0 /tools/im3d/trifan.cpp
downloadlibrw-847962910f0bff071f3bf07c9abb87764fb6cac3.tar.gz
librw-847962910f0bff071f3bf07c9abb87764fb6cac3.zip
Import aap/librw @ masterHEADmaster
Snapshot for re3/reVC vendoring, per @lzcnt. Source: https://github.com/aap/librw (master).
Diffstat (limited to 'tools/im3d/trifan.cpp')
-rw-r--r--tools/im3d/trifan.cpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/tools/im3d/trifan.cpp b/tools/im3d/trifan.cpp
new file mode 100644
index 0000000..3bef64b
--- /dev/null
+++ b/tools/im3d/trifan.cpp
@@ -0,0 +1,152 @@
+#include <rw.h>
+#include <skeleton.h>
+
+#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();
+}