示例#1
0
    void Renderer::ApplyCamera(const Camera& cam, IContext& c){
        Rect<unsigned int> r = cam.GetRect();
        glViewport(r.x, r.y, r.width, r.height);
        glEnable(GL_SCISSOR_TEST);
        glScissor(r.x, r.y, r.width, r.height);
        CHECK_GL_ERROR();

        Color bg = cam.BackgroundColor();
        glClearColor(bg.Get(0), bg.Get(1), bg.Get(2), bg.Get(3));
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glDisable(GL_SCISSOR_TEST);

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        CHECK_GL_ERROR();
        
        glMultMatrixf(cam.GetProjectionMatrix().GetData());
        CHECK_GL_ERROR();
        
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        // Apply camera transformation
        Matrix<4,4,float> camTrans = cam.GetTransformation()->GetAccumulatedMatrix();
        if (!Invert(camTrans))
            std::cout << "Camera matrix could not be inverted.\n";
        glMultMatrixf(camTrans.GetData());

        glEnable(GL_DEPTH_TEST);
    }