JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=7a6c41c371c81b4030edc0b7e857d49fMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

2D Ansicht im Level-Editor
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 10.07.2003, 15:23    Titel: 2D Ansicht im Level-Editor Antworten mit Zitat

Hi!
Ich arbeite ja derzeit an dem 3D Level Editor für CW und habs auch schon soweit, dass man Quader erstellen und auch in einer 3D Ansicht sehen kann. Ich habe aber ein paar kleinere Probleme mit den 2D Ansichten des Editors:
- Ich kann erstellte Blöcke in ihnen nicht sehen, bzw. muss erstmal die Kamera auf gut Glück verschieben um sie sehen zu können.
- Mit einer Orthogonalen Projektionsmatrix sehe ich überhaupt nichts mehr (oder es ist das erste Problem und ich hab nur die Quader nicht gefunden Wink )

Ich denke das erste Problem liegt daran, dass ich die Quader wie folgt erstelle:
- Bei einem Mausklick mit der Linken Taste, wird die Position des Mauszeigers (in Client Koordinaten des 2D Viewports, in den geklickt wurde) in einen 3D Start Vektor gespeichert.
- Wird die Maustaste losgelassen, so wird die Position der Maus in einen 3D End Vektor gespeichert.
- Dann werden aus diesen 2 Vektoren die 8 Vertices des Quaders berechnet.

Ich denke man muss die Client Koordinaten vieleicht noch irgendwie in die Koordinaten des 3D Raums umwandeln, weis aber nicht wie genau.

Ich weis nicht genau welche Informationen ihr noch braucht, deswegen schreib ich vorerst mal noch keine weiteren hin und warte dann auf "Informations-Anforderungen" Wink

Cu,
VH
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 10.07.2003, 20:07    Titel: Antworten mit Zitat

Ich habs bei meinem Leveleditor mit zwei Scrollvariablen gemacht(falls dein Level größer ,als ein Bildschirm ist).
ScrollingX und ScrollingY
Am Anfang stehen die beiden auf 0.
Wenn man nun z.B. die rechte Cursortasten drückt, dann wird ScrollingX erweitert und das gesamte Bild nach links bzw. die Kamera nach rechts verschoben.
Bei einem Mausklick nimmst du dann die Koordinaten und addierst die beiden Scrolling-variablen. Dann hast du die korrekte Position im Level.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 11.07.2003, 11:10    Titel: Antworten mit Zitat

Bei mir sieht das so aus (bei der 2D Top Ansicht):
Ich setze erstmal die Position der Kamera, so dass sie 100 Einheiten über dem Boden "schwebt" und dann die Koordinaten des Looking Points (wo die kamera hinguckt), sodass sie direkt nach unten auf den Ursprung guckt.

Code:

//Top ansicht [1] Kamera Position [0]
vcCameras[1][0].x = 0.0f;
vcCameras[1][0].y = 100.0f;
vcCameras[1][0].z = 0.0f;
//Top ansicht [1] Kamera LP [1]
vcCameras[1][1].x = 0.0f;
vcCameras[1][1].y = 0.0f;
vcCameras[1][1].z = 0.0f;


Dann speichere ich den OffsetX und OffsetY der Kamera position im Bezug auf den Linken oberen Fensterrand des 2D Top Viewports (0,0):

Code:

//Top Offset: (hier der Index Null, da der Perspective VP nich mitgezählt wird
iOffset[0][0] = (int)(VP_Top->ClientWidth /2); //X-Offset = Breite / 2
iOffset[0][1] = (int)(VP_Top->ClientHeight/2); //Y-Offset = Hoehe / 2


Die Kamera soll sich also im Fenster Mittelpunkt befinden. Wenn ich nun einen Punkt erzeuge (Beispielsweise bei dem linken Mausklick in den Viewport) dann mach ich das so:

Code:

vcStart.x = X - iOffset[0][1]; //Mausposition (Client) X - OffsetX = PunktX
vcStart.y = 5.0f;  //Standart Hoehe des Quaders = 5 Einheiten
vcStart.z = Y - iOffset[0][0]; // Mausposition (Client) Y - OffsetY = PunktY


Das sollte doch eigentlich funktionieren?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 10:13    Titel: Antworten mit Zitat

Hi Leuts!

Ich hab das mit den 2D Side und 2D Top Viewports jetzt hinbekommen, läuft pefekt. Top Läuft aber nicht, und ich habe eine Vermutung woran das liegen kann, dass ich dort ÜBERHAUPT nichts sehe. Die Kamera und der Looking Point wurden ja wie im letzten post gezeigt positioniert. Aber ich denke man muss beim erstellen der Viewmatritze was verändern.

Code:

D3DXMATRIX *D3DXMatrixLookAtLH(          D3DXMATRIX *pOut,
    CONST D3DXVECTOR3 *pEye,
    CONST D3DXVECTOR3 *pAt,
    CONST D3DXVECTOR3 *pUp
);

Das ist ja die Funktion aus den D3D Extensions. Der dritte Parameter gibt ja die Weltausrichtung an. Um ganz ehrlich zu sein Raff ich den Parameter nich ganz und hab bis jetzt immer (0,1,0) übergeben. Kann es sein, dass ich für meinen Top Viewport was anderes Übergeben muss?

Oder habt ihr eine andere Idee, warum das dort nicht funktioniert?

Wollt ihr das anschaulicher haben? dann kann ich euch die derzeitige editor version schicken.


Thx
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 10:24    Titel: Antworten mit Zitat

Hallo,

der Parameter gibt an in welche Richtung du guckst. Bei (0,1,0) guckst du nach oben, wenn mich nicht alles täuscht.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 10:42    Titel: Antworten mit Zitat

Ich denke da irrst du dich (bin mir aber auch nich sicher Wink ). Folgendes steht im DX9 SDK:
DX-SDK hat Folgendes geschrieben:
Pointer to the D3DXVECTOR3 structure that defines the current world's up, usually [0, 1, 0].


Was soviel heist wie:
"Zeiger auf die D3DXVECTOR3 Struktur, welche den aktuellen Welt-Hoch-Vektor beinhaltet. Normalerweise [0, 1, 0]"


Aber ich kann mich da auch irren. Denkt ihr das es an dem Parameter liegt, dass ich da nichts sehe, oder habt ihr andere vermutungen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 10:42    Titel: Antworten mit Zitat

Ich denke da irrst du dich (bin mir aber auch nich sicher Wink ). Folgendes steht im DX9 SDK:
DX-SDK hat Folgendes geschrieben:
Pointer to the D3DXVECTOR3 structure that defines the current world's up, usually [0, 1, 0].


Was soviel heist wie:
"Zeiger auf die D3DXVECTOR3 Struktur, welche den aktuellen Welt-Hoch-Vektor beinhaltet. Normalerweise [0, 1, 0]"


Aber ich kann mich da auch irren. Denkt ihr das es an dem Parameter liegt, dass ich da nichts sehe, oder habt ihr andere vermutungen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 11:39    Titel: Antworten mit Zitat

Ja, das ist aber der 4. und nicht der 3. Parameter.....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 11:47    Titel: Antworten mit Zitat

1, 2, 3, 4... naja... stimmt, du hast recht Embarassed das hab ich alles in der Grundschule gelernt und die ist sooo lange her, muss ich nich mehr wissen Wink

Naja, als dritten Parameter hab ich, wie auch bei den Perspective-, Side- und Top Viewports den Looking Point der jeweiligen Kamera angegeben. Bei allen anderen sehe ich alles Perfekt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 11:50    Titel: Antworten mit Zitat

Hast du mal als LookAt Vektor (0,-1,0) probiert? Wie sind denn die anderen Parameter der Funktion?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 11:54    Titel: Antworten mit Zitat

Ich habe folgenden Code:
Code:

D3DXMatrixLookAtLH( &matViewT, //View matritze für den Top VP
                  &vcCameras[1][0], //Top VP Kamera position
                  &vcCameras[1][1], //Top VP kamera Looking point
                  &D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) ); //Welt UP Vektor


Es geht auch mit (0, -1, 0) nicht Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 11:59    Titel: Antworten mit Zitat

Verrate doch mal was in den Feldern für Werte stehen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 12:02    Titel: Antworten mit Zitat

wie oben angegeben:
Code:

//Top ansicht [1] Kamera Position [0]
vcCameras[1][0].x = 0.0f;
vcCameras[1][0].y = 100.0f;
vcCameras[1][0].z = 0.0f;
//Top ansicht [1] Kamera LP [1]
vcCameras[1][1].x = 0.0f;
vcCameras[1][1].y = 0.0f;
vcCameras[1][1].z = 0.0f;


Für den Perspective Viewport sieht das dann so aus:
Code:

  vcCameras[0][0].x = 0.0f;
  vcCameras[0][0].y = 0.0f;
  vcCameras[0][0].z = -100.0f;
  vcCameras[0][1].x = 0.0f;
  vcCameras[0][1].y = 0.0f;
  vcCameras[0][1].z = 0.0f;
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 12:18    Titel: Antworten mit Zitat

Ich habe es gerade mal ausprobiert. Ich bekomme so einen Blick von oben in die Szene. Die Matrix setzt du ja (->SetTransform(::Smile) ?

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 15.07.2003, 12:27    Titel: Antworten mit Zitat

Ja, ich setze die Matrix:
Code:

  lpDevice[ 1 ]->SetTransform( D3DTS_VIEW, &matViewT );
  lpDevice[ 1 ]->SetTransform( D3DTS_PROJECTION, &matProjectionT );


Dann kann es schonmal nicht an der Matrix liegen, an der Projektionsmatrix übrigens auch nicht, da ich sie genau so setze und erzeuge, wie auch bei Side und Front und dort klappt alles wie gewollt. Auch die Renderfunktion ist identisch mit denen von Side und Front:

Code:

  /*
    lokale variablen:
    */
  D3DXMATRIX matWorld;
  HRESULT hr = 0;

  /*
    los gehts!
    */
  lpDevice[1]->BeginScene();

  D3DXMatrixTranslation( &matWorld,
                         vcCameras[1][1].x,
                         vcCameras[1][1].y,
                         vcCameras[1][1].z );
  lpDevice[ 1 ]->SetTransform( D3DTS_WORLD, &matWorld );
  hr = lpDevice[ 1 ]->SetStreamSource( 0, lpVB[1], 0, sizeof(CVertex) );
  hr = lpDevice[ 1 ]->SetIndices( lpIB[1] );
  if(FAILED( hr=lpDevice[ 1 ]->DrawIndexedPrimitive( D3DPT_TRIANGLELIST,
                                                    0, 0,
                                                    iNum_Verts,
                                                    0, iNum_Tris ) ) )
  {
    return;
  }

  lpDevice[ 1 ]->EndScene();
  lpDevice[ 1 ]->Present( NULL, NULL, NULL, NULL );

Alles wird erfolgreich ausgeführt. Nur man sieht halt nichts Wink
Was anderes mach ich gar nicht.

Alle Renderstates sind genauso gesetzt wie bei Side und Front, ich erzeuge das Device für das richtige Fenster, etc.


willste mal ne kleine Version vom Editor haben, damit du das mal life miterleben kannst?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum