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

Aktuelle Zeit: Sa Jul 19, 2025 20:59

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Ein weiteres Blending Problem
BeitragVerfasst: Di Jan 12, 2010 13:29 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Ich hatte schonmal so ein ähnliches Blending Problem. Damals habe ich noch GLScene verwendet. Nun wollte ich das mit OpenGL machen. Und zwar habe ich mehrere Cylinder die wie Kreise um eine Kugel kreisen. Jetzt möchte ich, dass der Bereich an dem die Zylinder sich schneiden heller erscheint. Sprich doppelt so hell wenn zwei Cylinder sich schneiden, dreifach so hell bei drei Cylindern. Ich habe das mal mit glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) probiert. Ich bekomme nun zwar eine Art Blending hin, nur ist der resultierende Bereich an den Schnittpunkten der Cylinder immer recht dunkel und nicht doppelt,dreifach,etc. so hell. Bei GLScene habe den Depthtest und das Culling abgeschalten, ebenso bei OpenGL. Desweiteren habe ich bei GLScene noch eine dunkle Kugel ins Zentrum gesetzt, welche nicht transparent ist, da man ansonsten durch die Cylinder durchschaut. Das sah auch alles recht schön aus, nur bekomme ich das Resultat nicht in Standard-OpenGL hin.
Hat jemand von Euch vielleicht eine Idee? Die Cylinder haben nur Grauwerte.

Hier ist der Source Code:

Code:
  1.  
  2. glScalef(3,3,3);
  3.    glObj2 := gluNewQuadric;
  4.    gluQuadricDrawStyle(glObj2 ,GLU_FILL);
  5.    glEnable(GL_Color_Material);
  6.    glColor4f(0.5,0.5,0.5,1);
  7.    gluSphere(glObj2,1,64,64);
  8.  
  9.    glGetFloatv(GL_MODELVIEW_MATRIX, @ModelViewMatrix);
  10.  
  11.    glDisable(GL_DEPTH_TEST);
  12.    glEnable(GL_CULL_FACE);
  13.    glEnable(GL_BLEND);
  14.    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  15.    glEnable(GL_COLOR_MATERIAL);
  16.  
  17.    for i:=0 to length(FSphere)-2 do
  18.    begin
  19.       if FSphere[i].visible then
  20.       begin
  21.         glPushMatrix;
  22.         glObj := gluNewQuadric;
  23.         glColor4f(GetRValue(FSphere[i].Color)/255,GetGValue(FSphere[i].Color)/255,GetBValue(FSphere[i].Color)/255,0.1);
  24.         glMultMatrixf(@FSphere[i].Matrix);
  25.         gluCylinder(glObj,1,1,FSphere[i].height,64,64);
  26.  
  27.  
  28.         glGetFloatv(GL_MODELVIEW_MATRIX, @ModelViewMatrix);
  29.         glPopMatrix;
  30.       end;
  31.    end;    
  32.  
  33.    glDisable(GL_COLOR_MATERIAL);
  34.    glEnable(GL_DEPTH_TEST);
  35.    glDisable(GL_CULL_FACE);
  36.    glDisable(GL_BLEND);
  37.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein weiteres Blending Problem
BeitragVerfasst: Di Jan 12, 2010 16:20 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Zeig mal ein Beispiel vom Endergebnis.
Also was du erreichen willst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein weiteres Blending Problem
BeitragVerfasst: Di Jan 12, 2010 17:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Mir scheint du willst additives Rendering erreichen, dafür brauchst du glBlendFunc(GL_ONE, GL_ONE). Allerdings werden deine Zylinder dann auf die gesamte Szene addiert.

Falls du additives Rendering zwischen den Zylindern, aber Alpha-Blending (*) zwischen Zylinder und Kugel möchtest würde ich das als "nicht-trivial" bezeichnen. Falls es das ist was du willst sag nochmal Bescheid, müsste ich was länger drüber nachdenken wie man das effizient hin bekommt. Wahrscheinlich kann man das irgendwie über den Alphakanal im Framebuffer lösen.


(*) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein weiteres Blending Problem
BeitragVerfasst: Di Jan 12, 2010 20:46 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Letzteres geht bestimmt in zwei schritten. Also er in einen Puffer und dann nochmal blenden.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein weiteres Blending Problem
BeitragVerfasst: Mo Jan 18, 2010 16:56 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
@flash und @Coolcat

Entschuldigt meine späte Antwort, aber ich war eine Woche nicht zu Hause und hatte dementsprechend keinen PC zur Verfügung. Mein Problem existiert nach wie vor. Wie funktioniert das additive Blending zwischen den Zylindern und dann noch einmal ein einfaches Blending zwischen Kugel und Zylinder genau in zwei Schritten? Einzeln bekomme ich das wohl hin. Aber da sieht mein Ergebnis nicht so aus, wie ich das gerne möchte. :(

heavenssake007


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 » Einsteiger-Fragen


Wer ist online?

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