void ConstraintVisualizer::RenderInfinitePlane (IVRenderInterface* pRenderer, const hkvVec3& vCenter, const hkvVec3& vOrientation) { VColorRef color(255, 255, 0, 128); VSimpleRenderState_t state(VIS_TRANSP_ALPHA, RENDERSTATEFLAG_FRONTFACE); hkvMat3 mRotation (hkvNoInitialization); mRotation.setFromEulerAngles (vOrientation.z, vOrientation.y, vOrientation.x); hkvVec3 vNormal = mRotation.getAxis(2); hkvPlane plane (hkvNoInitialization); plane.setFromPointAndNormal (vCenter, vNormal); float fSize = 250.0f*EditorManager::Settings->GlobalUnitScaling; pRenderer->RenderPlane(plane, vCenter, fSize, fSize, color, state); }
void Object::rotateRel(const Vector3& vRotation) { Matrix mRotation(Matrix::rotationAxis(m_vXAxis, vRotation.x)); m_vYAxis = Matrix::transformNormal(m_vYAxis, mRotation); m_vZAxis = Vector3::cross(m_vXAxis, m_vYAxis); mRotation = Matrix::rotationAxis(m_vYAxis, vRotation.y); m_vXAxis = Matrix::transformNormal(m_vXAxis, mRotation); m_vZAxis = Vector3::cross(m_vXAxis, m_vYAxis); mRotation = Matrix::rotationAxis(m_vZAxis, vRotation.z); m_vXAxis = Matrix::transformNormal(m_vXAxis, mRotation); m_vYAxis = Matrix::transformNormal(m_vYAxis, mRotation); m_bUpdated=false; }
Matrix3x2 SliceRenderer::calculateFacingRotationMatrix() { assert(_sliceFramePtr); Vector3 viewPos = _view->_sliceViewMatrix * _position; float dir = atan2(viewPos.x, viewPos.z) + _facing; float s = sin(dir); float c = cos(dir); Matrix3x2 mRotation(c, -s, 0.0f, s, c, 0.0f); Matrix3x2 mView(_view->_sliceViewMatrix(0,0), _view->_sliceViewMatrix(0,1), 0.0f, _view->_sliceViewMatrix(2,0), _view->_sliceViewMatrix(2,1), 0.0f); return mView * mRotation; }
/***************************************************************************************************************** Update Player Object ******************************************************************************************************************/ void Player::Update(float dt) { // if dead don't update anything if (!m_alive) return; // get instance of game Application2D* app = Application2D::getInstance(); // reset players rotation m_rotation = 0; // key press checks for player actions //------------------------------------------------- // key left if (app->IsKeyDown(GLFW_KEY_LEFT)) { m_rotation += TURN_LEFT; m_velocity.m_x -= SPEED; } //key right if (app->IsKeyDown(GLFW_KEY_RIGHT)) { m_rotation += TURN_RIGHT; m_velocity.m_x += SPEED; } // key up if (app->IsKeyDown(GLFW_KEY_UP)) { m_velocity.m_y += SPEED; } // key down if (app->IsKeyDown(GLFW_KEY_DOWN)) { m_velocity.m_y += -SPEED; } // toggle debug if (app->IsKeyDown(GLFW_KEY_D)) { if (m_debug) { m_debug = false; } else { m_debug = true; } } // update players spikes m_spike1->Update(dt); m_spike1a->Update(dt); m_spike2->Update(dt); m_spike2a->Update(dt); m_spike3->Update(dt); m_spike3a->Update(dt); m_spike4->Update(dt); m_spike4a->Update(dt); // modify player based on rotation Matrix3 mTranspose(0); mTranspose.CreateTranslation(m_velocity.m_x * dt, m_velocity.m_y * dt, 1.0f); Matrix3 mRotation(0); mRotation.setRotateZ(m_rotation * (M_PI/45)); // rotate player on local axis m_local_transform = mTranspose * m_local_transform * mRotation; // set postion information for edge detection Vector3 position(m_local_transform.m_column3->m_x, m_local_transform.m_column3->m_y, m_local_transform.m_column3->m_z); m_position = position; // check if player has reached the edge of the game zone EdgeDectection(); // set current postion as last position m_prevPos = m_position; }