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

Aktuelle Zeit: Sa Jul 19, 2025 02:43

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
 Betreff des Beitrags: Re: vertex arrays...
BeitragVerfasst: Fr Dez 18, 2009 10:28 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
NerdIII hat geschrieben:
Wölfchen hat geschrieben:
N2array ist dabei mein array mit den normalen... ich haber auch ein indexarray für die normalen aber keine ahnung wie ich es verwenden kann...
Was genau steht im Normalenindexarray anderes drin als im Vertexindexarray? So wie du in deinem letzten Codeschnippsel das Zeichnen mit glBegin beschreibst müssten beide ja identisch sein. Also ich kann jetzt gerade keinen Fehler erkennen.
glNormalPointer nimmt vermutlich keinen Parameter für die Anzahl der Koordinaten auf, weil kein Bedarf da ist. Außer für die Verrechnung mit Lichtquellen fällt mir keine gute Verwendung für Normalen ein und die haben auch alle 3 Koordinaten. Also sei unbesorgt, die 3 steht zwar nicht da, eine Normale ist aber so definiert wie du schon schreibst - wie dein TVertex.



nein, im Indexarray für die Normalen stehen andere Werte und genau das scheint auch das Problem zu sein.

GLDrawElements schaut offenbar im Normalenarray an der, in der Indexliste fürs Vertexarray angegebenen Stelle (!!!) nach einer Normalen und da ich ja Datenmenge sparen wollte habe ich jetzt mehr Normalen als Vertexe und das kann ich mit einem Index nicht mehr abbilden.
Anstatt meine Vertexarrays also zu reduzieren musste ich also mein Normalenarray verdreifachen damit ich auch wirklich an jeder der drei indexverte vom Vertex eine Normale finde(n kann!!) , die dazu passt.

Die Lösung funktioniert aber ich finde sie sch... weil ich aus daten die ich eigentlich reduzieren wollte jetzt noch mehr daten machen musste. Damit ist mein Framerate gewinn gegenüber glbegin(triangles) for i... glend weit kleiner ausgefallen als ich gehofft hatte.
Gäbe es eine Möglichkeit für das Normalenarray einen eigenen Index laufen zu lassen könnte ich ca. 70% datenvolumen einsparen. Ich schau mir jetzt mal noch an wie das bei gldrawarrays ist...

gruß

Wölfchen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: vertex arrays...
BeitragVerfasst: Fr Dez 18, 2009 11:06 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Ich dachte mir schon beim Lesen deines Posts, der etwas unklar war, dass du wieder weniger Normalen verwendest als benötigt. Aber wenn du doch schon selber weißt, wo das Problem liegt, warum schreibst du dann nichts über deinen Verdacht? Oder frag doch gleich konkret: "Kann ich jetzt ein separates Normalenindexarray verwenden?"
Du sagst der erste Codeteil mit den glDrawElements entspricht in seiner Funktion dem mit glBegin und irgendwie würden Normalen da anders interpretiert und untermauerst das noch mit der Aussage, dass der glBegin-Teil zur Prüfung der Normalen diente. Tatsächlich aber verwendest du ganz unterschiedliche Daten und erwartest dass OpenGL von sich aus merkt, dass jeweils 3 Normalen gleich sind und daraus schlussfolgert, dass du davon nur eine verwenden willst.
Dass das nicht sein kann erkennst du sicher selber. Schließlich hast du dir deine Frage ja gerade selber beantwortet.
Als Hobbypsychologe würde ich jetzt sagen, du hast versucht zu verdrängen, dass du 3x so viele Normalen angeben musst wie notwendig und deshalb als Tatsache hingestellt, das OpenGL das so sieht wie du :mrgreen:

Und wie gesagt: Mit Geometry Shadern kannst du die Normalen dann on-the-fly ausrechnen. Dafür musst du aber noch ein bisschen dabei bleiben :wink:

Gruß, Marco


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: vertex arrays...
BeitragVerfasst: Fr Dez 18, 2009 11:15 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
NerdIII hat geschrieben:
Ich dachte mir schon beim Lesen deines Posts, der etwas unklar war, dass du wieder weniger Normalen verwendest als benötigt. Aber wenn du doch schon selber weißt, wo das Problem liegt, warum schreibst du dann nichts über deinen Verdacht? Oder frag doch gleich konkret: "Kann ich jetzt ein separates Normalenindexarray verwenden?"
Du sagst der erste Codeteil mit den glDrawElements entspricht in seiner Funktion dem mit glBegin und irgendwie würden Normalen da anders interpretiert und untermauerst das noch mit der Aussage, dass der glBegin-Teil zur Prüfung der Normalen diente. Tatsächlich aber verwendest du ganz unterschiedliche Daten und erwartest dass OpenGL von sich aus merkt, dass jeweils 3 Normalen gleich sind und daraus schlussfolgert, dass du davon nur eine verwenden willst.
Dass das nicht sein kann erkennst du sicher selber. Schließlich hast du dir deine Frage ja gerade selber beantwortet.
Als Hobbypsychologe würde ich jetzt sagen, du hast versucht zu verdrängen, dass du 3x so viele Normalen angeben musst wie notwendig und deshalb als Tatsache hingestellt, das OpenGL das so sieht wie du :mrgreen:

Und wie gesagt: Mit Geometry Shadern kannst du die Normalen dann on-the-fly ausrechnen. Dafür musst du aber noch ein bisschen dabei bleiben :wink:

Gruß, Marco


Nein ganz so ist das ja nun nicht, ich hatte alles so vorbereitet wie ich dachte das es gebraucht wird.

ich habe ein indexarray das opengl sagt: hey, an der 1ten 5ten und 7ten stelle vom vertexarray findest du die vertices für das dreieck hier.
dann habe ich ein normalenindexarray gebastelt in dem steht:
so liebes opengl an der 1ten, 1ten und 1ten stelle vom normalenarray steht deine normale für diese fläche.

die zweite fläche wollte ich dann basteln mit der 5ten, 7ten und 3ten stelle im vertexarray (man sieht, zwei gleiche die ich wiederverwende) und hätte dann im normalenindexarray gesagt: so liebes gl, für die zweite fläche findest du deine normale an der 2ten, 2ten und 2ten stelle im normalenarray.

der groschen, das gldrawelements die normalen aber an der 1ten, 5ten 7ten und für die zweite fläche an der 5ten, 7ten und 3ten stelle des normalenarrays sucht, weil es den selben index verwendet ist erst heut nacht um halb zwei gefallen. Bis dahin war ich davon ausgegangen, das ich gl einen eigenständig laufenden normalenindex mitgeben könne.
** EDIT **
NerdIII hat geschrieben:
Ich dachte mir schon beim Lesen deines Posts, der etwas unklar war, dass du wieder weniger Normalen verwendest als benötigt.


das stimmt also so nicht, ich habe genau so viele normalen bereitliegen wie flächen gezeichnet werden, und im indexarray für die Normalen sogar verdreifacht - kann aber gl nicht im selben index sagen wo diese zu finden sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: vertex arrays...
BeitragVerfasst: Fr Dez 18, 2009 11:54 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Und wenn du noch erklärst, wie du OpenGL deine Normalenindizes bekannt gemacht hast muss ich mich bei dir entschuldigen. :? :)

Was die Performance angeht kann ich dir aber schon mal folgendes verraten - jetzt wo alles läuft: Deine Daten liegen ja noch im Hauptspeicher des Systems und deiner Anwendung (Client). Wenn du die Daten vorher ein mal auf die Grafikkarte (Server) schiebst muss nicht bei jedem Zeichnen alles was du an Daten hast an die Grafikkarte übermittelt werden. Vorausgesetzt die Grafikkarte hat genügend Speicher. Bei 256MB z.B. ungefähr 10.000.000 Punkte.
Vielleicht hat es schon mal jemand im Thread erwähnt: VBO


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: vertex arrays...
BeitragVerfasst: Fr Dez 18, 2009 12:13 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
NerdIII hat geschrieben:
Und wenn du noch erklärst, wie du OpenGL deine Normalenindizes bekannt gemacht hast muss ich mich bei dir entschuldigen. :? :)


Nö du brauchst dich net entschuldigen, genau das hat ja nicht geklappt :)
mir ist dann nur der ganze sinn von indexarrays unklar, denn ich dachte Sinn und Zweck sei es eben nicht jede ecke an der sich 5 flächen treffen 5 mal im speicher zu haben, sondern eben nur einmal. Dem scheint nicht so zu sein, was solls, baller ich eben 150Mb in die Grafikkarte statt eigentlich nur 40Mb die ich bräuchte :oops:

NerdIII hat geschrieben:
Vielleicht hat es schon mal jemand im Thread erwähnt: VBO


ja, ich selbst :) aber ich verstehe das tutorial nicht :oops: :lol: :lol: aber ich hab ja jetzt zeit *lach


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: vertex arrays...
BeitragVerfasst: Fr Dez 18, 2009 14:38 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Wölfchen hat geschrieben:
Nö du brauchst dich net entschuldigen, genau das hat ja nicht geklappt :)
mir ist dann nur der ganze sinn von indexarrays unklar, denn ich dachte Sinn und Zweck sei es eben nicht jede ecke an der sich 5 flächen treffen 5 mal im speicher zu haben, sondern eben nur einmal. Dem scheint nicht so zu sein, was solls, baller ich eben 150Mb in die Grafikkarte statt eigentlich nur 40Mb die ich bräuchte :oops:

Den Sinn und Zweck hast du richtig verstanden und auf den Punkt gebracht!
Jeder Punkt braucht aber einen kompletten Satz Daten. In deinem Fall Position und Normale. Andere typische Daten pro Punkt sind Farben und Texturkoordinaten.

Bei den VBOs ist es so, dass sich eigentlich nicht viel ändert. Zunächst einmal verwaltet der OpenGL-Treiber den Speicher. Für deine Arrays bekommst du ein sogenanntes Handle, eine Nummer unter der OpenGL dein VBO mit seinen Daten abgelegt hat. Anschließend kannst du deine riesigen Arrays wieder aus dem Hauptspeicher löschen und ihn für was anderes benutzen.
Was mit einem VBO soweit ich weiß nicht geht ist die Größe verändern. (Das geht mit deinem Array ja bisher problemlos.) Daten verändern kannst du aber mittels gl(Un)MapBuffer, wenn du mit Pointern umzugehen weißt.

Variante 1 verwendet glMapBuffer. Also vielleicht probierst du Methode 2, da deine Daten ja schon im Hauptspeicher liegen. Das anschließende Zeichnen geht in beiden Fällen gleich schnell.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]