void CameraComponent::sendCamInformation( GeneralGlWindow * window ) { glm::vec3 from = glm::vec3(); glm::vec3 to = glm::vec3(1,0,0); glm::vec3 up = glm::vec3(0,1,0); TransformComponent * trans = parent->getComponent<TransformComponent>(); if( trans != nullptr ) { from = glm::vec3( trans->getTransformation() * glm::vec4( from, 1 ) ); to = glm::vec3( trans->getTransformation() * glm::vec4( to, 1 ) ); up = glm::vec3( trans->getRotationMatrix() * glm::vec4( up, 1 ) ); } glm::mat4 camcam = glm::perspective(fov, aspect, camNear, camFar) * glm::lookAt( from, to, up ); window->setUniformParameter( "mvp", GeneralGlWindow::PT_MAT4, (float*)&camcam ); }
void OcculusCameraComponent::startRun( int run ) { //OcculusStuff ovrEyeType eye = hmd->EyeRenderOrder[run]; ovrPosef eyePose = headPoses[ eye ]; OVR::Quatf orientation = OVR::Quatf(eyePose.Orientation); glm::quat orient = fromOVR( orientation ); glm::mat4 orientTransform = glm::mat4_cast( orient ); // * Test code * // Assign quaternion result directly to view (translation is ignored). Graphics * g = parent->getStage()->getGame()->getGraphicsHandle(); g->setFrameBuffer( renderTarget ); g->setViewport( EyeRenderViewport[eye].Pos.x, EyeRenderViewport[eye].Pos.y, EyeRenderViewport[eye].Size.w, EyeRenderViewport[eye].Size.h ); //OVR::Matrix4f view = OVR::Matrix4f(orientation.Inverted()) * OVR::Matrix4f::Translation(-WorldEyePosition); //pRender->SetViewport(); pRender->SetProjection(proj); //pRoomScene->Render(pRender, Matrix4f::Translation(EyeRenderDesc[eye].ViewAdjust) * view); TransformComponent * trans = parent->getComponent<TransformComponent>(); glm::vec3 eyepos = 20.0f*fromOVR(eyePose.Position); //OVR::Vector3f shiftedEyePos = OVR::Vector3f( trans->getTranslation().x, trans->getTranslation().y, trans->getTranslation().z ) + eyePose.Position; glm::vec3 from = glm::vec3(); glm::vec3 to = glm::vec3(0,0,-1); glm::vec3 up = glm::vec3(0,1,0); //TransformComponent * trans = parent->getComponent<TransformComponent>(); if( trans != nullptr ) { from = glm::vec3( trans->getTransformation() * orientTransform * glm::vec4( from, 1 ) ); to = glm::vec3( trans->getTransformation() * orientTransform * glm::vec4( to, 1 ) ); up = glm::vec3( trans->getRotationMatrix() * orientTransform * glm::vec4( up, 1 ) ); } glm::mat4 camcam = glm::perspective(fov, aspect, camNear, camFar) * glm::lookAt( from + eyepos, to + eyepos, up ); Shader::setGlobalUniformParameter( "mvp", ParameterType::PT_MAT4, &camcam ); }
void CameraComponent::startRun( int run ) { run; Graphics * g = parent->getStage()->getGame()->getGraphicsHandle(); g->setViewport( 0, 0, g->getWidth(), g->getHeight() ); glm::vec3 from = glm::vec3(); glm::vec3 to = glm::vec3(0,0,-1); glm::vec3 up = glm::vec3(0,1,0); aspect = float( g->getWidth() )/ g->getHeight(); TransformComponent * trans = parent->getComponent<TransformComponent>(); if( trans != nullptr ) { from = glm::vec3( trans->getTransformation() * glm::vec4( from, 1 ) ); to = glm::vec3( trans->getTransformation() * glm::vec4( to, 1 ) ); up = glm::vec3( trans->getRotationMatrix() * glm::vec4( up, 1 ) ); } //std::cout << "<" << from.x << ", " << from.y << ", " << from.z << "> <" << to.x << ", " << to.y << ", " << to.z << "> <" << up.x << ", " << up.y << ", " << up.z << ">" << std::endl; glm::mat4 camcam = glm::perspective(fov, aspect, camNear, camFar) * glm::lookAt( from, to, up ); Shader::setGlobalUniformParameter( "mvp", ParameterType::PT_MAT4, &camcam ); }