Skip to content

Commit 99cba64

Browse files
committed
MeshGen + Some Reformat + OBJ Simple Import/Export
1 parent 82a3575 commit 99cba64

File tree

9 files changed

+1919
-310
lines changed

9 files changed

+1919
-310
lines changed

source/CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ set(forth_common_srcs
99
common/VertexProfile.h
1010
)
1111

12+
set(forth_extras_srcs
13+
extras/MeshGen.h
14+
extras/MeshGen.cpp
15+
)
16+
1217
set(forth_math_srcs
1318
math/Bounds4.h
1419
math/Euler4.h
@@ -43,6 +48,7 @@ add_library(forth_static
4348
../include/forth.h
4449
forth.h
4550
${forth_common_srcs}
51+
${forth_extras_srcs}
4652
${forth_math_srcs}
4753
${forth_rendering_srcs}
4854
${forth_visualizer_srcs}

source/common/Buffer4.cpp

+140
Original file line numberDiff line numberDiff line change
@@ -495,4 +495,144 @@ namespace Forth
495495
break;
496496
}
497497
}
498+
499+
void Buffer4::AddBySequence(SequenceMode mode, const std::vector<int> &v)
500+
{
501+
// Copy of the original sequence
502+
int va = v.size();
503+
switch (mode)
504+
{
505+
case SQM_Points:
506+
for (int i = 0; i < va;)
507+
AddPoint(v[i++]);
508+
break;
509+
510+
case SQM_Lines:
511+
for (int i = 0; i < va;)
512+
AddSegment(v[i++], v[i++]);
513+
break;
514+
515+
case SQM_LineStrip:
516+
for (int i = 1; i < va;)
517+
AddSegment(v[i - 1], v[i++]);
518+
break;
519+
520+
case SQM_LineFan:
521+
for (int i = 1; i < va;)
522+
AddSegment(v[0], v[i++]);
523+
break;
524+
525+
case SQM_LineLoop:
526+
for (int i = 0; i < va;)
527+
AddSegment(v[i], (v[++i % va]));
528+
break;
529+
530+
case SQM_Triangles:
531+
for (int i = 0; i < va;)
532+
AddTriangle(v[i++], v[i++], v[i++]);
533+
break;
534+
535+
case SQM_TriangleStrip:
536+
for (int i = 2; i < va;)
537+
AddTriangle(v[i - 2], v[i - 1], v[i++]);
538+
break;
539+
540+
case SQM_TriangleFan:
541+
for (int i = 1; i < va;)
542+
AddTriangle(v[0], v[i - 1], v[i++]);
543+
break;
544+
545+
case SQM_Quads:
546+
for (int i = 0; i < va;)
547+
AddQuad(v[i++], v[i++], v[i++], v[i++]);
548+
break;
549+
550+
case SQM_QuadStrip:
551+
for (int i = 2; i < va; i += 2)
552+
AddQuad(v[i - 2], v[i - 1], v[i + 1], v[i]);
553+
break;
554+
555+
case SQM_Polygon:
556+
for (int i = 1; i < va;)
557+
AddTriangle(v[0], v[i], (v[++i % va]));
558+
break;
559+
560+
case SQM_Trimids:
561+
for (int i = 0; i < va;)
562+
AddTrimid(v[i++], v[i++], v[i++], v[i++]);
563+
break;
564+
565+
case SQM_TrimidStrip:
566+
for (int i = 3; i < va;)
567+
AddTrimid(v[i - 3], v[i - 2], v[i - 1], v[i++]);
568+
break;
569+
570+
case SQM_TrimidFan:
571+
for (int i = 1; i < va;)
572+
AddTrimid(v[0], v[i++], v[i++], v[i++]);
573+
break;
574+
575+
case SQM_PyramidFan:
576+
for (int i = 1; i < va;)
577+
AddPyramid(v[0], v[i++], v[i++], v[i++], v[i++]);
578+
break;
579+
580+
case SQM_PrismFan:
581+
for (int i = 2; i < va; i += 2)
582+
AddPrism(v[i++], v[i++], v[0], v[i + 1], v[i], v[1]);
583+
break;
584+
585+
case SQM_Cubes:
586+
for (int i = 0; i < va;)
587+
AddCube(v[i++], v[i++], v[i++], v[i++], v[i++], v[i++], v[i++], v[i++]);
588+
break;
589+
590+
case SQM_CubeStrip:
591+
for (int i = 4; i < va;)
592+
AddCube(v[i - 4], v[i - 3], v[i - 2], v[i - 1], v[i++], v[i++], v[i++], v[i++]);
593+
break;
594+
}
595+
}
596+
597+
void Buffer4::AddPoint(const std::vector<int> &v)
598+
{
599+
AddBySequence(SQM_Points, v);
600+
}
601+
602+
void Buffer4::AddSegment(const std::vector<int> &v)
603+
{
604+
AddBySequence(SQM_Lines, v);
605+
}
606+
607+
void Buffer4::AddTriangle(const std::vector<int> &v)
608+
{
609+
AddBySequence(SQM_Triangles, v);
610+
}
611+
612+
void Buffer4::AddQuad(const std::vector<int> &v)
613+
{
614+
AddBySequence(SQM_Quads, v);
615+
}
616+
617+
void Buffer4::AddTrimid(const std::vector<int> &v)
618+
{
619+
AddBySequence(SQM_Trimids, v);
620+
}
621+
622+
void Buffer4::AddPolygon(const std::vector<int> &v)
623+
{
624+
switch (simplex)
625+
{
626+
case SM_Point:
627+
AddBySequence(SQM_Points, v);
628+
break;
629+
case SM_Line:
630+
AddBySequence(SQM_LineLoop, v);
631+
break;
632+
case SM_Triangle:
633+
AddBySequence(SQM_Polygon, v);
634+
break;
635+
}
636+
}
637+
498638
} // namespace Forth

0 commit comments

Comments
 (0)