3D Editor

Alles rund um die Programmierung mit Qt
Antworten
shadowmasta
Beiträge: 8
Registriert: 2. April 2008 21:21
Wohnort: Rostock
Kontaktdaten:

3D Editor

Beitrag 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:
Under construction
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: 3D Editor

Beitrag 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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag 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.
shadowmasta
Beiträge: 8
Registriert: 2. April 2008 21:21
Wohnort: Rostock
Kontaktdaten:

Beitrag 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 :)
Under construction
shadowmasta
Beiträge: 8
Registriert: 2. April 2008 21:21
Wohnort: Rostock
Kontaktdaten:

Beitrag 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 ?

:(
Under construction
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Schon mal QStackedWidget angeschaut? Kann mehrere Widgets enthalten und Du schaltest einfach um, welches Du sehen willst.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
shadowmasta
Beiträge: 8
Registriert: 2. April 2008 21:21
Wohnort: Rostock
Kontaktdaten:

Beitrag von shadowmasta »

Vielen Dank das hat geholfen :wink:
Under construction
Antworten