//---------------------------------------- ofVec3f ofCamera::cameraToWorld(ofVec3f CameraXYZ, ofRectangle viewport) const { ofMatrix4x4 inverseCamera; inverseCamera.makeInvertOf(getModelViewProjectionMatrix(viewport)); return CameraXYZ * inverseCamera; }
void rSimpleMesh::updateUniforms() { if ( !vPipeline || !vShader ) { eLOG( "Pipeline / shader not setup!" ); return; } if ( vHasMVPMatrix ) vShader->updateUniform( vMatrixMVPVar, getModelViewProjectionMatrix()->getMatrix() ); }
//---------------------------------------- ofVec3f ofCamera::worldToScreen(ofVec3f WorldXYZ, ofRectangle viewport) const { ofVec3f CameraXYZ = WorldXYZ * getModelViewProjectionMatrix(viewport); ofVec3f ScreenXYZ; ScreenXYZ.x = (CameraXYZ.x + 1.0f) / 2.0f * viewport.width + viewport.x; ScreenXYZ.y = (1.0f - CameraXYZ.y) / 2.0f * viewport.height + viewport.y; ScreenXYZ.z = CameraXYZ.z; return ScreenXYZ; }
//---------------------------------------- ofVec3f ofCamera::screenToWorld(ofVec3f ScreenXYZ, ofRectangle viewport) const { //convert from screen to camera ofVec3f CameraXYZ; CameraXYZ.x = 2.0f * (ScreenXYZ.x - viewport.x) / viewport.width - 1.0f; CameraXYZ.y = 1.0f - 2.0f *(ScreenXYZ.y - viewport.y) / viewport.height; CameraXYZ.z = ScreenXYZ.z; //get inverse camera matrix ofMatrix4x4 inverseCamera; inverseCamera.makeInvertOf(getModelViewProjectionMatrix(viewport)); //convert camera to world return CameraXYZ * inverseCamera; }
uint32_t rSimpleMesh::getMatrix( rMat4f **_mat, rObjectBase::MATRIX_TYPES _type ) { switch ( _type ) { case SCALE: *_mat = getScaleMatrix(); return 0; case ROTATION: *_mat = getRotationMatrix(); return 0; case TRANSLATION: *_mat = getTranslationMatrix(); return 0; case CAMERA_MATRIX: *_mat = getViewProjectionMatrix(); return 0; case MODEL_MATRIX: *_mat = getModelMatrix(); return 0; case VIEW_MATRIX: *_mat = getViewMatrix(); return 0; case PROJECTION_MATRIX: *_mat = getProjectionMatrix(); return 0; case MODEL_VIEW_MATRIX: *_mat = getModelViewMatrix(); return 0; case MODEL_VIEW_PROJECTION: *_mat = getModelViewProjectionMatrix(); return 0; case NORMAL_MATRIX: break; } return INDEX_OUT_OF_RANGE; }
//---------------------------------------- ofVec3f ofCamera::worldToCamera(ofVec3f WorldXYZ, ofRectangle viewport) const { return WorldXYZ * getModelViewProjectionMatrix(viewport); }