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

Aktuelle Zeit: Mi Jul 16, 2025 19:43

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



Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 23, 2007 16:42 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ok ..
es lag ah Blending
der Alphawert hat die Farben verfälscht.
mit glDisable(GL_BLEND); funktioniert es.
Mein gott was das zeit kostet , so kelinigkeiten.

aber ich kann den Alphawert nicht rausbekommen mit glReadPixels(x,y,1,1,GL_ALPHA,GL_UNSIGNED_BYTE,@VBOCoord[3]);
da bekomm ich immer 255, obwohl der apfawert 100 ist. es macht keinen unterschied ob GL_BLEND an oder aus ist .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 23, 2007 17:24 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Hast du einen 24 oder 32 Bit Renderingkontext?

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 23, 2007 17:54 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Also Colorbits hab ich 32

Code:
  1. RC:= CreateRenderingContext( DC,
  2.                                [opDoubleBuffered],
  3.                                32,
  4.                                24,
  5.                                0,0,0,
  6.                                0);



Wieso ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 23, 2007 21:41 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das mit dem Alpha kann eventuell an glShadeModel(GL_FLAT) liegen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 24, 2007 11:22 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ne liegt leider nicht daran :(

an was kanns denn noch liegen ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 24, 2007 12:05 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hast du eine NVidia Grafikkarte? Die sind nämlich so geil und lassen den Alphakanal einfach weg sobald der nicht explizit mit angegeben wurde. Selbst dann wenn man 32 Bit Farbtiefe angegeben hat. Dann bleiben halt 8 Bit ungenutzt. Warum auch immer NVidia so etwas irrsinniges macht.

Du müsstest dann beim Erstellen des RCs in der PixelFormat Description das Feld cAlphaBits explizit auf 8 setzen.

Allerdings denke ich, dass es wohl besser wäre wenn du selber einen RC erstellst. Also nicht mit Hilfe der Methoden CreateRenderingContext. Denn der erstellte Kontext muss sich nicht zwingend daran halten was du von ohm möchtest. Denn sobald du 16 Bit Farbtiefe im System hast hat der RC auch nur 16 Bit Farbtiefe. Auf ATI bekommt man noch zusätzlich einen 8 Bit Alphakanal wenn man das möchte aber trotzdem haben die RGB Werte nur 16 Bit. Somit bekommst du keine Sinnvollen Ergebnisse mehr.

Das müsstest du abfangen und den Dienst verweigern oder speziell darauf reagieren. In der Methode CreateRenderingContext steht der Befehle DescribePixelFormat. Mit diesem wird das Format befragt wie dessen Eigenschaften aussehen. Dort enthalten ist das Feld cColorBits bzw. cRedBits, cGreenBits, cBlueBits, cAlphaBits. Für den einfachen Weg genügt es, wenn du überprüfst ob 32 Bit Farbtiefe auch zurückgegeben wurde. Evtl auch noch ob alle entsprechenden Felder 8 Bit haben. Und sollte dies nicht der Fall sein so müsste deine Anwendung abbrechen und die Ausführung verweigern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 24, 2007 12:27 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Ja .. ich hab ne NVidia.
Die Theorie hab ich verstanden .. hab mir auch mal die Funktion createRenderingContext angeschaut. und ich üwsste nicht wie ich den Alpha kanal aktiviere oder ich mir die funktion selbst schreibe.. :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 24, 2007 13:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also generell sieht der Aufbau so aus.
- PixelFormatDescriptor (PFDescriptor) befüllen
- Ein passendes Pixelformat auswählen (ChoosePixelFormat)
- das ausgewählte Pixelformat dem DeviceContext (DC) zuweisen (SetPixelFormat)
- OpenGL RenderContext (RC) erstellen.

Wenn du einfach nur 8 Bit Alpha hinzufügen willst dann genügt es folgendes zu tun.
Code:
  1.     cColorBits := ColorBits;
  2.     if ColorBits = 32 then // <<< NEU
  3.       cAlphaBits := 8;     // <<< NEU


Und sonst kann ich dur nur Empfehlen. Schau dir die Methode in dem OpenGL 2.1 Header (Ohne .NET) an. Dort habe ich die Methode schon etwas ausfegräumt gehabt.

Zum Überprüfen ob du auch 32 Bit RGBA kannst du den PixelFormatDescriptor nach dem Aufruf von DescribePixelFormat auf seine Gültiggeit untersuchen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 24, 2007 13:55 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ok .. mit der Zeile klappt es :) .. FREU


danke an alle , die mir geholfen haben :)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.012s | 14 Queries | GZIP : On ]