[gelöst] OpenGL Blending
Verfasst: 3. Mai 2010 22:00
Versuche derzeit die Blending Option von OpenGL zu nutzen. Soweit scheint auch alles zu laufen, nur wirkt das Blenden über den Aplha Channel bei mir eher als dunkles Licht statt als Transparenz. Egal wie ich es einstelle, scheinbar will es die Transparenz nicht aktualisieren. Ich halte mich dabei hauptsächlich an die NeHe Lektion 8:
http://nehe.gamedev.net/data/lessons/le ... ?lesson=08
Ich poste mal hier teile des Codes, vielleicht weiß ja jemand ob ich bei Qt noch etwas aktivieren oder einen speziellen QGL Befehl verwenden muss, habe bisher allerdings keinen passenden in der Datenbank gefunden:
Sind soweit die einzigen Funktionen, in denen ich Blending Optionen verwendet habe.
http://nehe.gamedev.net/data/lessons/le ... ?lesson=08
Ich poste mal hier teile des Codes, vielleicht weiß ja jemand ob ich bei Qt noch etwas aktivieren oder einen speziellen QGL Befehl verwenden muss, habe bisher allerdings keinen passenden in der Datenbank gefunden:
Code: Alles auswählen
void displayWidget::initializeGL(){
// matrix init
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-.5, .5, .5, -.5, -1000, 1000);
glMatrixMode(GL_MODELVIEW);
// shading, depth and background init
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
qglClearColor(Qt::black); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
// GL options
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping
glEnable(GL_CULL_FACE);
glEnable(GL_MULTISAMPLE); // Enable Multisampling
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
// Light Options
glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); // sets the ambient Light1
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // sets the diffuse Light1
glLightfv(GL_LIGHT1, GL_POSITION, LightPosition); // sets the position of Light1
glEnable(GL_LIGHT1); // Enables Light1 (light won't work without overall light enable)
// Blending Options
glColor4f(1.0f,1.0f,1.0f,0.5f); // Full Brightness, 50% Alpha - fourth value for alpha: 0.0 = full transparency, 1.0 = full opaque
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_DST_ALPHA); // Blending Function For Translucency Based On Source Alpha Value
object = makeObject(); // Generate an OpenGL display list
}
/* -------------------------------------------------------------------------------- */
void displayWidget::switchBlending(){
if(blending){
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
blending = false;
emit statusMsg("Blending enabled");
} else {
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
blending = true;
emit statusMsg("Blending disabled");
}
updateGL();
}
/* -------------------------------------------------------------------------------- */
GLuint displayWidget::makeObject(){
GLuint list;
list = glGenLists(1);
glNewList(list, GL_COMPILE);
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// glColor3f(1.0f, 1.0f, 1.0f);
glLoadIdentity();
glTranslatef(0.0f,0.0f,z);
glRotatef(xRot, 1.0, 0.0, 0.0);
glRotatef(yRot, 0.0, 1.0, 0.0);
glRotatef(zRot, 0.0, 0.0, 1.0);
if(img = loadBMP("glass.jpg"))
bindTexture(*img, GL_TEXTURE_2D, GL_RGBA);
glBegin(GL_QUADS);
// Front Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Texture and Quad
[...] /* Würfel zeichnen */
