Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 00:12

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 61 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 31, 2005 10:44 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das erinnert mich an diesen Thread: http://www.delphigl.com/forum/viewtopic.php?t=3213

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 02, 2005 15:08 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Flash, dein Link da zu dem Feedback-Thread hat wohl die User von diesem Thread hier abgezogen... :cry:

Ich will doch nur wissen, wie man die Objekte nach Texturen sortiert bzw. Wie man Textursortierte Objekte in einem Octree so organisiert, dass VBOs, bei denen keine Texturwechsel erlaubt sind, damit klarkommen...

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 02, 2005 17:36 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Was haben denn VBO's mit Texturewechsel zu tun?
Du kannst ohne Probleme Texture1 binden, einige Indizes rendern,Texture 2 binden usw..
VBO's sollten nämlich auch nicht allzu häufig gewechselt werden und schon einige hundert Dreiecke enthalten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 02, 2005 17:46 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Das geht? Ich dachte, es sei schwer mit VBOs einen Texturewechel zu machen...
Das gibt dem Ganzen natürlich eine kleine Wendung... :D

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 02, 2005 17:53 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das einzige was das Binden eines VBO ändert, ist das alle Zeiger auf Vertex Daten z.B. bei glVertexPointer, als Index in den Buffer gesehen werden und nicht mehr als Zeiger auf die tatsächlichen Daten gesehen werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 03, 2005 13:04 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
kannst halt nur nicht mehr alles in einem drawcall machen, sondern must drawarrays/elements/... halt entsprechend mehrfach aufrufen und dazwischen die Textur wechseln


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 03, 2005 17:35 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Schluckt das nicht zuviel Performance oder sind aktuelle Grafikkarten nicht mehr so anfällig für viele Texturwechsel?

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 03, 2005 17:51 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Unter OpenGL ist die Sache mit den State Changes eh kein so großes Thema wie z.B. unter Direct3D, aber die Blöcke jeweils in eine verkettete Liste für das Material einzufügen und alles am Schluß zu rendern, schadet ganz bestimmt nicht. Der Hauptaufwand beim Wechsel eines Parameters hat die CPU. Die Sache mit den Texturewechsel kommt noch aus der Zeit, als der Texturecache kleiner war.
Andererseits sollte man von vorne nach hinten rendern, um maximal viele Punkte über den Z-Buffer auszuschließen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 03, 2005 18:17 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Also so, wie es früher mit den BSP-Trees gemacht wurde, als diese noch hauptsächlich zur Grafikoptimierung da waren.
Da sorgten die ja dafür, dass die Szene von hinten nach vorne gerendert wird, weil damals der Depth-Test der Grafikkarte noch recht langsam war.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 03, 2005 18:25 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Und heute ist er eben sehr schnell, so dass es sich lohnen kann zuerst ohne Farbe zu rendern und nur den Depthbuffer zu füllen. Dann kann man bei aufwändigen Shadern im 2. Durchgang trotzdem nach Shadern,Texturen,VBO usw... sortieren und trotzdem wird alles durch den Dephtest weggecullt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Octree-Tutorial
BeitragVerfasst: Mi Mai 04, 2011 10:44 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
So, nach ewigem lesen dieses Threads, ob die Kleinigkeiten, die ich bemerkt hab, schon erwähnt worden, bin ich nun endlich bereit:

Als erstes möchte ich mich bedanken, für die Mühe des Tutorials, mir hat/wird es bei eingen Sachen sehr geholfen/helfen *top*

So jetzt noch ein paar Anmerkungen:

Das erste was mir aufgefallen ist [aber im programmiertechnischen Sinne kein Fehler darstellt], war beim TNode-Objekt der numv-Member, bei dem gesagt wird, dass er die beinhaltenden Vektoren-Anzahl speichert. Wenn man sich die HowManyPolygons-Prozedur anguckt, dann sieht man, dass diese Variable nicht die Vektoren, sondern Polygone zählt.
Code:
  1. if children[numc-1].numv < MAX_TRIANGELS_IN_NODE then
deutet an sich auch darauf hin, dass Polys gezählt werden und keine Vektoren, dass sollte vielleicht mal geändert werden, weils doch für ein wenig Verwirrung stiften kann.

Als zweites etwas was an sich nur einen minimalen (falls überhaupt, ich kann es momentan nicht testen) Performanceschub bringen könnte bei der folgenden Funktion:

Code:
  1. function TNode.HowManyPolygons(const polygons : array of PPolygon; Add:Boolean):Integer;
  2. var
  3.   i:Integer;
  4. begin
  5.   numv:=0;
  6.   for i:=0 to High(polygons) do
  7.   if PolygonIn(polygons[i])then
  8.   begin
  9.     Inc(numv);
  10.     if Add then
  11.     begin
  12.       setLength(poly,numv);
  13.       poly[numv-1]:=polygons[i];
  14.     end;
  15.   end;
  16.   Result:=numv;
  17. end;


Es ist es so, dass sich "Add" in der Funktion niemals ändern wird, trotzdem wird für jedes Polygon, dass im Knoten ist neu verglichen und darum wollte ich mal diese minimale Änderung vorschlagen:

Code:
  1. function TNode.HowManyPolygons(const polygons : array of PPolygon; Add:Boolean):Integer;
  2. var
  3.   i:Integer;
  4. begin
  5.   numv:=0;
  6.  
  7.   if Add then
  8.   begin
  9.     for i := 0 to High(polygons) do
  10.       if PolygonIn(polygons[i]) then
  11.       begin
  12.         Inc(numv);
  13.         SetLength(poly, numv);
  14.         poly[numv-1] := polygons[i];
  15.       end;
  16.   end
  17.   else
  18.     for i := 0 to High(polygons) do
  19.       if PolygonIn(polygons[i]) then
  20.         Inc(numv);
  21.  
  22.   Result:=numv;
  23. end;


Gerade beim Hauptknoten würden ja bei entsprechnd komplexer Szene etliche Vergleiche auf Grund mehrerer Tausend Polygone gemacht werden, was nicht sein muss.

Dann ist da noch eine Kleinigkeit in der TNode.check-Prozedur:
Code:
  1. if Frustum.IsBoxWithin(
  2.      pos.x,pos.y,pos.z,
  3.      size,size,size)=TRUE then

Ich möchte meinen, hier im Forum irgendwo mal gelesen zu haben, dass Boolean-Wert der nicht auf TRUE gesetzt ist noch nicht unbedingt FALSE sein muss. Quasi wäre es doch eigentlich richtiger, dass "=TRUE" einfach wegzulassen, oder?

und nun letzteres, wobei aber TNode ein gutes Beispiel darstellt, noch eine eher Frage:
Wann sollte man ein Objekt und wann eine Klasse verweden?
[Bei Polymorphie ist es mir klar :)]
Ich habe bisher eigentlich immer mit Klassen gearbeitet :S

MfG
bubble

PS: Irgendwie ist es mir schon ein bischen peinlich, diesen Thread aus seiner Gruft zu holen :S

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Octree-Tutorial
BeitragVerfasst: Mi Mai 04, 2011 14:30 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die ersten Vorschläge (erklärung der Variable ändern und Add Parameter) würde ich direkt übernehmen wollen. Dafür ein Danke und ein Bitte: Bitte direkt im Tutorial anpassen. Du hast das gerade durchgearbeitet und stehst somit tiefer im Stoff als der Tutorialschreiber selbst (der das vor ein paar Jahren zu File gebracht hat).
Du kannst dich im Wiki mit deinem Forenlogin einloggen und ändern. 8)

Das mit dem True sollte erstmal geklärt werden. Das kannst du ja in Tests mal durchexerzieren. Aber da ich kein Delphianer bin, ist dies nicht mein Fachgebiet.

@Klassen vs Objekte: Als Java Mensch sag ich: Nimm Klassen.

Ist das Object in Delphi eine Art Singleton? Keine Ahnung...

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Octree-Tutorial
BeitragVerfasst: Mi Mai 04, 2011 15:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
thebubble hat geschrieben:
Dann ist da noch eine Kleinigkeit in der TNode.check-Prozedur:
Code:
  1. if Frustum.IsBoxWithin(
  2.      pos.x,pos.y,pos.z,
  3.      size,size,size)=TRUE then

Ich möchte meinen, hier im Forum irgendwo mal gelesen zu haben, dass Boolean-Wert der nicht auf TRUE gesetzt ist noch nicht unbedingt FALSE sein muss. Quasi wäre es doch eigentlich richtiger, dass "=TRUE" einfach wegzulassen, oder?

Rein technisch sollte es keinen Unterschied machen. Ist aber lesbarer, wenn man das =True weg lässt.

thebubble hat geschrieben:
und nun letzteres, wobei aber TNode ein gutes Beispiel darstellt, noch eine eher Frage:
Wann sollte man ein Objekt und wann eine Klasse verweden?
[Bei Polymorphie ist es mir klar :)]
Ich habe bisher eigentlich immer mit Klassen gearbeitet :S

Möchtest du die Frage nochmal in einem neuen Thread stellen? Ich beantworte sie gerne ausführlich, aber es ist denke ich besser, wenn das nicht in diesem Thread verschwindet (und abtrennen wäre hier hässlich, da die Frage eine von vielen in einem Post ist).

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Octree-Tutorial
BeitragVerfasst: Mi Mai 04, 2011 15:39 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
So die Änderungen sind jetzt im Wiki ;)
Ich wusste garnicht, dass da jeder so leicht ran kann.

@Lord Horazont: Hab das Thema erstellt: klick

MfG
bubble

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Octree-Tutorial
BeitragVerfasst: Fr Mai 13, 2011 20:20 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
*spritzt Weihwasser auf den Thread*

Ich glaub, den schließ ich einfach mal ganz dreist, bevor hier noch mehr Leichen ausgegraben werden ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 61 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Foren-Übersicht » DGL » Feedback


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]