Added new vector math functions

This commit is contained in:
n00b87
2026-02-22 23:07:53 -06:00
parent c4d559f0d4
commit 902f0129f1
16 changed files with 2782 additions and 2270 deletions

View File

@@ -156,7 +156,8 @@ void CProjectiveTextures::render()
{
projMat.MaterialType = (irr::video::E_MATERIAL_TYPE)projTex;
projMat.TextureLayer[0].Texture = texture;
// projMat.TextureLayer[0].TextureWrap = ETC_CLAMP_TO_BORDER;
projMat.TextureLayer[0].TextureWrapU = irr::video::ETC_CLAMP_TO_BORDER;
projMat.TextureLayer[0].TextureWrapV = irr::video::ETC_CLAMP_TO_BORDER;
pVideo->setTransform(irr::video::ETS_WORLD,nodeArray[i]->getAbsoluteTransformation());
pVideo->setMaterial(projMat);

View File

@@ -51,6 +51,7 @@
#include "rc_gfx.h"
#include "rc_gfx3D.h"
#include "rc_matrix.h"
#include "rc_vectorMath.h"
#include "rc_geometry.h"
#include "rc_audio.h"
#include "rc_net.h"

View File

@@ -2841,6 +2841,39 @@ void rc_setTerrainPatchLOD(int actor, int patchX, int patchZ, int lod)
}
//BILLBOARDS
void rc_setBillboardSize(int actor, double w, double h)
{
if(actor < 0 || actor >= rc_actor.size())
return;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_BILLBOARD:
irr::scene::IBillboardSceneNode* node = (irr::scene::IBillboardSceneNode*) rc_actor[actor].mesh_node;
node->setSize(irr::core::dimension2df(w, h));
break;
}
}
void rc_getBillboardSize(int actor, double* w, double* h)
{
if(actor < 0 || actor >= rc_actor.size())
return;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_BILLBOARD:
irr::scene::IBillboardSceneNode* node = (irr::scene::IBillboardSceneNode*) rc_actor[actor].mesh_node;
*w = node->getSize().Width;
*h = node->getSize().Height;
break;
}
}
//PROJECTORS
void rc_setProjectorTarget(int actor, double x, double y, double z)
{
if(actor < 0 || actor >= rc_actor.size())

File diff suppressed because it is too large Load Diff

View File

@@ -190,6 +190,30 @@ case FN_GetCircleLineIntersection: //Number Function
case FN_GetLinePlaneIntersection: //Number Function
rc_push_num(GetLinePlaneIntersection( &GETLINEPLANEINTERSECTION_LINE_POINT, &GETLINEPLANEINTERSECTION_LINE_DIRECTION, &GETLINEPLANEINTERSECTION_PLANE_POINT_1, &GETLINEPLANEINTERSECTION_PLANE_POINT_2, &GETLINEPLANEINTERSECTION_PLANE_POINT_3, &GETLINEPLANEINTERSECTION_INTERSECTION ));
break;
case FN_GetLineAngle: //Number Function
rc_push_num(rc_getLineAngle( GETLINEANGLE_X1, GETLINEANGLE_Y1, GETLINEANGLE_X2, GETLINEANGLE_Y2 ));
break;
case FN_DotProduct: //Number Function
rc_push_num(rc_dotProduct( DOTPRODUCT_X1, DOTPRODUCT_Y1, DOTPRODUCT_Z1, DOTPRODUCT_X2, DOTPRODUCT_Y2, DOTPRODUCT_Z2 ));
break;
case FN_InterpolateVector: //Sub Procedure
rc_interpolateVector( INTERPOLATEVECTOR_X1, INTERPOLATEVECTOR_Y1, INTERPOLATEVECTOR_Z1, INTERPOLATEVECTOR_X2, INTERPOLATEVECTOR_Y2, INTERPOLATEVECTOR_Z2, INTERPOLATEVECTOR_DISTANCE, &INTERPOLATEVECTOR_IX, &INTERPOLATEVECTOR_IY, &INTERPOLATEVECTOR_IZ );
break;
case FN_InterpolateVectorQ: //Sub Procedure
rc_interpolateVectorQ( INTERPOLATEVECTORQ_X1, INTERPOLATEVECTORQ_Y1, INTERPOLATEVECTORQ_Z1, INTERPOLATEVECTORQ_X2, INTERPOLATEVECTORQ_Y2, INTERPOLATEVECTORQ_Z2, INTERPOLATEVECTORQ_X3, INTERPOLATEVECTORQ_Y3, INTERPOLATEVECTORQ_Z3, INTERPOLATEVECTORQ_DISTANCE, &INTERPOLATEVECTORQ_IX, &INTERPOLATEVECTORQ_IY, &INTERPOLATEVECTORQ_IZ );
break;
case FN_VectorIsBetweenPoints: //Number Function
rc_push_num(rc_vectorIsBetweenPoints( VECTORISBETWEENPOINTS_X, VECTORISBETWEENPOINTS_Y, VECTORISBETWEENPOINTS_Z, VECTORISBETWEENPOINTS_START_X, VECTORISBETWEENPOINTS_START_Y, VECTORISBETWEENPOINTS_START_Z, VECTORISBETWEENPOINTS_END_X, VECTORISBETWEENPOINTS_END_Y, VECTORISBETWEENPOINTS_END_Z ));
break;
case FN_NormalizeVector: //Sub Procedure
rc_normalizeVector( NORMALIZEVECTOR_X, NORMALIZEVECTOR_Y, NORMALIZEVECTOR_Z, &NORMALIZEVECTOR_NX, &NORMALIZEVECTOR_NY, &NORMALIZEVECTOR_NZ );
break;
case FN_GetHorizontalAngle: //Sub Procedure
rc_getHorizontalAngle( GETHORIZONTALANGLE_X, GETHORIZONTALANGLE_Y, GETHORIZONTALANGLE_Z, &GETHORIZONTALANGLE_HX, &GETHORIZONTALANGLE_HY, &GETHORIZONTALANGLE_HZ );
break;
case FN_GetRotationToTarget: //Sub Procedure
rc_getRotationToTarget( GETROTATIONTOTARGET_X, GETROTATIONTOTARGET_Y, GETROTATIONTOTARGET_Z, GETROTATIONTOTARGET_TGT_X, GETROTATIONTOTARGET_TGT_Y, GETROTATIONTOTARGET_TGT_Z, &GETROTATIONTOTARGET_RX, &GETROTATIONTOTARGET_RY, &GETROTATIONTOTARGET_RZ );
break;
case FN_Asc: //Number Function
rc_push_num(rc_intern_asc( ASC_C$ ));
break;
@@ -2966,6 +2990,12 @@ case FN_SetPhysics3D: //Sub Procedure
case FN_GetPhysics3D: //Number Function
rc_push_num(rc_getPhysics3D( ));
break;
case FN_GetBillboardSize: //Sub Procedure
rc_getBillboardSize( GETBILLBOARDSIZE_ACTOR, &GETBILLBOARDSIZE_W, &GETBILLBOARDSIZE_H );
break;
case FN_SetBillboardSize: //Sub Procedure
rc_setBillboardSize( SETBILLBOARDSIZE_ACTOR, SETBILLBOARDSIZE_W, SETBILLBOARDSIZE_H );
break;
case FN_startParticleEmitter: //Sub Procedure
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR );
break;

View File

@@ -0,0 +1,76 @@
#ifndef RC_VECTORMATH_H_INCLUDED
#define RC_VECTORMATH_H_INCLUDED
#include <irrlicht.h>
double rc_getLineAngle(double x1, double y1, double x2, double y2)
{
irr::core::vector2df v(x1, y1);
double angle = (double)v.getAngleWith(irr::core::vector2df(x2, y2));
return angle;
}
double rc_dotProduct(double x1, double y1, double z1, double x2, double y2, double z2)
{
irr::core::vector3df v(x1, y1, z1);
double dp = (double)v.dotProduct(irr::core::vector3df(x2, y2, z2));
return dp;
}
void rc_interpolateVector(double x1, double y1, double z1, double x2, double y2, double z2, double distance, double* ix, double* iy, double* iz)
{
irr::core::vector3df v(x1, y1, z1);
irr::core::vector3df iv = v.getInterpolated(irr::core::vector3df(x2, y2, z2), distance);
*ix = iv.X;
*iy = iv.Y;
*iz = iv.Z;
}
void rc_interpolateVectorQ(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, double distance, double* ix, double* iy, double* iz)
{
irr::core::vector3df v(x1, y1, z1);
irr::core::vector3df iv = v.getInterpolated_quadratic(irr::core::vector3df(x2, y2, z2), irr::core::vector3df(x3, y3, z3), distance);
*ix = iv.X;
*iy = iv.Y;
*iz = iv.Z;
}
bool rc_vectorIsBetweenPoints (double x, double y, double z, double start_x, double start_y, double start_z, double end_x, double end_y, double end_z)
{
return irr::core::vector3df(x, y, z).isBetweenPoints(irr::core::vector3df(start_x, start_y, start_z), irr::core::vector3df(end_x, end_y, end_z));
}
void rc_normalizeVector(double x, double y, double z, double* nx, double* ny, double* nz)
{
irr::core::vector3df v(x, y, z);
irr::core::vector3df nv = v.normalize();
*nx = nv.X;
*ny = nv.Y;
*nz = nv.Z;
}
void rc_getHorizontalAngle(double x, double y, double z, double* hx, double* hy, double* hz)
{
irr::core::vector3df angle(x, y, z);
irr::core::vector3df h_angle = angle.getHorizontalAngle();
*hx = h_angle.X;
*hy = h_angle.Y;
*hz = h_angle.Z;
}
void rc_getRotationToTarget(double x, double y, double z, double tgt_x, double tgt_y, double tgt_z, double* rx, double* ry, double* rz)
{
irr::core::vector3df v(x, y, z);
irr::core::vector3df rot = v.rotationToDirection(irr::core::vector3df(tgt_x, tgt_y, tgt_z));
*rx = rot.X;
*ry = rot.Y;
*rz = rot.Z;
}
#endif // RC_VECTORMATH_H_INCLUDED

View File

@@ -1,5 +1,5 @@
# depslib dependency file v1.0
1771642154 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
1771816782 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
"rc_os_defines.h"
<emscripten.h>
<sys/param.h>
@@ -23,6 +23,7 @@
"rc_gfx.h"
"rc_gfx3D.h"
"rc_matrix.h"
"rc_vectorMath.h"
"rc_geometry.h"
"rc_audio.h"
"rc_net.h"
@@ -34,10 +35,10 @@
<irrtheora.h>
"rc_func130_cases.h"
1771296059 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
1771823013 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
<TargetConditionals.h>
1771750699 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1771822804 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
"rc_os_defines.h"
@@ -1275,7 +1276,7 @@
"rc_post_fx.h"
<irrtheora.h>
1771745708 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
1771813730 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
"SDL.h"
"btBulletDynamicsCommon.h"
"BulletSoftBody/btSoftRigidDynamicsWorld.h"
@@ -2281,7 +2282,7 @@
"rc_gfx_core.h"
<irrtheora.h>
1771750699 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1771822804 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1760243468 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
"irrBullet.h"
@@ -2533,7 +2534,7 @@
1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h
"rc_gfx_core.h"
1771748492 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
1771808408 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
"ProjectiveTextures.h"
"rc_matrix.h"
@@ -2591,7 +2592,7 @@
1771743310 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.h
<irrlicht.h>
1771745563 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.cpp
1771813624 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.cpp
"ProjectiveTextures.h"
<string>
@@ -2771,3 +2772,6 @@
"btBulletCollisionCommon.h"
"irrBulletCompoundShape.h"
1771822932 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_vectorMath.h
<irrlicht.h>