Added 3D Primitive functions

This commit is contained in:
n00b
2024-12-15 19:43:58 -05:00
parent d4aa4198af
commit 98e8257e4a
13 changed files with 1833 additions and 1602 deletions

View File

@@ -583,6 +583,14 @@ ul, #myUL {
<li><a href="pset.html" target="main">Pset</a></li>
<li><a href="triangle.html" target="main">Triangle</a></li>
<li><a href="line3d.html" target="main">Line3D</a></li>
<li><a href="box3d.html" target="main">Box3D</a></li>
<li><a href="triangle3d.html" target="main">Triangle3D</a></li>
</ul>
</li>

View File

@@ -209,6 +209,10 @@ rc_drawRectFill( RECTFILL_X, RECTFILL_Y, RECTFILL_W, RECTFILL_H )
rc_rgb( RGB_R, RGB_G, RGB_B )
rc_rgba( RGBA_R, RGBA_G, RGBA_B, RGBA_A )
rc_drawPixel( PSET_X, PSET_Y )
rc_drawTriangle( TRIANGLE_X1, TRIANGLE_Y1, TRIANGLE_X2, TRIANGLE_Y2, TRIANGLE_X3, TRIANGLE_Y3 )
rc_drawLine3D( LINE3D_X1, LINE3D_Y1, LINE3D_Z1, LINE3D_X2, LINE3D_Y2, LINE3D_Z2 )
rc_drawBox3D( BOX3D_MIN_X, BOX3D_MIN_Y, BOX3D_MIN_Z, BOX3D_MAX_X, BOX3D_MAX_Y, BOX3D_MAX_Z )
rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 )
rc_loadImage( LOADIMAGE_IMG$ )
rc_loadImageEx( LOADIMAGEEX_IMG$, LOADIMAGEEX_COLKEY )
rc_createImage( CREATEIMAGE_W, CREATEIMAGE_H, &CREATEIMAGE_BUFFER )

View File

@@ -12,3 +12,7 @@ sub RectFill(x, y, w, h)
function RGB(r,g,b)
function RGBA(r,g,b,a)
sub Pset(x,y)
sub Triangle(x1, y1, x2, y2, x3, y3)
sub Line3D(x1, y1, z1, x2, y2, z2)
sub Box3D(min_x, min_y, min_z, max_x, max_y, max_z)
sub Triangle3D(x1, y1, z1, x2, y2, z2, x3, y3, z3)

View File

@@ -579,6 +579,37 @@ void init_embedded_functions()
embed_function("Pset", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
embed_function("Triangle", ID_TYPE_SUB);
add_embedded_arg("x1", ID_TYPE_NUM);
add_embedded_arg("y1", ID_TYPE_NUM);
add_embedded_arg("x2", ID_TYPE_NUM);
add_embedded_arg("y2", ID_TYPE_NUM);
add_embedded_arg("x3", ID_TYPE_NUM);
add_embedded_arg("y3", ID_TYPE_NUM);
embed_function("Line3D", ID_TYPE_SUB);
add_embedded_arg("x1", ID_TYPE_NUM);
add_embedded_arg("y1", ID_TYPE_NUM);
add_embedded_arg("z1", ID_TYPE_NUM);
add_embedded_arg("x2", ID_TYPE_NUM);
add_embedded_arg("y2", ID_TYPE_NUM);
add_embedded_arg("z2", ID_TYPE_NUM);
embed_function("Box3D", ID_TYPE_SUB);
add_embedded_arg("min_x", ID_TYPE_NUM);
add_embedded_arg("min_y", ID_TYPE_NUM);
add_embedded_arg("min_z", ID_TYPE_NUM);
add_embedded_arg("max_x", ID_TYPE_NUM);
add_embedded_arg("max_y", ID_TYPE_NUM);
add_embedded_arg("max_z", ID_TYPE_NUM);
embed_function("Triangle3D", ID_TYPE_SUB);
add_embedded_arg("x1", ID_TYPE_NUM);
add_embedded_arg("y1", ID_TYPE_NUM);
add_embedded_arg("z1", ID_TYPE_NUM);
add_embedded_arg("x2", ID_TYPE_NUM);
add_embedded_arg("y2", ID_TYPE_NUM);
add_embedded_arg("z2", ID_TYPE_NUM);
add_embedded_arg("x3", ID_TYPE_NUM);
add_embedded_arg("y3", ID_TYPE_NUM);
add_embedded_arg("z3", ID_TYPE_NUM);
embed_function("LoadImage", ID_TYPE_FN_NUM);
add_embedded_arg("img$", ID_TYPE_STR);
embed_function("LoadImageEx", ID_TYPE_FN_NUM);

View File

@@ -378,6 +378,33 @@ N main.RGBA b 2
N main.RGBA a 3
N main.Pset x 0
N main.Pset y 1
N main.Triangle x1 0
N main.Triangle y1 1
N main.Triangle x2 2
N main.Triangle y2 3
N main.Triangle x3 4
N main.Triangle y3 5
N main.Line3D x1 0
N main.Line3D y1 1
N main.Line3D z1 2
N main.Line3D x2 3
N main.Line3D y2 4
N main.Line3D z2 5
N main.Box3D min_x 0
N main.Box3D min_y 1
N main.Box3D min_z 2
N main.Box3D max_x 3
N main.Box3D max_y 4
N main.Box3D max_z 5
N main.Triangle3D x1 0
N main.Triangle3D y1 1
N main.Triangle3D z1 2
N main.Triangle3D x2 3
N main.Triangle3D y2 4
N main.Triangle3D z2 5
N main.Triangle3D x3 6
N main.Triangle3D y3 7
N main.Triangle3D z3 8
S main.LoadImage img$ 0
S main.LoadImageEx img$ 0
N main.LoadImageEx colkey 0

Binary file not shown.

View File

@@ -573,6 +573,37 @@ add_embedded_arg("a", ID_TYPE_NUM);
embed_function("Pset", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
embed_function("Triangle", ID_TYPE_SUB);
add_embedded_arg("x1", ID_TYPE_NUM);
add_embedded_arg("y1", ID_TYPE_NUM);
add_embedded_arg("x2", ID_TYPE_NUM);
add_embedded_arg("y2", ID_TYPE_NUM);
add_embedded_arg("x3", ID_TYPE_NUM);
add_embedded_arg("y3", ID_TYPE_NUM);
embed_function("Line3D", ID_TYPE_SUB);
add_embedded_arg("x1", ID_TYPE_NUM);
add_embedded_arg("y1", ID_TYPE_NUM);
add_embedded_arg("z1", ID_TYPE_NUM);
add_embedded_arg("x2", ID_TYPE_NUM);
add_embedded_arg("y2", ID_TYPE_NUM);
add_embedded_arg("z2", ID_TYPE_NUM);
embed_function("Box3D", ID_TYPE_SUB);
add_embedded_arg("min_x", ID_TYPE_NUM);
add_embedded_arg("min_y", ID_TYPE_NUM);
add_embedded_arg("min_z", ID_TYPE_NUM);
add_embedded_arg("max_x", ID_TYPE_NUM);
add_embedded_arg("max_y", ID_TYPE_NUM);
add_embedded_arg("max_z", ID_TYPE_NUM);
embed_function("Triangle3D", ID_TYPE_SUB);
add_embedded_arg("x1", ID_TYPE_NUM);
add_embedded_arg("y1", ID_TYPE_NUM);
add_embedded_arg("z1", ID_TYPE_NUM);
add_embedded_arg("x2", ID_TYPE_NUM);
add_embedded_arg("y2", ID_TYPE_NUM);
add_embedded_arg("z2", ID_TYPE_NUM);
add_embedded_arg("x3", ID_TYPE_NUM);
add_embedded_arg("y3", ID_TYPE_NUM);
add_embedded_arg("z3", ID_TYPE_NUM);
embed_function("LoadImage", ID_TYPE_FN_NUM);
add_embedded_arg("img$", ID_TYPE_STR);
embed_function("LoadImageEx", ID_TYPE_FN_NUM);

File diff suppressed because it is too large Load Diff

View File

@@ -658,6 +658,18 @@ case FN_RGBA: //Number Function
case FN_Pset: //Sub Procedure
rc_drawPixel( PSET_X, PSET_Y );
break;
case FN_Triangle: //Sub Procedure
rc_drawTriangle( TRIANGLE_X1, TRIANGLE_Y1, TRIANGLE_X2, TRIANGLE_Y2, TRIANGLE_X3, TRIANGLE_Y3 );
break;
case FN_Line3D: //Sub Procedure
rc_drawLine3D( LINE3D_X1, LINE3D_Y1, LINE3D_Z1, LINE3D_X2, LINE3D_Y2, LINE3D_Z2 );
break;
case FN_Box3D: //Sub Procedure
rc_drawBox3D( BOX3D_MIN_X, BOX3D_MIN_Y, BOX3D_MIN_Z, BOX3D_MAX_X, BOX3D_MAX_Y, BOX3D_MAX_Z );
break;
case FN_Triangle3D: //Sub Procedure
rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 );
break;
case FN_LoadImage: //Number Function
rc_push_num(rc_loadImage( LOADIMAGE_IMG$ ));
break;

File diff suppressed because it is too large Load Diff

View File

@@ -658,6 +658,18 @@ case FN_RGBA: //Number Function
case FN_Pset: //Sub Procedure
rc_drawPixel( PSET_X, PSET_Y );
break;
case FN_Triangle: //Sub Procedure
rc_drawTriangle( TRIANGLE_X1, TRIANGLE_Y1, TRIANGLE_X2, TRIANGLE_Y2, TRIANGLE_X3, TRIANGLE_Y3 );
break;
case FN_Line3D: //Sub Procedure
rc_drawLine3D( LINE3D_X1, LINE3D_Y1, LINE3D_Z1, LINE3D_X2, LINE3D_Y2, LINE3D_Z2 );
break;
case FN_Box3D: //Sub Procedure
rc_drawBox3D( BOX3D_MIN_X, BOX3D_MIN_Y, BOX3D_MIN_Z, BOX3D_MAX_X, BOX3D_MAX_Y, BOX3D_MAX_Z );
break;
case FN_Triangle3D: //Sub Procedure
rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 );
break;
case FN_LoadImage: //Number Function
rc_push_num(rc_loadImage( LOADIMAGE_IMG$ ));
break;

View File

@@ -1594,6 +1594,46 @@ void rc_drawLine(int x1, int y1, int x2, int y2)
VideoDriver->draw2DLine(r_pos_start, r_pos_end, rc_active_color);
}
void rc_drawLine3D(double x1, double y1, double z1, double x2, double y2, double z2)
{
irr::core::vector3d<f32> r_pos_start(x1,y1,z1);
irr::core::vector3d<f32> r_pos_end(x2,y2,z2);
VideoDriver->draw3DLine(r_pos_start, r_pos_end, rc_active_color);
}
void rc_drawBox3D(double x1, double y1, double z1, double x2, double y2, double z2)
{
irr::core::aabbox3d<f32> bbox(x1, y1, z1, x2, y2, z2);
VideoDriver->draw3DBox(bbox, rc_active_color);
}
void rc_drawTriangle3D(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)
{
irr::core::vector3d<f32> v1(x1,y1,z1);
irr::core::vector3d<f32> v2(x2,y2,z2);
irr::core::vector3d<f32> v3(x3,y3,z3);
irr::core::triangle3d<f32> tri(v1, v2, v3);
VideoDriver->draw3DTriangle(tri, rc_active_color);
}
void rc_drawTriangle(double x1, double y1, double x2, double y2, double x3, double y3)
{
irr::core::array<irr::video::S3DVertex> v;
v.push_back(video::S3DVertex(x1, y1, 0.f, 0.f, 1.f, 0.f, rc_active_color, 0.5f, 0.5f));
v.push_back(video::S3DVertex(x2, y2, 0.f, 0.f, 1.f, 0.f, rc_active_color, 0.5f, 0.5f));
v.push_back(video::S3DVertex(x3, y3, 0.f, 0.f, 1.f, 0.f, rc_active_color, 0.5f, 0.5f));
irr::core::array<irr::u16> i;
i.push_back(0);
i.push_back(1);
i.push_back(2);
VideoDriver->draw2DVertexPrimitiveList(v.pointer(), 3, i.pointer(), 1);
}
void rc_poly(Uint32 n, double* vx_d, double* vy_d)
{
if(n <= 0)

View File

@@ -36,7 +36,7 @@
1734280140 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
<TargetConditionals.h>
1734207007 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1734309571 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
"rc_os_defines.h"
@@ -1248,7 +1248,7 @@
1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h
<irrlicht.h>
1734280525 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
1734309744 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
"SDL.h"
<SDL2/SDL.h>
<irrlicht.h>
@@ -2243,7 +2243,7 @@
<SDL2/SDL.h>
<SDL2/SDL_mixer.h>
1734288894 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_net.h
1734293958 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_net.h
"rc_os_defines.h"
<android/log.h>
"SDL.h"
@@ -2275,7 +2275,7 @@
"rc_gfx_core.h"
<irrtheora.h>
1734207007 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1734309571 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1724469097 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
"irrBullet.h"