1

C ++ Visual Studio 2008フォームアプリケーションでOpenGLを使用していますが、ブール値がtrue / falseに設定されている場合、GLcontrolで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==false2Dではありますが、実行時の変更により機能しなくなります。

4

1 に答える 1

6

1つには、投影行列を3Dモードに設定する必要があります。デフォルトでは、フレームワークがパースペクティブプロジェクションを設定していると思います。これは、2dパートでGL :: Ortho()を実行すると上書きされます。

于 2012-06-27T14:11:16.567 に答える