Exemplo n.º 1
0
RAY MOUSE::GetRay()
{
	try
	{
		D3DXMATRIX projectionMatrix, viewMatrix, worldViewInverse, worldMatrix;
		
		m_pDevice->GetTransform(D3DTS_PROJECTION, &projectionMatrix);
		m_pDevice->GetTransform(D3DTS_VIEW, &viewMatrix);
		m_pDevice->GetTransform(D3DTS_WORLD, &worldMatrix);

		float width = (float)(m_viewport.right - m_viewport.left);
		float height = (float)(m_viewport.bottom - m_viewport.top);

		float angle_x = (((2.0f * x) / width) - 1.0f) / projectionMatrix(0,0);
		float angle_y = (((-2.0f * y) / height) + 1.0f) / projectionMatrix(1,1); 
		
		RAY ray;
		ray.org = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
		ray.dir = D3DXVECTOR3(angle_x, angle_y, 1.0f);

		D3DXMATRIX m = worldMatrix * viewMatrix;
		D3DXMatrixInverse(&worldViewInverse, 0, &m);
		D3DXVec3TransformCoord(&ray.org, &ray.org, &worldViewInverse);
		D3DXVec3TransformNormal(&ray.dir, &ray.dir, &worldViewInverse);
		D3DXVec3Normalize(&ray.dir, &ray.dir);

		return ray;
	}
	catch(...)
	{
		debug.Print("Error in MOUSE::GetRay()");
	}

	return RAY();
}
Exemplo n.º 2
0
t_intersectInfo			*cylinder_intersection(t_cylinder *cylinder, t_ray r)
{
	t_intersectInfo *i;
	t_vector		nray_origin;
	t_vector		nray_direction;
	t_cylinder		ncylinder;
	t_ray			nray;

	if (!(i = (t_intersectInfo *)malloc(sizeof(t_intersectInfo))))
		return (NULL);
	nray_origin = SUB(r.origin,
		mult(cylinder->direction, DOT_PROD(r.origin, cylinder->direction)));
	nray_direction = SUB(r.direction, mult(cylinder->direction,
		DOT_PROD(r.direction, cylinder->direction)));
	ncylinder = CYLINDER(SUB(cylinder->origin,
		mult(cylinder->direction,
		DOT_PROD(cylinder->origin, cylinder->direction))),
		cylinder->direction, cylinder->radius, cylinder->color);
	nray = RAY(nray_origin, nray_direction);
	if (!(project_2d_cylinder(&(ncylinder), nray, i)))
		return (NULL);
	return (end_int(cylinder, r, i));
}
Exemplo n.º 3
0
#include "wiLoader.h"



#include "LinearMath/btHashMap.h"
#include "BulletSoftBody/btSoftRigidDynamicsWorld.h"
#include "BulletSoftBody/btSoftBodyHelpers.h"

#include "BulletSoftBody/btSoftBodySolvers.h"
#include "BulletSoftBody/btDefaultSoftBodySolver.h"
#include "BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h"

int PHYSICS::softBodyIterationCount=5;
bool PHYSICS::rigidBodyPhysicsEnabled = true, PHYSICS::softBodyPhysicsEnabled = true;
bool wiBULLET::grab=false;
RAY wiBULLET::grabRay=RAY();

wiBULLET::wiBULLET()
{
	registeredObjects=-1;

	///-----initialization_start-----
	//softBodySolver = new btDefaultSoftBodySolver();
	softBodySolver=NULL;

	///collision configuration contains default setup for memory, collision setup. Advanced users can create their own configuration.
	//collisionConfiguration = new btDefaultCollisionConfiguration();
	collisionConfiguration = new btSoftBodyRigidBodyCollisionConfiguration();

	///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded)
	dispatcher = new	btCollisionDispatcher(collisionConfiguration);
Exemplo n.º 4
0
int check(int clr)
{
	int r, c;

#define ATK(R,C) if (atk(R, C, clr)) return 1;
#define RAY(DR,DC) if (ray(r, c, DR, DC, clr)) return 1;

	/* pawns */
	if (clr == 1) {
		for (r = 1; r <= 7; r++) {
			for (c = 1; c <= 8; c++) {
				if (board[r][c] == 'p') {
					ATK(r + 1, c - 1);
					ATK(r + 1, c + 1);
				}
			}
		}
	} else {
		for (r = 2; r <= 8; r++) {
			for (c = 1; c <= 8; c++) {
				if (board[r][c] == 'P') {
					ATK(r - 1, c - 1);
					ATK(r - 1, c + 1);
				}
			}
		}
	}

	/* rooks */
	for (r = 1; r <= 8; r++) {
		for (c = 1; c <= 8; c++) {
			if (piece[r][c] == 'r' && color[r][c] == clr) {
				RAY(1, 0); RAY(-1, 0); RAY(0, 1); RAY(0, -1);
			}
		}
	}

	/* bishops */
	for (r = 1; r <= 8; r++) {
		for (c = 1; c <= 8; c++) {
			if (piece[r][c] == 'b' && color[r][c] == clr) {
				RAY(1, 1); RAY(1, -1); RAY(-1, 1); RAY(-1, -1);
			}
		}
	}

	/* queens */
	for (r = 1; r <= 8; r++) {
		for (c = 1; c <= 8; c++) {
			if (piece[r][c] == 'q' && color[r][c] == clr) {
				RAY(1, 0); RAY(-1, 0); RAY(0, 1); RAY(0, -1);
				RAY(1, 1); RAY(1, -1); RAY(-1, 1); RAY(-1, -1);
			}
		}
	}

	/* knights */
	for (r = 1; r <= 8; r++) {
		for (c = 1; c <= 8; c++) {
			if (piece[r][c] == 'n' && color[r][c] == clr) {
				ATK(r - 2, c + 1); ATK(r - 2, c - 1);
				ATK(r - 1, c + 2); ATK(r - 1, c - 2);
				ATK(r + 1, c + 2); ATK(r + 1, c - 2);
				ATK(r + 2, c + 1); ATK(r + 2, c - 1);
			}
		}
	}

#undef ATK
#undef RAY

	return 0;
}