Added new vector math functions
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
76
rcbasic_runtime/rc_vectorMath.h
Normal file
76
rcbasic_runtime/rc_vectorMath.h
Normal 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
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user