Qt und OpenGL Probleme
-
Hallo,
Ich habe ein Problem mit Qt in Verbindung mit Opengl:
Wenn ich z.B.: Dreiecke zeichnen will, erscheinen sie nicht, aber ich glaube der Code dürfte es besser erklären.#include <QtGui> #include <QtOpenGL> #include <math.h> #include "glwidget.h" #include "physics.h" #ifndef GL_MULTISAMPLE #define GL_MULTISAMPLE 0x809D #endif GLWidget::GLWidget(QWidget *parent) : QGLWidget(QGLFormat(QGL::SampleBuffers), parent) { qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0); physx = new physics; double pos[6]={-1,-2,0,1,3,0}; physx->init(2, pos, 0,0); } GLWidget::~GLWidget() { } QSize GLWidget::minimumSizeHint() const { return QSize(50, 50); } QSize GLWidget::sizeHint() const { return QSize(400, 400); } void GLWidget::initializeGL() { qglClearColor(qtGreen.dark()); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); // glEnable(GL_CULL_FACE); glShadeModel(GL_SMOOTH); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_MULTISAMPLE); static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 }; glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); paintGL(); } void GLWidget::paintGL() { physx->compute2D(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); for(int i=0; i<physx->data.size(); i++) { glTranslatef(physx->data[i].pos.x, physx->data[i].pos.y, -10); glBegin(GL_TRIANGLES); glVertex3f(0,0,0); glVertex3f(1,1,1); glVertex3f(2,0,0); glEnd(); glLoadIdentity(); } #ifdef andererversuch glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glRotatef(67,0,1,0); 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(); #endif } void GLWidget::resizeGL(int width, int height) { int side = qMin(width, height); glViewport((width - side) / 2, (height - side) / 2, side, side); glMatrixMode(GL_PROJECTION); glLoadIdentity(); #ifdef QT_OPENGL_ES_1 glOrthof(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0); #else glOrtho(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0); #endif glMatrixMode(GL_MODELVIEW); }
Da sehe ich nur den grünen Hintergrund. Ich weis wirklich nicht mehr weiter.
Danke im Vorausmfg
-
Du setzt weder Farbe noch Textur deiner Dreiecke. Schalte mal das "Licht" aus und versuch einfach mal ein rotes Dreieck zu zeichnen. Außerdem kann es noch auf die Reihenfolge ankommen in der du die Dreiecke malst. Die Rückseite wird unter Umständen nicht gemalt.
-
Also bei mir ist noch das Viewport ein bischen anderst gesetzt.
Also Vorsclag, ev liegts ja da dran.glViewport(0,0,width,height);
Gruß
-
Also das ViewPort definiert ja den Platz welchen Du von der QT bekommst.
Das Viewport ist nicht die sicht IN das PC Modell,
deondern der Platz auf dem Bildschirm, den du mit Linealnachmessen kannst.
Gruß
-
Danke, habs probiert aber funktioniert leider nicht..
-
Laso meiner Meinung nachst löschst Du deine Matrizen zu oft.
glLoadidentity nach dem zeichnen ??Wobei ich selber oft Probleme damit habe.
Ich tipp auch immer nur ein bischen durch die Gegend und dann läufts eben irgendwann mal *g*
:xmas2:
-
Machst Du ein
gluLookAt(10,10,10, 0,0,0, 0,1,0);
???
-
keine chance.. nichts geht! hättest du vllt. ein funktionierendes Qt Programm mit OpenGL, egal welches. Ich versteh einfach nicht was ich falsch mache..
Naja, Frohe Weihnachten!! :xmas1: :xmas1:
-
^^ Funktionierend ist gut.
Ich habe selbst Probleme, aber ich sehe bei mir ein bischen etwas.
Könnte Dir ein Projekt schicken, welches ich aus einem Buch habe.
Die anderen sind ziemlich groß, weil eben noch eine riesige datenstruktur (WingedEdge) dran hängt.
Gibst Du mir E-Mail Adresse, oder soll ich den code hier rein kopieren ??Dir auch fröhliche QT-OpenGL Weihnachten. Wir sollte christbäume zeichnen und keine dreiecke *ggg*
-
das ist war
fred_14@gmx.at kannst du ein beispiel schicken, danke!
-
Hi Sorry, aber ich kann Dir nichts schicken
Die kommen alle wieder zurück
Gruß
-
ok. dann nimm franz.scherr@gmail.com
mfg
-
Hast Du und klappts ??
-
carrbit schrieb:
ok. dann nimm franz.scherr@gmail.com
mfgIch hoffe, du hast einen guten Spam-Schutz.
Ich halte es nicht für Klug, seine E-Mail-Adresse so ins Netz zu stellen. Du solltest lieber die Mail Funktion des Forums benutzen. Dafür müsste man sich natürlich anmelden.