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
|
Verfasst am: 30.09.2004, 13:15 Titel: Nicht sichtbare Vertices |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.09.2004, 13:23 Titel: |
|
|
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 |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 30.09.2004, 13:25 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.09.2004, 13:29 Titel: |
|
|
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 |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 30.09.2004, 13:43 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.09.2004, 13:59 Titel: |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 30.09.2004, 15:05 Titel: |
|
|
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 |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 30.09.2004, 15:34 Titel: |
|
|
das vermeiden von Polygonen auserhalb. |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 30.09.2004, 15:49 Titel: |
|
|
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 |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 30.09.2004, 18:04 Titel: |
|
|
Vielen Dank! Ich werd's dann morgen mal ausprobieren! |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 30.09.2004, 20:09 Titel: |
|
|
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 |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 30.09.2004, 20:27 Titel: |
|
|
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. |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 30.09.2004, 20:40 Titel: |
|
|
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 |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 30.09.2004, 20:48 Titel: |
|
|
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 |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
|
Nach oben |
|
|
|