Manuelle Tiefensortierung
-
Vertexwahn schrieb:
a²+b²=c² (für Photonen in der Nähe von schwarzen Löchern keine Gewähr)
a har har har har, achwaaas : )
Ich meine, welchen Punkt der Fläche nehme ich am besten für die Rechnung? Die Mitte? Den ersten Vertex? Egal?
Und dann wäre wie schon gesagt noch die Frage mit der Sortierung.
-
Das Problem, das ich sehe ist doch wie splitet man Dreiecke die sich schneiden – da sollte aber viel Literatur zu finden sein, da bevor sich ein schlauer Mensch Z-Buffering ausgedacht hat Manuelle Tiefensortierung leider nötig war.
BTW: wenn du die Position eines Vertex in Bezug auf das Kamerakoordiantensystem wissen willst muss du das Vertex einfach nur mit der ModelviewMatrix multiplizieren
- das gleiche was deine 3D Pipeline macht und und einfach den Abstand zum Ursprung Berechnen
-
Vertexwahn schrieb:
wenn du die Position eines Vertex in Bezug auf das Kamerakoordiantensystem wissen willst muss du das Vertex einfach nur mit der ModelviewMatrix multiplizieren
- das gleiche was deine 3D Pipeline macht und und einfach den Abstand zum Ursprung BerechnenWie muss ich das jetzt verstehen? Die Position des Vertex in Bezug auf den Nullpunkt (=Kamerakoordinatensystem) ? Okay, wunderbar, danke.
-
-
wie splitet man Dreiecke die sich schneiden
in der praxis gar nicht: man nimmt einfach in kauf, diesen fall nicht performant loesen zu koennen.
zur groben sortierung von polygonen eignen sich ordering tables.
-
Die Sortierung von Polygonen nach ihrer Entfernung zur Kamera ist nicht immer eindeutig. Kann man auch gar nichts daran ändern. Die Darstellung von sich durchdringenden Objekten wird auch immer falsch sein. Und nicht zuletzt möchtest du nicht wirklich das schöne Zeichnen eines Vertexbuffers, was normal in einem Rutsch geht, 10mal unterbrechen, um die Dreiecke von 2 buffern in durcheinandergewürfelter Reihenfolge zu zeichnen. Das ist stinklangsam und die Grafikkarte muss dann ständig auf die CPU warten.
Nimm einfach nen z-Buffer.

-
Bei transparenten Objekten macht man die Sortierung btw. in der Regel nicht Polygon-weise sondern Objekt-weise. Wenn die Objekte an allen Stellen entweder voll oder gar nicht transparent sind, kannst du auch den Alphatest vom z-Buffer benutzen.
-
Letztlich ist es auch wurscht, ob die Sortierung nun perfekt ist oder nicht. Die Leveldesigner sollen einfach drauf achten keine fiesen Engine-Fallen zu bauen. Wann braucht man schon transparente sich durchdringende Dreiecke?
-
Hi!
Quake3 definiert für jedes Material einen Sortierwert. Dieser errechnet sich über ein Konstante (die im Materialscript angegeben wird, standard ist opaque) und ob eine Lightmap für das Face verwendet wird.
m_pFaceList[ i ].m_uSortValue = ( ( l_pShader->m_nSortValue ) << 16 ) + ( l_pSurface->m_uShader << 8 ) + ( l_pSurface->m_uLightmap + 1 );Wenn kein "Shader" (Materialscript) definiert wurde ist der Sortierwert einfach Null.
Wenn jedes Face einen solchen Wert bekommen hat kannst du die Faces einfach per Quicksort oder einem anderen Sortieralgorithmus sortieren. Danach haben die Faces die korrekte Renderreihenfolge und du kannst einfach deine Faceliste durchrendern.Die Sortierkonstanten nochmals:
typedef enum { SS_BAD, SS_PORTAL, // mirrors, portals, viewscreens SS_ENVIRONMENT, // sky box SS_OPAQUE, // opaque SS_DECAL, // scorch marks, etc. SS_SEE_THROUGH, // ladders, grates, grills that may have small blended edges // in addition to alpha test SS_BANNER, SS_FOG, SS_UNDERWATER, // for items that should be drawn in front of the water plane SS_BLEND0, // regular transparency and filters SS_BLEND1, // generally only used for additive type effects SS_BLEND2, SS_BLEND3, SS_BLEND6, SS_STENCIL_SHADOW, SS_ALMOST_NEAREST, // gun smoke puffs SS_NEAREST // blood blobs } shaderSort_t;grüße
-
Ich bin so doof : )
Wie schon in ICQ gesagt, ich hab an die sort Werte gar nicht mehr gedacht, ich hab sie benutzt, um beim Laden die Faces einmal zu sortieren, aber nicht bei jedem Frame... d'oh.Was ich noch nicht so ganz verstehe: Warum hat es Einfluss, ob für das Face eine Lightmap benutzt wird?
Aber schonmal vielen Dank, das ist hilfreich.
-
Transparente Surfaces sind imho nicht gelightmapped.
grüße