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

Aktuelle Zeit: Fr Jul 18, 2025 08:18

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Feb 02, 2009 14:24 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

gibt es eine möglichkeit die daten die man glTexImage2D als pointer übergibt channel-weise zu übergeben?

Also z.B. bei einem 320x240 bild habe ich einen buffer der größe 320 * 240 * 3, allerdings sind da die ersten 320*240 byte der Rot-wert, dann die nächsten 320*240 grün und die letzten blau.. also nicht immer ein byte R, dann eins G, eins B, wieder eins R etc..

Klar könnte ich das selbst mir umbasteln, aber für meien zweck wäre es mehr als ideal wenn es da irgendeine extension oder so gäbe.., gibt es die? ^^
Und wenn ja, hat die besondere geschwindigkeits nachteile oder so?? (Dürften ja nur minimal sein wenn, denn die daten werden so oder so ja in den vram kopiert..)

Danke~

Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 02, 2009 14:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also eine Erweiterung die so etwas direkt macht wäre mir neu. Du könntest so etwas aber vielleicht mit einem TextureArray (gf8 Extension) lösen. Dabei würdest du so tun als hättest du 4 Texturen mit jeweils einem Kanal. Das müsstest du dann aber mit Shader wieder zusammenbauen. Bzw mit Shadern könntest du auch eine normale Textur machen und dann mit 4 Texturzugriffen dann 4 Werte holen und die mit Shadern passend zusammenpacken.

Allerdings hast du dann überall 4 anstelle von einem Texturzugriff. Und ob das so optimal und sauber gelöst ist lasse ich mal dahingestellt. Zu mal die Anforderungen an eine ordinäre Textur so deutlich erhöht werden.

Mich wundert allerdings gerade wo du solch ein komisches Format herbekommst?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 02, 2009 15:12 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kann sowas passieren, wenn statt Zeilenweise Spaltenweise gelesen wird?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 02, 2009 20:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Lossy eX hat geschrieben:
Mich wundert allerdings gerade wo du solch ein komisches Format herbekommst?


Herbekommen im grunde nirgendwo, darum geht es mir auch nicht :)

Ich hab das "problem", dass meine Bitmap-Klasse von der auch die Texture-Klasse gebrauch macht multi-channel fähig sein soll..
Also ich möchte gern einfach zur laufzeit auf knopfdruck noch einen farb-kanal hinzufügen, beliebig viele..

Ich mach das dann jetzt wohl so das ich RGB(A) wie gewohnt speichere und zusätzliche kanäle eben extra.. wär nur schön gewesen ein einheitliches schema dafür zu haben :/

Aya~

PS: Herbekommen tut man solche daten aber btw auch z.B. beim OpenEXR Dateiformat, das ist auch multi-channel fähig ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 03, 2009 10:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das Interesse an dem woher war erst gemeint. Auch wenn sich das vielleicht nicht ganz danach angehört hat. Denn bisher kenne ich es nur so, dass die Bilddaten eben pixelorientiert sind. Heißt ja aber nicht, dass es anders keinen Sinn machen würde. ;)

Aber ich denke die Speicherung von RGB(A) + seperate Kanäle ist da wohl schon das Sinnvollste. Wobei du aber wahrscheinlich so oder so auf mehr als eine Textur umsteigen musst. Denn eine OpenGL Textur kann nur 1-4 Kanäle besitzen. Mit Texture_arrays könntest du "mehrere" gleiche Texturen an eine TMU binden (leider 1 kompletter Speicherbereiche mit texturen hintereinander). Damit könntest du theoretisch dieses Kanäleprinzip erreichen. Müsstest dann aber für jeden Kanal ein mal die TMU um ein Pixel bemühen. Außer du machst "RGBA" Kanäle und interpretiert die Werte nach deinen Vorstellungen. Dann hast du nur noch 1/4tel Zugriffe. TextureArrays sind leider sehr neu. Sonst Multitexturing. Das belastet aber die Anzahl der TMUs.

Denn ich könnte mir schon vorstellen, dass es eventuell etwas umständlich ist die Kanäle immer zusammen bauen zu müssen. Da wäre eine Programmtechnische Haltung in Kanäle wohl mitunter deutlich sinnvoller. In der glBitmap dauert das Hinzufügen eines einzelnen Alphakanals leider auch schon gehörig Zeit. Von daher kann ich nur davon abraten das zu oft zu machen und du solltest den Code dann auf diesen Fall spezialisieren. Wenn das dann noch halbwegs gut durchdacht ist, dann gehts auch schnell.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 03, 2009 11:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hmm... Wie wäre es mit einer 3D-Textur? X und Y sind die normalen Pixel und die Z-Achse sind die Kanäle? Wenn man die Koordinaten richtig trifft bekommt man auch kein Problem mit eventuellem Filtering (oder man schaltet es einfach aus).

Gruß Lord Horazont

_________________
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:
BeitragVerfasst: Di Feb 03, 2009 13:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

Texture Arrays etc hatte ich auch schon drüber nachgedacht, finde ich aber alles sehr suboptimal (+ zu hohe anforderungen) :(

Das mit der 3D Textur klingt eigentlich sogar als könne es funktionieren, aber wirklich schnell sind 3D Texturen jetzt auch nicht, oder? Zumal ich eigentlich immer nur 3 kanäle (+ evtl Alpha) anzeigen möchte.. also nie alle aufeinmal.

Im moment sieht mein plan dafür so aus, dass ich halt RGBA ganz normal speichere und die zusätzlichen kanäle dann separat und für den fall das ich diese mal anzeigen möchte dann halt per multitexturing.. zwar nicht das optimalste, aber bei mir geht es weniger um geschwindigkeit diesmal.

Mit den einzelnen channels wäre es nur um einiges komfortabler und einheitlicher gewesen.. :/

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 03, 2009 14:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Du könntest ja die Textur mit 4 layer anlegen und dann immer nur den Inhalt der Layer austauschen. Je nach dem, was gerade gebraucht wird. Eventuell auch nur drei Layer, die aber jeweils noch einen Alphakanal haben, der Performance zu liebe (wobei das natürlich den Speicherverbrauch erhöht).

Gruß Lord Horazont

_________________
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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


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