Question

I'm using OpenGL in C++ Visual Studio 2008 Forms application and I want a GLcontrol to switch between 3D and 2D when a bool is set to true/false.

The drawing in 3D works fine, the drawing in 2D works fine, the problem comes when switching from one to another. So if I start the application drawing in 2D it works perfectly and the same with 3D, but if I change the boolean while running it won't draw anything.

Here is the code where I change from one to another.

if(opciones->draw3D){
    GL::MatrixMode(MatrixMode::Modelview);
    GL::LoadIdentity();
    GL::Viewport(0, 0, w, h);
    Matrix4 lookat = Matrix4::LookAt(100, 100, 100, 0, 0, 0, 0, 0, 1);
    GL::LoadMatrix(lookat);
    GL::Scale(this->zoom, this->zoom, this->zoom);

    GL::Rotate(xrot, 1.0f, 0.0f, 0.0f);
    GL::Rotate(yrot, 0.0f, 1.0f, 0.0f);
    GL::Clear(ClearBufferMask::ColorBufferBit | ClearBufferMask::DepthBufferBit);
    GL::ClearColor(Color::LightGray);
// Draw3D
}
else {
    GL::MatrixMode(MatrixMode::Projection);
    GL::LoadIdentity();
    GL::Ortho(5, w-5, 5, h-5, -1, 1); 
    GL::Viewport(5, 5, w-5, h-5); 

    GL::Clear(ClearBufferMask::ColorBufferBit|ClearBufferMask::DepthBufferBit);
    GL::ClearColor(Color::LightGray);
    GL::MatrixMode(MatrixMode::Modelview);
    GL::LoadIdentity();

// Draw 2D
}

I don't know what am doing wrong, but I guess that I don't clear some matrix or something, because like I said before when the variable is draw3D==true at the beginning it draws perfectly and when the variable is draw3D==false at the beginning it draws perfectly in 2D, but the change during runtime makes it not work.

Was it helpful?

Solution

You need to set the projection matrix in 3D mode for one thing. I'm guessing by default your framework is setting up a perspective projection for you. This is getting overwritten when you do GL::Ortho() in the 2d part.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top