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(); }
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)); }
#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);
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; }