Fixed 3D primitive material setting

This commit is contained in:
n00b
2024-12-15 20:56:19 -05:00
parent 98e8257e4a
commit 7181b6924a
5 changed files with 97 additions and 10 deletions

View File

@@ -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

View File

@@ -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<f32> r_pos_start(x1,y1,z1);
irr::core::vector3d<f32> 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<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)
void prim3d_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);
@@ -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<irr::video::S3DVertex> v;

View File

@@ -746,6 +746,19 @@ irr::core::array<rc_image_obj> 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_op_obj> rc_prim3d_operation;
void rc_setDriverMaterial()
{

View File

@@ -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<irr::s32>(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++)
{

View File

@@ -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"
<emscripten.h>
<sys/param.h>
@@ -33,7 +33,7 @@
<irrtheora.h>
"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
<TargetConditionals.h>
1734309571 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
@@ -1248,7 +1248,7 @@
1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h
<irrlicht.h>
1734309744 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
1734312754 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
"SDL.h"
<SDL2/SDL.h>
<irrlicht.h>
@@ -1272,7 +1272,7 @@
"rc_joints.h"
<irrtheora.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"