[Gelöst] Brauche Hilfe bei OpenGL Widget
Verfasst: 6. November 2010 23:45
Hei Leute,
kann mir mal jemand auf die Sprünge helfen ?
ich will das "Hello GL" auf allgemeine 3D Daten umschreiben und stehe gerade auf dem Schlauch.
Meine 3D Daten werden aus stl (stereolithography) Dateien ausgelesen und auch angezeigt, allerdings stimmen Rotation um x und y Achse nicht und die Beleuchtung krieg ich nicht in den Griff.
Die Rotation um x und y scheint das komplette Koordinatensystem zu drehen anstatt die Objektkoordinaten meines einzelnen Objektes. Was mach ich falsch ?
Es soll sich das Objekt im Raum bei gehaltenem Cursor drehen, so wie im Beispiel und die Kamera relativ dazu aber stehenbleiben
hier mal die 2 wichtigsten Methoden
bei der Beleuchtung sauft mir eine Hälfte des Objektes ab, weil die Ambient Beleuchtung ja nur generell aufhellt.
Gibt es hier noch eine omnipräsente Lichtquelle oder muss ich einen Spot pro Ecke in einem gedachten umgebenden Quadrat setzen ?
Bitte entschuldigt meine Fragen, ich habe eigentlich schon probiert mich wieder in OpenGL einzulesen, aber da nun nach ner knappen Woche immer noch nicht alles so funktioniert, wie es soll, muss jetzt mal beschleunigt werden.
Achso noch was, in einem WheelEvent soll noch skaliert werden, aber das sollte ja recht einfach zu machen sein
kann mir mal jemand auf die Sprünge helfen ?
ich will das "Hello GL" auf allgemeine 3D Daten umschreiben und stehe gerade auf dem Schlauch.
Meine 3D Daten werden aus stl (stereolithography) Dateien ausgelesen und auch angezeigt, allerdings stimmen Rotation um x und y Achse nicht und die Beleuchtung krieg ich nicht in den Griff.
Die Rotation um x und y scheint das komplette Koordinatensystem zu drehen anstatt die Objektkoordinaten meines einzelnen Objektes. Was mach ich falsch ?
Es soll sich das Objekt im Raum bei gehaltenem Cursor drehen, so wie im Beispiel und die Kamera relativ dazu aber stehenbleiben
hier mal die 2 wichtigsten Methoden
Code: Alles auswählen
void GLWidget::initializeGL()
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
static GLfloat lightPosition0[4] = { 5.0, 5.0, 7.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition0);
glEnable(GL_LIGHT1);
static GLfloat lightPosition1[4] = { -5.0, 5.0, 7.0, 1.0 };
glLightfv(GL_LIGHT1, GL_POSITION, lightPosition1);
GLfloat mat_amb_diff[] = { 1.0, 1.0, 1.0, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, mat_amb_diff);
}
void GLWidget::paintGL()
{
qglClearColor(qtPurple.dark());
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glTranslatef(0.0, 0.0, zPos);
glRotatef(xRot / 16.0, 1.0, 0.0, 0.0);
glRotatef(yRot / 16.0, 0.0, 1.0, 0.0);
glRotatef(zRot / 16.0, 0.0, 0.0, 1.0);
int normalCounter = 0;
glColor3f( 0.0, 0.0, 0.5 );
for (int i = 0; i < vertices.size(); i+=3)
{
glBegin(GL_TRIANGLES);
glNormal3f( normals[normalCounter].x(), normals[normalCounter].y(), normals[normalCounter].z());
glVertex3f( vertices[i].x(), vertices[i].y(), vertices[i].z());
glVertex3f( vertices[i+1].x(), vertices[i+1].y(), vertices[i+1].z());
glVertex3f( vertices[i+2].x(), vertices[i+2].y(), vertices[i+2].z());
glEnd();
normalCounter++;
}
}Gibt es hier noch eine omnipräsente Lichtquelle oder muss ich einen Spot pro Ecke in einem gedachten umgebenden Quadrat setzen ?
Bitte entschuldigt meine Fragen, ich habe eigentlich schon probiert mich wieder in OpenGL einzulesen, aber da nun nach ner knappen Woche immer noch nicht alles so funktioniert, wie es soll, muss jetzt mal beschleunigt werden.
Achso noch was, in einem WheelEvent soll noch skaliert werden, aber das sollte ja recht einfach zu machen sein