diff --git a/rcbasic_runtime/main.cpp b/rcbasic_runtime/main.cpp index d3c69a9..5ec8d0a 100755 --- a/rcbasic_runtime/main.cpp +++ b/rcbasic_runtime/main.cpp @@ -4448,7 +4448,7 @@ int main(int argc, char * argv[]) if(debug_opt.compare("a")==0) { //rc_intern_dirChange("/home/n00b/Music/rcbasic_v400_linux64/examples/tile_demo"); - rc_intern_dirChange("/home/n00b/Music/RCBasic_v400_Linux64/examples/RC3/gfx/beast_demo/"); + rc_intern_dirChange(""); rc_filename = "main.cbc"; } else diff --git a/rcbasic_runtime/rc_gfx.h b/rcbasic_runtime/rc_gfx.h index ceb7e66..9b5ad2f 100644 --- a/rcbasic_runtime/rc_gfx.h +++ b/rcbasic_runtime/rc_gfx.h @@ -1594,7 +1594,7 @@ 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) +void prim3d_drawLine3D(double x1, double y1, double z1, double x2, double y2, double z2) { irr::core::vector3d r_pos_start(x1,y1,z1); irr::core::vector3d r_pos_end(x2,y2,z2); @@ -1602,13 +1602,13 @@ void rc_drawLine3D(double x1, double y1, double z1, double x2, double y2, double 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) +void prim3d_drawBox3D(double x1, double y1, double z1, double x2, double y2, double z2) { irr::core::aabbox3d 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) +void prim3d_drawTriangle3D(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3) { irr::core::vector3d v1(x1,y1,z1); irr::core::vector3d v2(x2,y2,z2); @@ -1619,6 +1619,51 @@ void rc_drawTriangle3D(double x1, double y1, double z1, double x2, double y2, do VideoDriver->draw3DTriangle(tri, rc_active_color); } +void rc_drawLine3D(double x1, double y1, double z1, double x2, double y2, double z2) +{ + rc_prim3d_op_obj op; + op.prim_type = PRIM3D_LINE; + op.color = rc_active_color; + op.x[0] = x1; + op.y[0] = y1; + op.z[0] = z1; + op.x[1] = x2; + op.y[1] = y2; + op.z[1] = z2; + rc_prim3d_operation.push_back(op); +} + +void rc_drawBox3D(double x1, double y1, double z1, double x2, double y2, double z2) +{ + rc_prim3d_op_obj op; + op.prim_type = PRIM3D_BOX; + op.color = rc_active_color; + op.x[0] = x1; + op.y[0] = y1; + op.z[0] = z1; + op.x[1] = x2; + op.y[1] = y2; + op.z[1] = z2; + rc_prim3d_operation.push_back(op); +} + +void rc_drawTriangle3D(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3) +{ + rc_prim3d_op_obj op; + op.prim_type = PRIM3D_TRIANGLE; + op.color = rc_active_color; + op.x[0] = x1; + op.y[0] = y1; + op.z[0] = z1; + op.x[1] = x2; + op.y[1] = y2; + op.z[1] = z2; + op.x[2] = x3; + op.y[2] = y3; + op.z[2] = z3; + rc_prim3d_operation.push_back(op); +} + void rc_drawTriangle(double x1, double y1, double x2, double y2, double x3, double y3) { irr::core::array v; diff --git a/rcbasic_runtime/rc_gfx_core.h b/rcbasic_runtime/rc_gfx_core.h index e45528a..b9e73f7 100644 --- a/rcbasic_runtime/rc_gfx_core.h +++ b/rcbasic_runtime/rc_gfx_core.h @@ -746,6 +746,19 @@ irr::core::array rc_image; irr::video::E_BLEND_OPERATION rc_blend_mode = irr::video::EBO_ADD; bool rc_bilinear_filter = false; +#define PRIM3D_LINE 1 +#define PRIM3D_TRIANGLE 2 +#define PRIM3D_BOX 3 + +struct rc_prim3d_op_obj +{ + int prim_type; + + double x[4], y[4], z[4]; + irr::video::SColor color; +}; + +irr::core::array rc_prim3d_operation; void rc_setDriverMaterial() { diff --git a/rcbasic_runtime/rc_windowclose.h b/rcbasic_runtime/rc_windowclose.h index 3a564d9..8dfcedd 100644 --- a/rcbasic_runtime/rc_windowclose.h +++ b/rcbasic_runtime/rc_windowclose.h @@ -502,6 +502,35 @@ bool rc_update() //irr::core::rect viewport(irr::core::position, rc_canvas[i].viewport.dimension); //VideoDriver->setViewPort(viewport); + irr::video::SColor current_color = rc_active_color; + irr::video::SMaterial m; + m.Lighting=false; + VideoDriver->setMaterial(m); + VideoDriver->setTransform(video::ETS_WORLD, core::matrix4()); + for(int i = 0; i < rc_prim3d_operation.size(); i++) + { + switch(rc_prim3d_operation[i].prim_type) + { + case PRIM3D_LINE: + rc_active_color = rc_prim3d_operation[i].color; + prim3d_drawLine3D(rc_prim3d_operation[i].x[0], rc_prim3d_operation[i].y[0], rc_prim3d_operation[i].z[0], + rc_prim3d_operation[i].x[1], rc_prim3d_operation[i].y[1], rc_prim3d_operation[i].z[1]); + break; + case PRIM3D_BOX: + rc_active_color = rc_prim3d_operation[i].color; + prim3d_drawBox3D(rc_prim3d_operation[i].x[0], rc_prim3d_operation[i].y[0], rc_prim3d_operation[i].z[0], + rc_prim3d_operation[i].x[1], rc_prim3d_operation[i].y[1], rc_prim3d_operation[i].z[1]); + break; + case PRIM3D_TRIANGLE: + rc_active_color = rc_prim3d_operation[i].color; + prim3d_drawTriangle3D(rc_prim3d_operation[i].x[0], rc_prim3d_operation[i].y[0], rc_prim3d_operation[i].z[0], + rc_prim3d_operation[i].x[1], rc_prim3d_operation[i].y[1], rc_prim3d_operation[i].z[1], + rc_prim3d_operation[i].x[2], rc_prim3d_operation[i].y[2], rc_prim3d_operation[i].z[2]); + break; + } + } + rc_active_color = current_color; + rc_setDriverMaterial(); SceneManager->drawAll(); //VideoDriver->draw2DRectangle(irr::video::SColor(255,0,255,0), irr::core::rect(10,40,100,500)); @@ -516,7 +545,7 @@ bool rc_update() } } - + rc_prim3d_operation.clear(); for(int cz = 0; cz < rc_canvas_zOrder.size(); cz++) { diff --git a/rcbasic_runtime/rcbasic_runtime.depend b/rcbasic_runtime/rcbasic_runtime.depend index cfa46e6..4259e23 100755 --- a/rcbasic_runtime/rcbasic_runtime.depend +++ b/rcbasic_runtime/rcbasic_runtime.depend @@ -1,5 +1,5 @@ # depslib dependency file v1.0 -1734280140 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp +1734311733 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp "rc_os_defines.h" @@ -33,7 +33,7 @@ "rc_func130_cases.h" -1734280140 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h +1734311733 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h 1734309571 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h @@ -1248,7 +1248,7 @@ 1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h -1734309744 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h +1734312754 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h "SDL.h" @@ -1272,7 +1272,7 @@ "rc_joints.h" -1734192650 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h +1734313369 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h "SDL.h" "btBulletDynamicsCommon.h" "BulletSoftBody/btSoftRigidDynamicsWorld.h" @@ -2539,7 +2539,7 @@ 1731249956 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h -1734285254 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h +1734313936 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h 1608686973 /usr/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h "BulletCollision/CollisionShapes/btTriangleCallback.h"