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

Aktuelle Zeit: Di Mai 14, 2024 23:06

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Feb 21, 2010 14:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Moin,
ich habe auch mal eine Frage :)

Also, kann mir jemand sagen wie die FixedFunction-Pipeline reagiert, wenn ich 3D Texturkoordinaten verwende, aber nur eine 2D Textur gebunden habe? In der dritten Koordinate speichere ich nämlich welche Textur benutzt werden soll, aber es soll eine Fallback-Lösung geben, falls kein Fragmentshader verfügbar ist. Ich würde jetzt erwarten, dass diese dritte Koordinate einfach ignoriert wird. Stimmt das?

Bei mir hat so gut wie jedes Polygon (einige wenige Dreiecke) eine eigene Textur. Bei der Fallback-Lösung würde ich dann pro Textur einen eigenen Render-Durchgang benutzen. Mit einem Shader können natürlich bis zu GL_MAX_TEXTURE_IMAGE_UNITS_ARB Texturen auf einmal gerendert werden. Bei meiner Grafikkarte wären das 32 Texturen, was in den meisten Fällen für ein Objekt reichen dürfte.

Andere Frage:
Gibt es vielleicht bei der FixedFunctionPipeline eine Möglichkeit jedem Dreieck gezielt eine Textur zuzuweisen ohne für jede Textur einen eigenen Render-Durchgang durchzuführen?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 21, 2010 15:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ist eine Displayliste innerhalb derer die Polygone einzeln gerendert werden vielleicht doch schneller als ein Shader, da die Texturunits effizienter genutzt werden können? Weiß das jemand? Naja, wahrscheinlich muss ich das auf verschiedener Hardware ausprobieren.

Ich muss tausende derartiger Objekte (*) rendern, also Performance ist schon wichtig.

(*) es handelt sich um Gebäude einer realen Stadt, die Texturen sind Fotos der realen Gebäude.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 21, 2010 15:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Coolcat hat geschrieben:
Also, kann mir jemand sagen wie die FixedFunction-Pipeline reagiert, wenn ich 3D Texturkoordinaten verwende, aber nur eine 2D Textur gebunden habe? In der dritten Koordinate speichere ich nämlich welche Textur benutzt werden soll, aber es soll eine Fallback-Lösung geben, falls kein Fragmentshader verfügbar ist. Ich würde jetzt erwarten, dass diese dritte Koordinate einfach ignoriert wird. Stimmt das?

Ja, da liegst du richtig. Die Varianten 1f, 2f, 3f setzen ja nur die passenden s,t,r Variablen. Wenn du dann nur 2D texturierst wird r ignoriert.

Coolcat hat geschrieben:
Andere Frage:
Gibt es vielleicht bei der FixedFunctionPipeline eine Möglichkeit jedem Dreieck gezielt eine Textur zuzuweisen ohne für jede Textur einen eigenen Render-Durchgang durchzuführen?

Eigentlich nicht. Es sei denn du würdest es über die Slices in einer 3D-Textur machen.

Coolcat hat geschrieben:
Ist eine Displayliste innerhalb derer die Polygone einzeln gerendert werden vielleicht doch schneller als ein Shader, da die Texturunits effizienter genutzt werden können? Weiß das jemand? Naja, wahrscheinlich muss ich das auf verschiedener Hardware ausprobieren.

Da Displaylisten vom Treiber ja extremst gut optimiert werden können sollten diese selbst heute die performanteste Lösung für statische Geometrie sein. Hängt natürlich davon ab wie dein CPU<->GPU-Ratio ist. Kommt halt auf die Sichtbarkeit an. Wenn man immer die komplette Liste sieht ists sicher schneller, aber wenn man Sichtbarkeitsprüfungen macht weil man nur Teile sieht sollte mans natürlich nicht in eine große Liste packen. Aber ich denke dessen bist du dir bewusst ;)

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 21, 2010 15:48 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

Zitat:
Gibt es vielleicht bei der FixedFunctionPipeline eine Möglichkeit jedem Dreieck gezielt eine Textur zuzuweisen ohne für jede Textur einen eigenen Render-Durchgang durchzuführen?


Naja die einfachste Möglichkeit wäre es vor jedem Dreieck ( oder Polygon ) die passende Textur-Objekt-Id zu übergeben.
Um die Anzahl der glBindTexture() zu minimieren, wäre es sinnvoll, die Dreiecke vorher nach der Textur-Id zu sortieren.


Die Anzahl der Textur-Aufrufe wird in deinem speziellen Beispiel mit der Stadt denk ich mal nicht das Problem sein, dann wohl eher das Rendern in den Framebuffer.

Du solltest auf jeden Fall Backface-Culling, Front-To-Back-Sorting ( falls du kein Alpha-Blending benutzt ) und Occlusion-Culling einsetzen, dann dürfte es mit der Performance keine Probleme mehr geben :)

Viele Grüße
dj3hut1

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 21, 2010 16:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Eigentlich nicht. Es sei denn du würdest es über die Slices in einer 3D-Textur machen.

Oh, daran hatte ich noch nicht gedacht. Ist aber wahrscheinlich zu aufwendig für den Nutzen den es bringt. Insbesondere weil die Texturen eine beliebige Größe haben können. Auch bin ich mir nicht sicher ob alte Hardware überhaupt mit Array-Texturen klar kommt. Echte 3D-Texturen kommen nicht in Frage, den das würde Fehler beim Filtering bringen.

Zitat:
Da Displaylisten vom Treiber ja extremst gut optimiert werden können sollten diese selbst heute die performanteste Lösung für statische Geometrie sein.

Ja, das stimmt, das Problem an der Sache ist das ich diese relativ häufig neu generieren muss. Es ändert sich aber immer nur ein Gebäude gleichzeitig, also sollte das gehen wenn jedes Gebäude seine eigene Displayliste bekommt.

Zitat:
Um die Anzahl der glBindTexture() zu minimieren, wäre es sinnvoll, die Dreiecke vorher nach der Textur-Id zu sortieren. (...) Du solltest auf jeden Fall Backface-Culling, Front-To-Back-Sorting ( falls du kein Alpha-Blending benutzt ) und Occlusion-Culling einsetzen, dann dürfte es mit der Performance keine Probleme mehr geben :)

Das ist klar, alles schon vorgesehen. Ich setzte zudem auf einen depth-only Pass zum füllen des Z-Buffers und LOD-Geometrie. Occlusion-Culling macht in Kombination mit dem depth-only allerdings wenig Sinn, da meine Objekte sowieso relativ Low-Poly sind. Problematisch ist sowieso nur die schiere Masse an hochauflösenden Texturen. Mega-Textures wären hier wahrscheinlich die richtige Lösung, aber die soll ich nicht implementieren, wäre recht aufwendig und meine Zeit ist stark begrenzt.

Danke für eure Antworten :)

_________________
Yeah! :mrgreen:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 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.031s | 19 Queries | GZIP : On ]