Seite 1 von 1

3D Editor

Verfasst: 22. Juni 2008 17:24
von shadowmasta
Hallo qt'ler

Ich und ein Komiilitone haben vor einen Editor zu basteln, damit unsere 3D-Engine etwas komfortabler benutzt werden kann.
Der Editor besteht aus einer Textansicht und einer 3D Ansicht, das Textzeugs habe ich schon fertig, es geht nun um die 3D-Ansicht welche 4 Fenster beinhalten soll. Top, Front, Left und Perspective-Fenster sollen sichtbar sein, bei der Umsetzung bin ich mir nicht ganz sicher, wie ich es hinbekomme das man eigentlich nur ein Fenster erstellt die 3D-Szene lädt und in den 4 Fenstern dann einfach nur verschiedene Kamerapositionen zuweist. Ist dieser ansatz richtig ? Scheint mir sonst zu viel bzw. zu aufwendig 4 versch. Fenster zu initialiseren.. Die Frage ist wenn man ein Fenster hat wie man das kopieren kann bzw. so behandelt das bei allen 4 Fenster eine unterschiedliche Steuerung also quasi selbständig bis auf die 3D Initialiserung. Wenn man ein Objekt lädt soll bei allen Fenstern aktualisiert werden.
Wie würdet ihr das umsetzen habe jetzt spontan an 4 mit Grid angelegten QGlWidgets gedacht von der ich natürlich ableite um die Steuerung zu implementieren. Nur bekomme ich da ein leichtes Bedenken weil die 4 Fenster unterschiedl. Steuerung haben sollten ?
Kann man das so umsetzen das man eines maximieren kann bzw. wie sollte das mit der Verschiebung sein oder doch lieber 4 getrennte immer sichtbare Fenster...

Danke für eure konstruktiven Vorschläge :wink:

Re: 3D Editor

Verfasst: 23. Juni 2008 07:35
von macman
shadowmasta hat geschrieben:Wie würdet ihr das umsetzen habe jetzt spontan an 4 mit Grid angelegten QGlWidgets gedacht von der ich natürlich ableite um die Steuerung zu implementieren. Nur bekomme ich da ein leichtes Bedenken weil die 4 Fenster unterschiedl. Steuerung haben sollten ?
In 3 Fenterns, bzw. Widgets, hast Du doch höchtens einen Zoom zur Verfügung. Und wie du schon sagtest, die Fenster unterscheiden sich nur in der View, aslo sehe ich da kein Problem. Würde es wahrscheinlich genauso machen.
shadowmasta hat geschrieben:Kann man das so umsetzen das man eines maximieren kann bzw. wie sollte das mit der Verschiebung sein oder doch lieber 4 getrennte immer sichtbare Fenster...
Ein Maximieren sollte von alleine passieren, wenn Du die anderen 3 versteckst. 4 getrennte Fenster würde ich nur machen, wenn Du sicher stellst das nur ein Dokument geöffnet sein kann. Sonst kommt man da schnell durcheinander.

Verfasst: 23. Juni 2008 16:34
von Nash
klar musst du 4 widgets initialisieren, aber sind ja immer die selben...also wo ist das Problem? Das ist auch die einfachste Variante.

Aufwendiger und unabhängig von Qt ist es, wenn du es so wie in 3ds max machst, ein Widget, aber 4 getrennte Viewports. da musst du dich aber selbst um die "Trennung" der Widgets kümmern genauso wie die Maussteuerung und abfrage. etc.

Also ich würde ersten nehmen. Macht der Unreal Ed auch so.

Verfasst: 23. Juni 2008 21:18
von shadowmasta
Ok also ich glaube ich sehe etwas mehr Bäume im Wald :wink:

Die Frage ist jetzt nur wie ich jeweils das centralWidget umschalten kann.
Hab folgenden Code:

Code: Alles auswählen

/*************************** Creating Viewport ***********************/
void MainWindow::createViewport()
{
  modelView = new QWidget;
  frontView = new QGLWidget;
  topView = new QGLWidget;
  leftView = new QGLWidget;
  persView = new QGLWidget;

  QGridLayout *mainLayout = new QGridLayout;
  mainLayout->addWidget(frontView, 0, 0);
  mainLayout->addWidget(topView, 0, 1);
  mainLayout->addWidget(leftView, 1, 0);
  mainLayout->addWidget(persView, 1, 1);

  modelView->setLayout(mainLayout);
}
/*************************** Viewmode **************/
void MainWindow::showText()
{
  setCentralWidget(editor);
  textView->setEnabled(false);
  sceneView->setEnabled(true);
}

void MainWindow::showScene()
{
  setCentralWidget(modelView);
  sceneView->setEnabled(false);
  textView->setEnabled(true);
}
Beim Initialiseiren ist der Textmodus (setCentralWidget(editor);) an und einmal kann ich auch in den ViewModus wechseln (showScene()).
Wechsele ich anschließend zurück gibt es ein Seg-Fault, leider weis ich nicht genau warum das so ist, hat wohl irgendwas mit dem QWidget pointer zu tun der benutzt wird..

Wäre für Hilfe dankbar :)

Verfasst: 26. Juni 2008 16:31
von shadowmasta
Ist der Ansatz verkehrt ?
Note: QMainWindow takes ownership of the widget pointer and deletes it at the appropriate time.

Das heißt doch das er das Objekt löscht, wenn man die Anwendung beendet oder wie ?
Das kann doch nicht so schwer sein 2 Widgets auszutauschen hmm ?

:(

Verfasst: 27. Juni 2008 08:45
von macman
Schon mal QStackedWidget angeschaut? Kann mehrere Widgets enthalten und Du schaltest einfach um, welches Du sehen willst.

Verfasst: 27. Juni 2008 18:09
von shadowmasta
Vielen Dank das hat geholfen :wink: