//---------------------------------------------------------- void ofGLRenderer::popView() { matrixStack.popView(); ofMatrix4x4 m; ofMatrixMode currentMode = matrixStack.getCurrentMatrixMode(); matrixMode(OF_MATRIX_PROJECTION); loadMatrix(matrixStack.getProjectionMatrix()); matrixMode(OF_MATRIX_MODELVIEW); loadMatrix(matrixStack.getModelViewMatrix()); matrixMode(currentMode); viewport(matrixStack.getCurrentViewport()); }
void ofMatrixStack::pushView(){ viewportHistory.push(currentViewport); ofMatrixMode currentMode = currentMatrixMode; matrixMode(OF_MATRIX_PROJECTION); pushMatrix(); matrixMode(OF_MATRIX_MODELVIEW); pushMatrix(); matrixMode(currentMode); viewMatrixStack.push(viewMatrix); orientationStack.push(make_pair(orientation,vFlipped)); }
//---------------------------------------------------------- void ofGLRenderer::setupScreenOrtho(float width, float height, float nearDist, float farDist) { ofRectangle currentViewport = getCurrentViewport(); float viewW = currentViewport.width; float viewH = currentViewport.height; ofMatrix4x4 ortho; ortho = ofMatrix4x4::newOrthoMatrix(0, viewW, 0, viewH, nearDist, farDist); matrixMode(OF_MATRIX_PROJECTION); loadMatrix(ortho); // make ortho our new projection matrix. matrixMode(OF_MATRIX_MODELVIEW); loadIdentityMatrix(); }
void ofMatrixStack::popView(){ pair<ofOrientation,bool> orientationFlip = orientationStack.top(); setOrientation(orientationFlip.first,orientationFlip.second); orientationStack.pop(); if( viewportHistory.size() ){ currentViewport = viewportHistory.top(); viewportHistory.pop(); } ofMatrixMode currentMode = currentMatrixMode; matrixMode(OF_MATRIX_PROJECTION); popMatrix(); matrixMode(OF_MATRIX_MODELVIEW); popMatrix(); matrixMode(currentMode); }
//---------------------------------------------------------- void ofGLRenderer::setCurrentFBO(ofFbo * fbo){ if(fbo!=NULL){ ofMatrix4x4 m; glGetFloatv(GL_PROJECTION_MATRIX,m.getPtr()); m = m*matrixStack.getOrientationMatrixInverse(); ofMatrixMode currentMode = matrixStack.getCurrentMatrixMode(); matrixStack.matrixMode(OF_MATRIX_PROJECTION); matrixStack.loadMatrix(m.getPtr()); matrixStack.setRenderSurface(*fbo); glMatrixMode(GL_PROJECTION); glLoadMatrixf(matrixStack.getProjectionMatrix().getPtr()); matrixMode(currentMode); }else{ matrixStack.setRenderSurface(*ofGetWindowPtr()); } }
void ofxSosoRenderer::setupScreen() { float eyeX = width / 2; float eyeY = height / 2; float halfFov = PI * fov / 360; float theTan = tanf(halfFov); float dist = eyeY / theTan; float aspect = (float) width / height; if(nearDist == 0) nearDist = dist / 10.0f; if(farDist == 0) farDist = dist * 10.0f; // Load the projection matrix. matrixMode(OF_MATRIX_PROJECTION); loadMatrix( projectionMatrix ); // ModelView LookAt calculations are now multiplied into default scene root matrix in ofxScene. }