JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Nicht sichtbare Vertices

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


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 13:15    Titel: Nicht sichtbare Vertices Antworten mit Zitat

Hallo!

Weiss jemand von euch wie ich die nicht sichtbaren Vertices berechnen kann, also alle die man nicht sieht? Mit dem Positions Vektor und dem LookAt Vektor der Kamera und den Positionsvektoren der Vertices müsste das doch möglich sein? Kenn jemand ne Formel?

THX
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 13:23    Titel: Antworten mit Zitat

was genau willst du machen? Willst du die Vertices transformieren ohne sie zu zeichenn? Bracuht man z. B: wenn man die Bildschrimkoordinaten eines Vertices wissen will.
Also: Du must ihn nacheinandenr mit der Weltmatrix, der Kameramatrix und der Positionsmatrix multiplizeiren, dann bekommst du für x und y Koordinaten zwischen -1 und +1 heraus, die must du dann mit der Bildschirmauflösung umrechnen und schon hast dus.
Detailiertere hilfe folgt auf eine detailiertere Problembeschreibung!
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 13:25    Titel: Antworten mit Zitat

Ich will einfach beim Rendern sparen. Ich will nur das Rendern was man sieht, und so will ich zuvor alle Vertices überprüfen ob sie im Sichtbaren Bereich sind. Natürlich gibt es auch Situation wo alle Vertices nicht im Bild sind aber trotzdem ein Polygon gezeichnet werden müsste. Es ist ziemlich kompliziert...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 13:29    Titel: Antworten mit Zitat

aja, jetzt kommen wir der Sache schon näher. ViewFrustrumCulling meinst du wohl. Gut, du must aus der Projektionsmatrix die 6 ebenen des pyramidenstumpfes (Sichtbereich!) extrahieren, und dann jedes Modell darauf hin prüfen, wie es relativ zu den Ebenen steht, sobalb es teilweise undkomplett innerhalb der Ebenen liegt, musst du es rendern, sonst kannst du es dir sparen.
Am Besten erstmal auf Modellebenen und nicht auf Dreiecksbasis.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 13:43    Titel: Antworten mit Zitat

Ja das mit dem Pyramidenkegel hab ich auch shcon gedacht aber das Problem ist wie ich mache das der sich mit dreht mit dem LookAt Vektor.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 13:59    Titel: Antworten mit Zitat

also, du brauchst das Produkt aus ViewMatrix*Projectionsmatrix
und dann kommt ne fürchterlich komplizierte Rechnung
such mal bei Google
ViewFrustum + Matrix oder so
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 30.09.2004, 15:05    Titel: Antworten mit Zitat

Bei DirectX gibt es direct eine Funktion die das für dich macht. Willst du nun backfaceCulling durchführen oder auch noch das vermeiden von Polygonen ausserhalb des Viewfrustums ?
_________________
"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
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 15:34    Titel: Antworten mit Zitat

das vermeiden von Polygonen auserhalb.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 30.09.2004, 15:49    Titel: Antworten mit Zitat

du könntest
A:
testen ob der Vertex innerhalb der von dem ViewFrustum festgelegten Bereich ist (Ebenentests, davor oder dahinter)

B:
Code:
inline bool DFXIsVertexInsideFrustum(D3DVIEWPORT9 *Viewport, D3DXMATRIX *matProject, D3DXMATRIX *matView, D3DXMATRIX *matWorld, D3DXVECTOR3 *v1)
{
   //check if the 3 vertexes are inside a given frustum
   D3DXVECTOR3 p1;
   D3DXMATRIX WorldView;

   Viewport->X=0;
   Viewport->Y=0;
   Viewport->MaxZ=0;
   Viewport->MinZ=0;

   D3DXVec3Project(&p1,v1,Viewport,matProject,matView,matWorld);

   bool bIn=(
      ((p1.x>=0 && p1.x<Viewport->Width) &&
      (p1.y>=0 && p1.y<Viewport->Height))
      );
   v1->x=p1.x;
   v1->y=p1.y;
   v1->z=p1.z;
    return bIn;
}


Edit: Bold durch Code ersetzt (hab mich verklickt)
_________________
"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."


Zuletzt bearbeitet von Fallen am 30.09.2004, 18:13, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 18:04    Titel: Antworten mit Zitat

Vielen Dank! Ich werd's dann morgen mal ausprobieren!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 20:09    Titel: Antworten mit Zitat

Also ich hab's mal getestet. Wenn ich das richtige verstehe ist v1, der vertex der überprüft werden soll? wieso weisst du ihm dann am schluss p zu? Bei mir gibt es leider immer true zurück, wenn ich Die Viewort Breite und Höhe noch initialisiere.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 20:27    Titel: Antworten mit Zitat

Noch ein kleines Wörtchen zu ViewportCulling: Unter Umständen ist es heute schneller die 3D-Objekte einfach mit ner normalen BoundingBox am Fustrum zu testen, da der Overdraw für die Grafikkarte kaum noch ein Problem darstellt und es idR langsamer ist die CPU mit tausenden von Vertices zu belasten. Am besten beides mal ausprobieren. Ansonsten vielleicht als Kompromiss nach Meshes cullen. Nicht das nachher einer sagt: Ich hab in meiner Szene nur 500 Triangles zu sehen und die App läuft mit 50FPS, obwohl ich auf den Vertex genau culle. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 20:40    Titel: Antworten mit Zitat

Man könnte ja wie Christian bei seinem Terrain, solche Tiles definieren, und zuerst die grossen Tiles (so ne Art Bounding-Box) Cullen und wenn die nicht im Bild ist, muss man alle darin enthaltenen Vertices nicht cullen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 30.09.2004, 20:48    Titel: Antworten mit Zitat

Beni5 hat Folgendes geschrieben:
Man könnte ja wie Christian bei seinem Terrain, solche Tiles definieren, und zuerst die grossen Tiles (so ne Art Bounding-Box) Cullen und wenn die nicht im Bild ist, muss man alle darin enthaltenen Vertices nicht cullen.

Darum geht es ja! Unter Umständen(oder eher wahrscheinlich) hat deine Grafikkarte die paar Vertices schon längst gezeichnet, bis deine CPU die Box und Vertices durchgerechnet hat!
Achtung: Das heißt jetzt _nicht_, dass ihr euer Terrain BruteForce als ganzes Rendern könnt/sollt. Nur der Ansatz auf Vertex-Ebene zu cullen ist eben nicht mehr ganz zeitgemäß, da es inzwischen ein anderes Leistungsverhältnis von GraKa<->CPU gibt, wie noch vor Jahren! Ein gut partionierter Quad-/Octree reicht für ein Terrain, da muss man nicht noch einzeln an den Vertices rumrechnen. Aber wie gesagt: Probieren geht über studieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 01.10.2004, 08:01    Titel: Antworten mit Zitat

Ich hab jetzt nicht den ganzen Thread gelesen, aber bei Gamedev.net gibt es einige Artikel zu dem Thema:
http://www.gamedev.net/reference/list.asp?categoryid=40#85

Sowie ein Tutorial zum Frustum Culling auf flipcode:
http://www.flipcode.com/articles/article_frustumculling.shtml
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