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

Aktuelle Zeit: Fr Jul 18, 2025 11:17

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Geschwindigkeit von glNormal3b
BeitragVerfasst: Di Dez 01, 2009 23:23 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Hallo,

Um Speicherplatz (bei x Mio Dreiecken) möchte ich die Vertexnormalen nicht als Vector3f sondern als Vector3b also als glNormal3b = 3x ShortInt (-128 bis 127) speichern und dann auch so Zeichnen.

Hat schon mal jemand damit gearbeitet und Efahrungen? Wenn Ja - welche?
Sind ggf gößere Geschwindigkeitseinbußen zu befürchten?
Könnte es evtl. auf manchen Grafikkarten (z.b. Auch auf einfachen SIS odder Inegrated on Board) zu Problemen führen?
Reicht da ein mapping von -127 bis +127 aus? (da ja die maximalwerte (also -128 und +127) zu -1 oder +1 gemappt werden).

Hoffe Ihr könnt mir helfen
User69


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Geschwindigkeit von glNormal3b
BeitragVerfasst: Mi Dez 02, 2009 00:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Da du glNormal3b erwähnst vermute ich das du den "Immediate Mode", also glBegin()...glEnd() verwendest. Wenn du bei "x Mio Dreiecken" wirklich Performance rausholen willst, solltest vielleicht auf VertexBufferObjects umsteigen. Dort hast du außerdem die volle Kontrolle darüber was im Speicher landet. Ich wäre mir nämlich nicht so sicher ob glNormal3b die Normale auch als ShortInt speichert, wäre möglich dass das einfach zum Float wird.

Das Mapping sollte allerdings automatisch korrekt sein.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Geschwindigkeit von glNormal3b
BeitragVerfasst: Mi Dez 02, 2009 09:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Dough....

dieser Thread erinnert mich daran, dass ich eigentlich die DGL Benchmark Spec mal umsetzen wollte...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Geschwindigkeit von glNormal3b
BeitragVerfasst: Mi Dez 02, 2009 11:20 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Erst mal danke für die Kommentare.
Hier ein paar ergänzungen dazu...

Ich nutze dafür glBegin()...glEnd(), das ist richtig.
VBO habe ich derzeit nicht gaplant, da es nicht auf allen OpenGL implementationen verfügbar ist. Ich darf nur Features nutzen die alle "normalen" modernen Rechner (Grafikkarten unabhängig) zur Verfügung stellen.

Im Prinzip such ich auch nicht nach Performace, sondern möchte sicherstellen, daß bei der Änderungen von glNormal3f auf glNormal3b keine Performanceenbrüche auftreten.

Mein Ziel ist die speicherung der Daten in meinem Programm zu minimieren (unter Windows 32 Bit hab ich leider nur knapp 2 GB):
glNormal3f benötigt 3*3*4 Byte = 36 Byte
glNormal3b benötigt 3*3*1 Byte = 9 Byte
Das spart mir im Speicher 27 Byte /Dreieck was ca 25% weniger Speichernutzung bring = Mein Ziel

Natülcih möchte ich dann aus Performancegründen diese Normale gleich als glNormal3b zeichnen und nicht wieder zu glNormal3f vor jedem zeichnen umrechnen.

Hast schon jemand Erfahrungen mit glNormal3b gemacht???

Grüße
User69


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Geschwindigkeit von glNormal3b
BeitragVerfasst: Mi Dez 02, 2009 11:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
VBO habe ich derzeit nicht gaplant, da es nicht auf allen OpenGL implementationen verfügbar ist. Ich darf nur Features nutzen die alle "normalen" modernen Rechner (Grafikkarten unabhängig) zur Verfügung stellen.

Also VBO's sollte mittlerweile wirklich überall verfügbar sein. Sie sind Teil von OpenGL 1.5, also garantiert verfügbar, wenn OpenGL 1.5 verfügbar ist und das ist schon 6 Jahre alt. Und davor wahren sie schon als Extension verfügbar...ich behaupte mal wenn du einen Rechner mit 2 GB RAM brauchst, dann kannst du auch VBOs voraussetzen...

Zitat:
(unter Windows 32 Bit hab ich leider nur knapp 2 GB)

Ich weiß nicht was du da machst, aber 2 GB Geometriedaten sind eine Menge Holz! Gut das Betriebsystem braucht natürlich auch was, aber dir ist schon klar das die Geometrie entweder auf der Grafikkarte gespeichert (VBO, Displaylisten) werden muss oder in jedem Frame vom Hauptspeicher rüberkopiert (glBegin()...glEnd() oder VertexArrays) werden muss? Insbesondere bei älteren Grafikkarten mit AGP-Port ist die Verbindung zwischen Hauptspeicher und Grafikkarte der Flaschenhals. AGP 1x schafft gerade mal 266 Mb pro Sekunde. Allerdings passt in den Grafikspeicher natürlich auch nicht gerade viel, zumindest wenn du von älteren Karten ausgehst.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Geschwindigkeit von glNormal3b
BeitragVerfasst: Mi Dez 02, 2009 12:59 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@user69: Willst du nur Speicher einsparen oder möchtest du die Performance steigern?

Wenn du viele Infos zeichnest sind Raumunterteilungstechniken (siehe Wiki) wirklich der größte Bringer, vor Allem wenn du dich IN der Szene befindest und nicht immer davor.

Alternativ kann dir LOD (Level Of Detail) helfen Datenmengen einzusparen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Geschwindigkeit von glNormal3b
BeitragVerfasst: Mi Dez 02, 2009 13:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Vielleicht auch ganz interessant:
http://wiki.delphigl.com/index.php/Performance

Edit: Möglicherweise könntest du übrigens durch die Verwendung von Indices ungefähr 80% Speicher einsparen. Liegt aber daran was du genau machst.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Geschwindigkeit von glNormal3b
BeitragVerfasst: Mi Dez 02, 2009 14:04 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Also mit der Performance bin ich zufrieden. Ich zeichne mit Trianglestrips und einfach über glBegin und glEnd.
2-3 Mio Dreiecke gehen auf halbwegs modernen Rechner schon ganz gut.

Aber es kommt schon vor daß sehr große Datenmengen dergestellt werden sollen (Das will ich zumindest mit verminderter Performance) erlauben. Derzeit kann ich so etwa 12 Mio Dreiecke im Speicher halten. Mit der Änderung wären es ca. 25% mehr.

OpenGL 1.5 kann ich nicht nutzen, da ich im zweifelsfall mit der Softwareimplementierung von Microsoft leben muss, die 1.2 ist.

Indices muß ich mir mal zu gemüte führen.

Grüße
Ingo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Geschwindigkeit von glNormal3b
BeitragVerfasst: Sa Dez 05, 2009 00:11 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Es gäbe da auch noch Mesa als OpenGL-kompatible Bibliothek, mit der man im Notfall den nicht vorhandenen oder zu alten Hardware-Renderer ersetzen könnte. Nur so als Idee weil du schon den Microsoft-Software-Renderer im Kopf hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Geschwindigkeit von glNormal3b
BeitragVerfasst: Sa Dez 05, 2009 09:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich muss da mal generell was zu OpenGL sagen. OpenGL ist erweiterungsbasiert und entsprechend werden bestehende Techniken mitunter verbessert etc. Was ich damit sagen will. Du kannst eine Kombination aus Vertex Array und Vertex Buffer Object benutzten. VBOs basieren auf VAs. Die sind sich also sehr sehr ähnlich. Nur mit dem Unterschied, dass bei VBOs die Daten vor dem Zeichnen zur Grafikkarte übertragen werden müssen und ein paar Befehle mehr aufgerufen werden müssen (inklusive Überprüfung Erweiterung/OpenGL Kern Version). Sonst sind sie identisch. VAs sind im übrigen so alt, dass die bereits in dem Software Renderer enthalten sind.

Warum ich das erwähne. Im Imediate Mode (glBegin/glEnd) hast du immer irgendwo eine Beschränkung der Leistung durch die CPU/Kleckerweise Datenübertragung vom RAM zur GPU. Ein VA würde dort unnötige Aufrufe schon mal elimenieren. Kann aber auch keine Wunder bewirken. Selbst Karten von vor 4-5 Jahren waren technisch in der Lage 200+ Millionen Dreiecke pro Sekunde zu zeichnen. Rein Praktisch ist man dort mit VBOs aber immerhin noch bei 20-60 Mio gelandet. Im Imediate Modus wird man so etwas nicht erreichen können.

Du hättest so mit vertretbarem Aufwand die Möglichkeit wirklich neue Hardware zu unterstützen bzw im Falle der nicht Unterstützung würdest du bis OpenGL 1.1 zurückfallen können. Von daher solltest du dich in keinem Fall gegen neuere Technologien entscheiden. Es ist dir überlassen ob du eine Erweiterung vorraussetzt oder ob du sie benutzt, wenn sie verfügbar ist. Das ist kein Muss.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]