JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

"2D-Dreiecke" bewegen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 11.06.2004, 18:34    Titel: "2D-Dreiecke" bewegen Antworten mit Zitat

Hi,

ich hab folgendes FVF:

Code:
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1)


Das Problem ist nur, dass, wenn ich D3DFVF_XYZRHW verwende, anscheinend keine Matrixtranslation mehr funktioniert?? Mag heißen, dass ich meine Dreiecke nicht bewegen kann. Weiß einer wie man das lösen könnte??

Vision
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 11.06.2004, 19:32    Titel: Antworten mit Zitat

Problem hat sich geändert. Ich mach das jetzt im Orthomode.

Und zwar stelle ich am Anfang des Programms die View- und die ProjektionsMatrix so ein:

Code:
D3DXMATRIX ViewMatrix;
D3DXMatrixLookAtLH(&ViewMatrix,
                   &D3DXVECTOR3(0.0f, 0.0f,-10.0f),
                   &D3DXVECTOR3(0.0f, 0.0f, 0.0f),
                   &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
   
Graphic.GetDevice()->SetTransform(D3DTS_VIEW,&ViewMatrix);

D3DXMATRIX ProjMatrix;
D3DXMatrixOrthoOffCenterLH(&ProjMatrix, 0, 640, 0, 480, -1, 1);

Graphic.GetDevice()->SetTransform(D3DTS_PROJECTION, &ProjMatrix);


Wenn ich jetzt ein Viereck

Code:
CUSTOMVERTEX vertices[] =
   {
      {    0.0f,   0.0f, 0.0f, 0xFF000000, 0.0f, 1.0f }, 
      { 200.0f,   0.0f, 0.0f, 0xFF000000, 0.0f, 0.0f,},
      {  200.0f,  200.0f, 0.0f, 0xFF000000, 1.0f, 0.0f,},
      {  0.0f,  0.0f, 0.0f, 0xFF000000, 1.0f, 0.0f,},
      {  200.0f, 200.0f, 0.0f, 0xFF000000, 1.0f, 1.0f,},
      { 0.0f, 200.0f, 0.0f, 0xFF000000, 0.0f, 1.0f,},
   };


mit dem FVF:

Code:
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)

struct CUSTOMVERTEX
{
   D3DXVECTOR3 position;
   D3DCOLOR Color;
   float tu, tv;
};


rendern will. Dann wird mir das Viereck nicht angezeigt. Hat einer ne Idee warum??

Vision
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 11.06.2004, 19:37    Titel: Antworten mit Zitat

· Dreieck befindet sich zu nah an der NearClip Plane
· Dreieck ist hinter der Cam
· Dreieck befindet sich nicht mehr im sichtbaren Bereich der Camera
· Dreieck ist zu klein

bei der Orthogonalen Perspektive ist das besonders Schlimm.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 11.06.2004, 20:05    Titel: Antworten mit Zitat

Vision hat Folgendes geschrieben:
Problem hat sich geändert. Ich mach das jetzt im Orthomode.

Und zwar stelle ich am Anfang des Programms die View- und die ProjektionsMatrix so ein:

Code:
D3DXMATRIX ViewMatrix;
D3DXMatrixLookAtLH(&ViewMatrix,
                   &D3DXVECTOR3(0.0f, 0.0f,-10.0f),
                   &D3DXVECTOR3(0.0f, 0.0f, 0.0f),
                   &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
   
Graphic.GetDevice()->SetTransform(D3DTS_VIEW,&ViewMatrix);

D3DXMATRIX ProjMatrix;
D3DXMatrixOrthoOffCenterLH(&ProjMatrix, 0, 640, 0, 480, -1, 1);

Graphic.GetDevice()->SetTransform(D3DTS_PROJECTION, &ProjMatrix);

...

Probier die Matrizen mal aus:
Code:

D3DXMATRIX matView;
D3DXMATRIX matWorld;

D3DXMatrixIdentity(&matView);
D3DXMatrixIdentity(&matWorld);

g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView);
g_pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);

und vor allem:
Code:

D3DXMATRIX matProj;
   D3DXMatrixOrthoLH(
      &matProj,
      800.0f,
      600.0f,
      0.0f,
      1.0f);

   g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj);


Alle Polygone musst du jetzt nach der Auflösung 800 * 600 ausrichten...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 12.06.2004, 08:24    Titel: Antworten mit Zitat

KI hat Folgendes geschrieben:

Alle Polygone musst du jetzt nach der Auflösung 800 * 600 ausrichten...


Was meinst du mit ausrichten??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 12.06.2004, 09:41    Titel: Antworten mit Zitat

Vision hat Folgendes geschrieben:
KI hat Folgendes geschrieben:

Alle Polygone musst du jetzt nach der Auflösung 800 * 600 ausrichten...


Was meinst du mit ausrichten??


Ein Polygon mit den 3-Ecken mit den Koordinaten (0, 600) (400, 0) (800, 600) hat seine ecken am Bildschirmrand.

Und zwar unabhängig von deiner tatsächlichen Bildschirmauflösung.
Beispiel:
Die Bildschirmauflösung beträgt 1600 * 1200
Wenn du Die Matritzen si wie oben beschrieben initialisierst ist das Dreieck mit seinen Ecken((0, 600) (400, 0) (800, 600)) am Bildschirmrand!
Also. kein lästiges Koordinaten der Polygone umrechnen, wenn die Auflösung sich ändert. Wink (wenn man überhaupt die Auflösung ändern wollte)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 12.06.2004, 13:09    Titel: Antworten mit Zitat

Achso, jetzt versteh ich das. thx. Aber irgendwie funktioniert es immer noch nicht richtig. Muss noch ein bischen rumprobieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 12.06.2004, 14:57    Titel: Antworten mit Zitat

Soweit so gut. Das Problem ist nur das bei D3DXMatrixOrtho() Der Mittelpunkt des Fensters der Mittelpunkt der koordinaten ist. Ich hätte es aber lieber, das (0,0) die obere Linke Ecke des Fensters ist.

Ich habs mal mit D3DXMatrixOrthoOffCenterLH() probiert, aber da wird dann das Dreieck irgendwie nicht angezeigt wenn es die Koordinaten z.b. (0,0), (0,100), (100,100), hat.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 12.06.2004, 18:01    Titel: Antworten mit Zitat

Ich weiß leider nicht genau wie man D3DXMatrixOrthoOffCenterLH benutzt.
Ich benutze (wie gesagt) D3DXMatrixOrtho() und rechne die Koordinaten entsrechend um.

Genauer gesagt: Die Koordinaten der Objekte, bzw. Platten(oder Flächen) haben bei mir ihren Ursprung im [0, 0, 0] Punkt. (also in der Mitte des Bildschirms.) Mithilfe der Matrixtransformationsroutinen schiebe ich sie einfach dahin, wo ich sie haben will...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 12.06.2004, 22:53    Titel: Antworten mit Zitat

Werd ich wohl auch so machen müssen, denn bei D3DXMatrixOrthoOffCenterLH() funktioniert es nicht. Naja, egal.

Aber, wie machst du deine Dreiecke??

Code:
(-50.0f, 50.0f)-------------(50.0f,50.0f)
         \                        |
            \                     |
                 \                |
                     \  (50.0f,-50.0f)



oder
Code:
(0.0f, 0.0f)-------------(100.0f,0.0f)
         \                        |
            \                     |
                 \                |
                     \  (100.0f,100.0f)


Ich frag nur, weil ich mich noch nicht ganz entscheiden kann wie ich die Dreiecke am einfachsten umrechnen kann. Ich glaube die 2. Methode ist empfehlenswerter. Oder??

Vision
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 12.06.2004, 23:06    Titel: Antworten mit Zitat

Ja. Ich finde die 2. Variante auch besser. Smile
Aber leztendlich ist es Geschmackssache...

P.s.
Strg Alt Entf <---- das ist die geilste Tastatur, die ich je gesehen hab. Laughing
(musste mal gesagt werden Wink )
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 13.06.2004, 17:20    Titel: Antworten mit Zitat

KI hat Folgendes geschrieben:
P.s.
Strg Alt Entf <---- das ist die geilste Tastatur, die ich je gesehen hab. Laughing
(musste mal gesagt werden Wink )


Das genialste ist ja, das es die auch gibt Wink Wird bei Servern verwendet, die normalerweise übers Netzwerk administriert werden. Mit der Tastatur kann man sie dann neustarten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
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