Problem mit OpenGL unter QT4

Alles rund um die Programmierung mit Qt
Antworten
prof_maad
Beiträge: 40
Registriert: 25. September 2005 14:33
Wohnort: /root/

Problem mit OpenGL unter QT4

Beitrag von prof_maad »

Hallo alle miteinander,

ich bringe mir derzeit OpenGL bei und wollte als Unterlage bzw. GUI Qt nutzen.
Ich habe mir also das OGL-Beispiel für QT4 (Das mit dem QT-Logo) angeguckt und versucht, ein eigenes kleines Test-Prog zu schreiben. Es soll nur 2 ganz simple Formen anzeigen.

Hier der Code meiner von QGLWidget abgeleiteten Klasse:
oglwidget.cpp

Code: Alles auswählen

# include <QtOpenGL/QtOpenGL>
# include <QtCore>

# include "oglwidget.h"

OGLWidget::OGLWidget(QWidget *parent) : QGLWidget(parent)
{
}
OGLWidget::~OGLWidget()
{
    makeCurrent();
}
QSize OGLWidget::minimumSizeHint() const
{
    return QSize(50,50);
}
QSize OGLWidget::sizeHint() const
{
    return QSize(400,400);
}
void OGLWidget::initialiseGL()

{
     glShadeModel(GL_FLAT);
     glEnable(GL_DEPTH_TEST);
     glEnable(GL_CULL_FACE);
}
void OGLWidget::paintGL()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();

  glTranslatef(-1.5f,0.0f,-6.0f);

  glBegin(GL_TRIANGLES);
    glVertex3f( 0.0f, 1.0f, 0.0f);
    glVertex3f(-1.0f,-1.0f, 0.0f);
    glVertex3f( 1.0f,-1.0f, 0.0f);
  glEnd();

  glTranslatef(3.0f,0.0f,0.0f);

  glBegin(GL_QUADS);
    glVertex3f(-1.0f, 1.0f, 0.0f);
    glVertex3f( 1.0f, 1.0f, 0.0f);
    glVertex3f( 1.0f,-1.0f, 0.0f);
    glVertex3f(-1.0f,-1.0f, 0.0f);
  glEnd();
}
void OGLWidget::resizeGL(int width, int heigth)
{
     int side = qMin(width, heigth);
     glViewport((width - side) / 2, (heigth - side) / 2, side, side);

     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0);
     glMatrixMode(GL_MODELVIEW);
}
Alles bis auf den paintGL()-Part ist direkt aus dem Beispiel übernommen.

Wenn ich mir jedoch das Fenster anzeigen lasse, so ist es nur schwarz, ohne jedliche Formen darin.

Falls jemand eine Idee hot, wo der Fehler liegen könnte, wäre ich sehr dankbar.

Danke im Voraus und Ciao,

Prof. MAAD
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Also mal eben aus dem Gedächtnis würd ich folgendes vorschlagen:

Füge:

Code: Alles auswählen

 glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0);
     glMatrixMode(GL_MODELVIEW); 
auch mal beim InitializeGL ein.
Das Nächste Problem dabei ist, das deine Koordinaten von glVertex3f alle mit Z-Koordinate 0.0 sind. Aber bei glOrtho hast du die Front-Clipping Plane mit 4.0 definiert. d.h. die Sachen die du auf 0.0 zeichnest werden weggeclippt.

Und dann fehlt evtl. noch ein updateGL Aufruf deiner von QGLWidgets abgeleiteten Klasse in deinem Hauptprogramm.

Wenn dir das nicht weiterhilft kann ich eventuell nochmal drüber gucken und es selbst ausprobieren.

Grüße
Volker
prof_maad
Beiträge: 40
Registriert: 25. September 2005 14:33
Wohnort: /root/

Beitrag von prof_maad »

Danke erstmal,

ich habe die Clipping-Plane jetzt auf 0.0 gesetzt, und den Code wie du gesagt hast, eingefügt.

Aber leider funktioniert es immer noch nicht.

Es wäre echt toll, wenn jemand mir noch nen Tipp geben könnte.

Danke im Voraus und Ciao,

Prof. MAAD
Antworten