1

我在 C++ Visual Studio 2008 Forms 应用程序中使用 OpenGL,当布尔设置为真/假时,我希望 GL 控件在 3D 和 2D 之间切换。

3D 绘图工作正常,2D 绘图工作正常,从一个切换到另一个时出现问题。因此,如果我在 2D 中启动应用程序绘图,它可以完美地工作并且与 3D 相同,但是如果我在运行时更改布尔值,它将不会绘制任何东西。

这是我从一个更改为另一个的代码。

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
}

我不知道做错了什么,但我想我没有清除一些矩阵或其他东西,因为就像我之前所说的,当变量draw3D==true在开始时它完美地绘制并且当变量draw3D==false在开始时它完美地绘制在 2D 中,但运行时的更改使其无法正常工作。

4

1 回答 1

6

您需要将投影矩阵设置为 3D 模式。我猜默认情况下您的框架正在为您设置透视投影。当您在 2d 部分执行 GL::Ortho() 时,这将被覆盖。

于 2012-06-27T14:11:16.567 回答