ich würde mich für die einfachste aller lösungen entscheiden und die Polygone mit Hilfe ihrer Bounding Box checken und falls diese in mehreren Nodes ist einfach öfter zeichenen, denke, dass der Verlust, des 2 oder 3 mal zeichen, locker durch die Vorteile des Octrees aufgeholt wird und dass dieser Fall sowieso nicht für so viele Polygone zu trifft.
Angenommen, das sind große Polgone, sonst wären sie ja nicht in mehreren Nodes, und sie belegen je nach Situation einen großen Teil des Bildschirms, dann kann einfach 3x zeichnen in einem ungünstigen Fall, wie oben beschrieben, durchaus einen Unterschied zwischen 20fps und 60fps ausmachen. Beispiel man steht in einem langen Gang. Alle Polygone sind in zwei oder mehr Knoten und werden daher alle mehrfach gezeichnet. Da ist es egal, ob man an die Decke, den Boden, oder die Wänder schaut. Wenn die Fläch auch nur ein ganz klein wenig in einen der Nachbarknoten reinragt, passiert das schon. Und jeder Knoten hat ja 26 Nachbarknoten, wenn man die Diagonalen mitzählt. Das kann also schnell ganz schön viel werden.
hmmmm dannn würde ich enfach, wie lars gesagt hat, zu jedem polygon abspeichern ob es bereits gezeichent wurde, und das dann überprüfen und somit nur einmal zeichnen...
zu meineren neuen Octree version die ihr unter http://shadow3d.delphigl.com findet ist zu sagen, dass ich Polygone nur einem Node hinzufüge, bei meinem Terrain gibt es damit keine probleme, allerdings denke ich, dass das bei anderen Maps nicht der Fall sein dürfte. ALso Polygone verschwiden....
Spricht eigentlich was dagegen eine Feste unterteilung der( bei mir Quads ) zu machen, wenn man weiss wieviele Flächen dieser Bereich hat?
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Natürlich nicht. Wenn du einen Quadtree und ein Terrain mit fester Seitenlänge hast, dann kann man da doch einiges vereinfachen und die Struktur sinnvoll ausnutzen. Das Problem mit den Flächen in mehreren Knoten hast du dann auch nicht mehr.
hmmmm dannn würde ich enfach, wie lars gesagt hat, zu jedem polygon abspeichern ob es bereits gezeichent wurde, und das dann überprüfen und somit nur einmal zeichnen...
zu meineren neuen Octree version die ihr unter http://shadow3d.delphigl.com findet ist zu sagen, dass ich Polygone nur einem Node hinzufüge, bei meinem Terrain gibt es damit keine probleme, allerdings denke ich, dass das bei anderen Maps nicht der Fall sein dürfte. ALso Polygone verschwiden....
Bei dem Terrain gibt es, jedenfalls bei mir, Probleme. Es geschieht zwar nur recht selten, aber ab und zu verschwinden Polygone am linken, oberen und rechten Rand. Man sieht es auf den ersten Blick nicht, aber wenn man es erst einmal gesehen hat, dann ist es ein Anblick, der einen nicht loslässt...
Bin gerade dabei, die zwei Octree-Versionen zu vergleichen... Mir gefällt die neuere Version vom Aufbau her besser, aber die Änderung der ganzen Struktur und der Variablennamen erschwert es doch ein bisschen. Werd mich dann mal durchbeisen.
Ansonsten bezüglich verschwindende Polygone: Ich fände es auch eleganter, die Polygone in den Eltern-Nodes zu speichern, wenn sie zu groß sind. Kein Overhead und nicht so schwer zu implementieren, wie das Splitting.
Ist das Splitting eigentlich langsamer als das Ablegen der Polygone in den darüberliegenden Nodes?
EDIT:
Hab jetzt die Prüfung auskommentiert, die dafür gesorgt hat, dass ein Polygon immer nur einmal in den Octree aufgenommen wird:
Code:
mother^.polygons[i].v[0]:=nil;
Und der Performanceverlust war wider Erwarten nicht spürbar. Erst der direkte Vergleich zeigte einen sehr leichten Performanceverlust. Also mit dem bisschen Overdraw kann man leben.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
jau...das sagte ich bereits...deswegen meinte ich auch anhande der bounding box eines polygons auf kollision der nodes zu überprüfen, damit , das verschwinden der polygone nicht mehr vorkommt...
Hab gerade meine eigene Octree-Klasse gebastelt, weil ich da später noch viel mehr Sachen reinpacken möchte, als "nur" die Anzeige per OpenGL. Da kommt dann noch Lightmap-Berechnung (Jaja, ich weiß, dass Lightmaps nicht der letzte Schrei sind, aber in der Unreal2-Engine werden auch noch welche verwendet und sie schauen gut aus... Auserdem hab ich mich mit den Dingern schon viel zu sehr beschäftigt mit Schatten usw...
Und, siehe da, das Ding hat auf Anhieb funktioniert, was wohl mit unter auch daran lag, dass ich ja eine wunderschöne Octree-Klasse von Shadow zur Orientierung hatte. Nochmal Thx wegen dem Octree-Tut. Is ja echt wahnsinn, was man da für Geschwindigkeiten erreicht... Von 30 fps auf 600 fps...
EDIT: Nur die Texturwechsel wollen noch nicht so richtig, aber das ist ja auch das erste Mal, dass ich VBOs verwende...
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
freut mich dass es dir geholfen hat. is der erste feedback, den ich nach graumer zeit bekomme...finde das generell schade dass man so wenig lob(natürlich auch kritik) zu seienr arbeit bekommt...alle downloaden nur und das wars
Um eine Antwort auf deine ursprüngliche frege zu kriegen, nämlich wie man die Funktion "PolygonIn" perfekt machen kann, such mal im OpenGL forum nach dem Artikel Frustum und lies die meine letzte Antwort durch.
Ich hoffe, das hilft.
Hab ich aus nem Computergrafik Buch und dann von 2D nach 3D portiert.
Zu dem Mehrfachzeichen: Der Oktree hat doch eh ne globale Liste auf die Polys. Wenn jetzt jeder Knoten bei allen seinen Polygonen ein 'Zeichne mich' Flag setzt wenn er sichtbar ist, und das eigentliche Zeichen nach der Sichtbarkeitsprüfung vom Octree übernommen wird und nicht von den einzelnen Knoten, dann zeichnet der Octree einfach nur die mit dem 'Zeichne mich' flag und das Problem mit dem Mehrfachzeichnen ist gegessen.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Statt dem Flag kann man auch die Nummer den letzten sichtbaren Frames bei den Polygonen abspeichern. Dann muß man das Flag bei den nicht sichtbaren Polygonen nicht zurücksetzen.
bin aus dem Urlaub zurück und hab schon wieder eine Liste mit Fragen Als ich die Erkenntniss gewonnen habe, dass Texturwechsel bei einem VBO nicht drin ist, stellte sich das Problem, wie organisier ich den Octree, damit die Polygone mit der gleichen Textur in einem eigenen VBO stehen, der Octree aber dennoch sehr performant bleibt.
red hat geschrieben:
Ich hätte da auch noch eine frage bezüglich Octrees
Ich habe Vertex-Daten aus einer 3d-File geladen, da diese mehrere texturen haben, kommen alle Vertices mit gleicher Textur in eine Parent-Node, die dann später unterteilt werden, um so wenig texturwechsel wie möglich zu haben - klappt auch wunderbar soweit.
Da ich da nicht ganz durchblick, was du damit meinst, stell ich einfach mal ein paar Theorien auf :
Du hast für alle Polys mit der gleichen Textur einen eigenen Octree und zeichnest dann halt nicht mehr nur einen Octree, sondern so viele Octrees, wie du Texturen hast. Geht wahrscheinlich leicht zu implementieren, frisst aber vielleicht auch zu viel Performance, denn es müssen ja jedesmal die ganzen Nodes auf Sichtbarkeit getestet werden
Du unterteilst deine Nodes solange, bis du in den Kinder-Nodes der aktuellen Parent-Node nur noch eine einzige Textur drin hast... <---- ist mir gerade erst eingefallen und kann auch totaler Schmarrn sein Nicht geprüft
Du hast einen Octree ohne Texturen, der nur die reinen Polygondaten enthält und nur für die Sichtbarkeitsprüfung zuständig ist. Du renderst also zuerst diesen Octree und dann für alle Texturen jeweils einen Octree, wobei du dir dann das nochmalige Überprüfen der Nodes sparen kannst, weil du ja vom Texturlosen Octree schon weist, welche Nodes sichtbar sind
Ist da deine Methode dabei?
Gruß, Frase
P.S.: Das ganze sollte auch noch mit Lightmaps kompatibel sein, also noch nach Lightmaps irgendwie sortiert werden, da ich die über Multitexturing binden möchte und mir ja beim VBO kein Texturwechsel möglich ist.
EDIT:
Shadow hat geschrieben:
freut mich dass es dir geholfen hat. is der erste feedback, den ich nach graumer zeit bekomme...finde das generell schade dass man so wenig lob(natürlich auch kritik) zu seienr arbeit bekommt...alle downloaden nur und das wars
Freut mich auch, dass es mir geholfen hat . Und Feedback scheint sich meistens nur dann einzustellen, wenn man Fragen hat, oder wenn es Probleme gibt. Ich führe das mal spontan darauf zurück, wie der Mensch generell mit Problemen oder Aufgaben umgeht. Wenn etwas reibungslos klappt, kann ein Danke im Forum auch warten, wenn es wichtigeres gibt.
Im Real Life dagegen bekommt man öfter mal Feedback zu hören, wenn man jemandem etwas erklärt. Wahrscheinlich, weil da dann der Kontakt persönlicher ist als im relativ anonymen Internet. Der durchschnittliche Tutorial-Leser denkt sich im Unterbewusstsein vielleicht, dass der Autor es nicht mitkriegt, wenn man das Tutorial liest und dass er deshalb auch keinen Dank erwartet. Gemäß dem Motto: "Was ich nicht weiß, macht mich nicht heiß"
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
Zitat:
Im Real Life dagegen bekommt man öfter mal Feedback zu hören, wenn man jemandem etwas erklärt. Wahrscheinlich, weil da dann der Kontakt persönlicher ist als im relativ anonymen Internet. Der durchschnittliche Tutorial-Leser denkt sich im Unterbewusstsein vielleicht, dass der Autor es nicht mitkriegt, wenn man das Tutorial liest und dass er deshalb auch keinen Dank erwartet. Gemäß dem Motto: "Was ich nicht weiß, macht mich nicht heiß"
ich glaub ja noch, dass das eher mit der allgemeinen Faulheit des Menschen zu tun hat. es ist nun mal mehr Aufwand im forum nach dem entsprechenden threat zu suchen (sich vll. sogar erst noch zu registrieren) und was zu schreiben als im reallife jemandem das direkt zu sagen.
ich glaub ja noch, dass das eher mit der allgemeinen Faulheit des Menschen zu tun hat. es ist nun mal mehr Aufwand im forum nach dem entsprechenden threat zu suchen (sich vll. sogar erst noch zu registrieren) und was zu schreiben als im reallife jemandem das direkt zu sagen.
Stimmt. Das erschwert das Ganze natürlich ungemein
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.