Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Jens

Treue Seele

  • »Jens« ist der Autor dieses Themas

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

1

14.08.2003, 20:29

Mesh-Maps (ähnlich wie MIP-Maps)

gibt es so etwas?
Wenn ich ein Modell in der Nähe der Kamera angezeigt bekomme, soll es ruhig in seiner höchsten Dreiecksanzahl gerendert werden.
Wenn das Modell aber in einem bestimmten Entfernungsverhältnis weg ist, soll nur eine geringere Auflösung der Dreiecke, also irgendwie weit auseinandergezerrte gerendert werden.
Es hat keinen Sinn 4000 faces zu rendern, wenn sie sowieso nicht erkennbar sind.
Gibt es so etwas? Oder wird das anders gemacht?
Das wäre zwar etwas speicheraufwändig, aber bei Texturen lohnt es sich doch auch.

Danke

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

14.08.2003, 22:20

Ja, sowas gibt es! Die allermeisten Spiele verwenden sowas.
Suche mal bei Google nach "adaptive meshes" oder "progressive meshes". Die D3DX-Library bietet auch eine Schnittstelle dafür. Man kann z.B. angeben, dass man gerne ein Mesh mit 100 Vertizes oder 50 Faces hätte.

Jens

Treue Seele

  • »Jens« ist der Autor dieses Themas

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

3

14.08.2003, 23:12

Progressive Meshs

einfach Spitze! (D3DXGeneratePMesh).
Das SDK-Bsp. Progressive Mesh ist mir eben auch auf die Füße gefallen.
Danke.

Jens

Treue Seele

  • »Jens« ist der Autor dieses Themas

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

4

15.08.2003, 14:22

DirectX-Entscheidung des Detail-Levels

Wie macht das DirectX???
Wenn der Filter m_pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); angegeben wird, entscheidet DirectX selbständig über die "Auflösung" der Textur in Abhängigkeit der Kameraentfernung (wenn ich das richtig kappiert habe).
Kann man irgendwie auf die interne Berechnung zugreifen? Ich meine damit, ob man den Index der aktuell verwendeten MIP-Texturauflösung herausbekommen kann.

Den gleichen Index könnte man doch dann für die Auflösung der Progr.-Meshs verwenden.(?) (vorausgesetzt natürlich, man hat die gleiche Anzahl an P-Meshs, wie auch an MIP-Texturen).
Oder bin ich hier auf dem Holzweg?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

15.08.2003, 20:00

Ja, da bist Du leider auf dem Holzweg :)
Die verwendete MIP-Map-Stufe hat nichts mit der Kameraentfernung zu tun. Die kennt Direct3D in dem Sinne ja auch garnicht. Außerdem werden die MIP-Map-Berechnungen per Pixel durchgeführt, da könntest Du garnichts abfragen.
Es ist so: sobald ein Texel "untersampled" wird, ist die nächste MIP-Map-Stufe fällig. Oder anders gesagt: wenn die Textur auf dem Bildschirm kleiner ist als sie in Wirklichkeit ist, wird gewechselt.

Jens

Treue Seele

  • »Jens« ist der Autor dieses Themas

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

6

15.08.2003, 20:57

schade

stimmt, ich habe es gerade noch mal nachgelesen.
Dachte eigentlich, dass man diese Technologie analog auf die Modelle oder die Primitiven übertragen kann, aber dem ist nicht so, denn die Abstände der Vertices sind ja wohl niemals untersamled. Zumindest ist es dann zu spät zum Umschalten.

(Aber ich bin gerade bei Deinem Artikel "ViewFrustum". Das ist ja wieder genial! Die schnelle Berechnung der Plane...) :-)
Nun baue ich meinen ganzen Mist wieder um ;-)

Man müsste irgendwie während der ViewFrustum-Culling-Berechnung den am nächsten entferntesten Punkt der Boundingbox eines Modells zur Kamera als Kameradistance speichern und dann mit der Differenz von Far minus Near-Plane ins Verhältnis setzen. So dass für die Kammeradistance ein Wert zwischen 0 und 1 herauskommt. Dann kann man sich doch ganz leicht einen Index für die ProgressiveMeshs basteln.
Hat das so oder ähnlich schon jemand hier gemacht.
Oder bin ich wieder aufm Holzweg?

Ich will nicht nach jeder Kamerabewegung die gesamten Kamerainfos in alle Modelle setzen (so wie es bisher bei mir der Fall war :-(

7

21.08.2003, 14:59

In Zerbst 2ten Buch ist eine Methode beschrieben, wie man den Detailgrad eines Modells berechnet. Er Rechnet berechnet, anhand der Bounding Box, wieviele Pixel das Modell auf dem Schirm belegt.
Zu finden ist das ganze ab Seite 235.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Jens

Treue Seele

  • »Jens« ist der Autor dieses Themas

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

8

21.08.2003, 15:20

Hi,
...wieviele Pixel das Modell auf dem Schirm zeigt???
Ist ja Wahnsinn! Und das wird in jedem Frame ausgerechnet? Geht das dann noch schnell genug? (Auch auf meiner Maschine) :-)

Geht er davon aus, wie groß die Boundingbox im Verhältnis zu denen der anderen Modelle ist?

OK, dann muss ich mir eben auch noch den Zerbst reinziehen. :crying:
Mann bin ich jetzt blank :-(

9

21.08.2003, 15:28

hehe...er hat ja noch eine Alternative. Beim Rendern wird der abstand zwischen Modell und Kamera berechnet und dann an die Auswahlfunktion übergeben. Das ist ja auch net schwer. Position von Modell und Kamera hat man ja vorliegen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Jens

Treue Seele

  • »Jens« ist der Autor dieses Themas

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

10

21.08.2003, 15:37

gut

Hi Dragon,
das ist schon besser, so habe ich es jetzt auch, aber es gibt ein Problem:
Was ist mit Kamerazoom?
Wenn die Kamera sich nicht bewegt und das Modell auch nicht und ich als Bösewicht mit Kamera möchte ein anderes Modell aus der Nähe betrachten. Dann wird die Kamerapos nicht gesetzt, die Matrix nicht neu berechnet usw. weil ich die Stati PosChanges für Kamera und Modell auf FALSE sitzen habe.
Wie könnte man also hier vorwärts kommen, wenn sich nur der Projektions-Winkel der Kamera ändert?
mm bin a bissle zu plöde dafür, das in ein Entfernungsverhältnis zu setzen, um dann wieder auf bessere Details umzuschalten ;-)

Werbeanzeige