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

@@ -39,6 +39,7 @@ Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor_physics.bas
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/constraint3D.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/camera.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/scene.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/billboard.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/particles.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/lights.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/terrain.bas"

View File

@@ -53,6 +53,14 @@ Distance2D( DISTANCE2D_X1, DISTANCE2D_Y1, DISTANCE2D_X2, DISTANCE2D_Y2 )
Distance3D( DISTANCE3D_X1, DISTANCE3D_Y1, DISTANCE3D_Z1, DISTANCE3D_X2, DISTANCE3D_Y2, DISTANCE3D_Z2 )
GetCircleLineIntersection( GETCIRCLELINEINTERSECTION_CIRCLE_X, GETCIRCLELINEINTERSECTION_CIRCLE_Y, GETCIRCLELINEINTERSECTION_RADIUS, GETCIRCLELINEINTERSECTION_X1, GETCIRCLELINEINTERSECTION_Y1, GETCIRCLELINEINTERSECTION_X2, GETCIRCLELINEINTERSECTION_Y2, &GETCIRCLELINEINTERSECTION_IX1, &GETCIRCLELINEINTERSECTION_IY1, &GETCIRCLELINEINTERSECTION_IX2, &GETCIRCLELINEINTERSECTION_IY2 )
GetLinePlaneIntersection( &GETLINEPLANEINTERSECTION_LINE_POINT, &GETLINEPLANEINTERSECTION_LINE_DIRECTION, &GETLINEPLANEINTERSECTION_PLANE_POINT_1, &GETLINEPLANEINTERSECTION_PLANE_POINT_2, &GETLINEPLANEINTERSECTION_PLANE_POINT_3, &GETLINEPLANEINTERSECTION_INTERSECTION )
rc_getLineAngle( GETLINEANGLE_X1, GETLINEANGLE_Y1, GETLINEANGLE_X2, GETLINEANGLE_Y2 )
rc_dotProduct( DOTPRODUCT_X1, DOTPRODUCT_Y1, DOTPRODUCT_Z1, DOTPRODUCT_X2, DOTPRODUCT_Y2, DOTPRODUCT_Z2 )
rc_interpolateVector( INTERPOLATEVECTOR_X1, INTERPOLATEVECTOR_Y1, INTERPOLATEVECTOR_Z1, INTERPOLATEVECTOR_X2, INTERPOLATEVECTOR_Y2, INTERPOLATEVECTOR_Z2, INTERPOLATEVECTOR_DISTANCE, &INTERPOLATEVECTOR_IX, &INTERPOLATEVECTOR_IY, &INTERPOLATEVECTOR_IZ )
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 )
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 )
rc_normalizeVector( NORMALIZEVECTOR_X, NORMALIZEVECTOR_Y, NORMALIZEVECTOR_Z, &NORMALIZEVECTOR_NX, &NORMALIZEVECTOR_NY, &NORMALIZEVECTOR_NZ )
rc_getHorizontalAngle( GETHORIZONTALANGLE_X, GETHORIZONTALANGLE_Y, GETHORIZONTALANGLE_Z, &GETHORIZONTALANGLE_HX, &GETHORIZONTALANGLE_HY, &GETHORIZONTALANGLE_HZ )
rc_getRotationToTarget( GETROTATIONTOTARGET_X, GETROTATIONTOTARGET_Y, GETROTATIONTOTARGET_Z, GETROTATIONTOTARGET_TGT_X, GETROTATIONTOTARGET_TGT_Y, GETROTATIONTOTARGET_TGT_Z, &GETROTATIONTOTARGET_RX, &GETROTATIONTOTARGET_RY, &GETROTATIONTOTARGET_RZ )
rc_intern_asc( ASC_C$ )
rc_intern_chr( CHR$_N )
rc_intern_insert( INSERT$_SRC$, INSERT$_TGT$, INSERT$_POS )
@@ -978,6 +986,8 @@ rc_pipeline_End( )
rc_pipeline_Render( )
rc_setPhysics3D( SETPHYSICS3D_FLAG )
rc_getPhysics3D( )
rc_getBillboardSize( GETBILLBOARDSIZE_ACTOR, &GETBILLBOARDSIZE_W, &GETBILLBOARDSIZE_H )
rc_setBillboardSize( SETBILLBOARDSIZE_ACTOR, SETBILLBOARDSIZE_W, SETBILLBOARDSIZE_H )
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR )
rc_stopParticleEmitter( STOPPARTICLEEMITTER_ACTOR )
rc_setParticleDirection( SETPARTICLEDIRECTION_ACTOR, SETPARTICLEDIRECTION_X, SETPARTICLEDIRECTION_Y, SETPARTICLEDIRECTION_Z )

View File

@@ -0,0 +1,2 @@
Sub GetBillboardSize(actor, ByRef w, ByRef h)
Sub SetBillboardSize(actor, w, h)

View File

@@ -35,3 +35,11 @@ Function Distance2D(x1, y1, x2, y2)
Function Distance3D(x1, y1, z1, x2, y2, z2)
function GetCircleLineIntersection(circle_x, circle_y, radius, x1, y1, x2, y2, ByRef ix1, ByRef iy1, ByRef ix2, ByRef iy2)
function GetLinePlaneIntersection(ByRef line_point, ByRef line_direction, ByRef plane_point_1, ByRef plane_point_2, ByRef plane_point_3, ByRef intersection)
Function GetLineAngle(x1, y1, x2, y2)
Function DotProduct(x1, y1, z1, x2, y2, z2)
Sub InterpolateVector(x1, y1, z1, x2, y2, z2, distance, ByRef ix, ByRef iy, ByRef iz)
Sub InterpolateVectorQ(x1, y1, z1, x2, y2, z2, x3, y3, z3, distance, ByRef ix, ByRef iy, ByRef iz)
Function VectorIsBetweenPoints(x, y, z, start_x, start_y, start_z, end_x, end_y, end_z)
Sub NormalizeVector(x, y, z, ByRef nx, ByRef ny, ByRef nz)
Sub GetHorizontalAngle(x, y, z, ByRef hx, ByRef hy, ByRef hz)
Sub GetRotationToTarget(x, y, z, tgt_x, tgt_y, tgt_z, ByRef rx, ByRef ry, ByRef rz)

View File

@@ -184,6 +184,77 @@ void init_embedded_functions()
add_embedded_arg("plane_point_2", ID_TYPE_BYREF_NUM);
add_embedded_arg("plane_point_3", ID_TYPE_BYREF_NUM);
add_embedded_arg("intersection", ID_TYPE_BYREF_NUM);
embed_function("GetLineAngle", ID_TYPE_FN_NUM);
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);
embed_function("DotProduct", ID_TYPE_FN_NUM);
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("InterpolateVector", 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("distance", ID_TYPE_NUM);
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
embed_function("InterpolateVectorQ", 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);
add_embedded_arg("distance", ID_TYPE_NUM);
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
embed_function("VectorIsBetweenPoints", ID_TYPE_FN_NUM);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("start_x", ID_TYPE_NUM);
add_embedded_arg("start_y", ID_TYPE_NUM);
add_embedded_arg("start_z", ID_TYPE_NUM);
add_embedded_arg("end_x", ID_TYPE_NUM);
add_embedded_arg("end_y", ID_TYPE_NUM);
add_embedded_arg("end_z", ID_TYPE_NUM);
embed_function("NormalizeVector", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("nx", ID_TYPE_BYREF_NUM);
add_embedded_arg("ny", ID_TYPE_BYREF_NUM);
add_embedded_arg("nz", ID_TYPE_BYREF_NUM);
embed_function("GetHorizontalAngle", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("hx", ID_TYPE_BYREF_NUM);
add_embedded_arg("hy", ID_TYPE_BYREF_NUM);
add_embedded_arg("hz", ID_TYPE_BYREF_NUM);
embed_function("GetRotationToTarget", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("tgt_x", ID_TYPE_NUM);
add_embedded_arg("tgt_y", ID_TYPE_NUM);
add_embedded_arg("tgt_z", ID_TYPE_NUM);
add_embedded_arg("rx", ID_TYPE_BYREF_NUM);
add_embedded_arg("ry", ID_TYPE_BYREF_NUM);
add_embedded_arg("rz", ID_TYPE_BYREF_NUM);
embed_function("Asc", ID_TYPE_FN_NUM);
add_embedded_arg("c$", ID_TYPE_STR);
embed_function("Chr$", ID_TYPE_FN_STR);
@@ -3078,6 +3149,14 @@ void init_embedded_functions()
embed_function("SetPhysics3D", ID_TYPE_SUB);
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("GetPhysics3D", ID_TYPE_FN_NUM);
embed_function("GetBillboardSize", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("w", ID_TYPE_BYREF_NUM);
add_embedded_arg("h", ID_TYPE_BYREF_NUM);
embed_function("SetBillboardSize", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("w", ID_TYPE_NUM);
add_embedded_arg("h", ID_TYPE_NUM);
embed_function("startParticleEmitter", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("stopParticleEmitter", ID_TYPE_SUB);

Binary file not shown.

View File

@@ -178,6 +178,77 @@ add_embedded_arg("plane_point_1", ID_TYPE_BYREF_NUM);
add_embedded_arg("plane_point_2", ID_TYPE_BYREF_NUM);
add_embedded_arg("plane_point_3", ID_TYPE_BYREF_NUM);
add_embedded_arg("intersection", ID_TYPE_BYREF_NUM);
embed_function("GetLineAngle", ID_TYPE_FN_NUM);
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);
embed_function("DotProduct", ID_TYPE_FN_NUM);
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("InterpolateVector", 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("distance", ID_TYPE_NUM);
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
embed_function("InterpolateVectorQ", 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);
add_embedded_arg("distance", ID_TYPE_NUM);
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
embed_function("VectorIsBetweenPoints", ID_TYPE_FN_NUM);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("start_x", ID_TYPE_NUM);
add_embedded_arg("start_y", ID_TYPE_NUM);
add_embedded_arg("start_z", ID_TYPE_NUM);
add_embedded_arg("end_x", ID_TYPE_NUM);
add_embedded_arg("end_y", ID_TYPE_NUM);
add_embedded_arg("end_z", ID_TYPE_NUM);
embed_function("NormalizeVector", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("nx", ID_TYPE_BYREF_NUM);
add_embedded_arg("ny", ID_TYPE_BYREF_NUM);
add_embedded_arg("nz", ID_TYPE_BYREF_NUM);
embed_function("GetHorizontalAngle", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("hx", ID_TYPE_BYREF_NUM);
add_embedded_arg("hy", ID_TYPE_BYREF_NUM);
add_embedded_arg("hz", ID_TYPE_BYREF_NUM);
embed_function("GetRotationToTarget", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("tgt_x", ID_TYPE_NUM);
add_embedded_arg("tgt_y", ID_TYPE_NUM);
add_embedded_arg("tgt_z", ID_TYPE_NUM);
add_embedded_arg("rx", ID_TYPE_BYREF_NUM);
add_embedded_arg("ry", ID_TYPE_BYREF_NUM);
add_embedded_arg("rz", ID_TYPE_BYREF_NUM);
embed_function("Asc", ID_TYPE_FN_NUM);
add_embedded_arg("c$", ID_TYPE_STR);
embed_function("Chr$", ID_TYPE_FN_STR);
@@ -3072,6 +3143,14 @@ embed_function("Pipeline_Render", ID_TYPE_SUB);
embed_function("SetPhysics3D", ID_TYPE_SUB);
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("GetPhysics3D", ID_TYPE_FN_NUM);
embed_function("GetBillboardSize", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("w", ID_TYPE_BYREF_NUM);
add_embedded_arg("h", ID_TYPE_BYREF_NUM);
embed_function("SetBillboardSize", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("w", ID_TYPE_NUM);
add_embedded_arg("h", ID_TYPE_NUM);
embed_function("startParticleEmitter", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("stopParticleEmitter", ID_TYPE_SUB);

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

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