PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGL - Darstellungsfehler


MeLLe
2004-09-23, 08:34:49
Liebe Gemeinde,

ich habe die letzten Tage versucht, ne kleine Sonne-Mond-und-Sterne-Simulation zu basteln, und die lief auch ganz toll - bis vorgestern. Was genau passiert ist, weiss ich nicht, aber seit vorgestern ist die Ausgabe meiner kleinen OpenGL-App total zerstückelt, so als ob der Viewport falsch gesetzt wird oder so. Komischerweise gings ja aber vorher wunderbar ...
Aber seht selbst, im Anhang.

Zu sehen sein sollte eingentlich EINE gelbe Sonne in der Mitte, nicht mehrere, und auch nicht halbiert - hat wer ne Idee, woran das liegen kann?

Danke.

D-Swat
2004-09-23, 09:34:19
Meine Kristallkugel sagt mir, das da nen Fehler in deinem Programm ist. :D
Ein bisschen Code von den wichtigsten Stellen wäre ganz gut, sonst können wir hier nur Spekulieren.

Edit: Wichtig wäre evtl. noch, ob du irgendwas geändert hast. (neue Treiber installiert, ...)

MeLLe
2004-09-23, 10:23:09
Ok, denn wollen wir mal ...

Geändert hab ich iirc nichts in Sachen OS/Treiber. Auch die IDE bzw. der Compiler ist gleich geblieben. Ja sogar die GLUT-Lib ist noch die selbe ;)

Schaun wir mal in den Code ...

Dim LightPoint() As Single = {1.0, 1.0, 1.0, 1.0}
Dim LightPosition() As Single = {0.0, 0.0, 0.0, 1.0}

Public Sub onInit()
Randomize(Timer)
TaoGl.glClearColor(0, 0, 0, 0)

TaoGl.glColorMaterial(TaoGl.GL_FRONT_AND_BACK, TaoGl.GL_AMBIENT_AND_DIFFUSE)
TaoGl.glEnable(TaoGl.GL_COLOR_MATERIAL)

TaoGl.glLightfv(TaoGl.GL_LIGHT0, TaoGl.GL_DIFFUSE, LightPoint)
TaoGl.glLightfv(TaoGl.GL_LIGHT0, TaoGl.GL_POSITION, LightPosition)
TaoGl.glEnable(TaoGl.GL_LIGHT0)
TaoGl.glEnable(TaoGl.GL_LIGHTING)

ResetParticles()
End Sub
Public Sub onIdle()
onUpdate()
TaoGlut.glutPostRedisplay()
End Sub

Public Sub onNothing()
' just don't do anything
End Sub

Public Sub onVisible(ByVal state As Integer)
If state = TaoGlut.GLUT_VISIBLE Then
TaoGlut.glutIdleFunc(AddressOf onIdle)
Else
TaoGlut.glutIdleFunc(AddressOf onNothing)
End If
End Sub

Public Sub onDisplay()
TaoGl.glClear(TaoGl.GL_COLOR_BUFFER_BIT Or TaoGl.GL_DEPTH_BUFFER_BIT)
onRender()
TaoGl.glFlush()
TaoGlut.glutSwapBuffers()
End Sub
' MassCenter ist immer der Index des Particles mit der Größten Masse, also der "Sonne".
Public Sub onRender()
Dim i As Long
For i = 0 To NumParticles - 1
If part(i).alive Then
If part(i).issun Then
TaoGl.glDisable(TaoGl.GL_LIGHTING)
End If
TaoGl.glLoadIdentity()
TaoGl.glTranslatef(part(i).pos_x - part(massCenter).pos_x, part(i).pos_y - part(massCenter).pos_y, part(i).pos_z - part(massCenter).pos_z)
TaoGl.glColor3f(part(i).color.R / 255, part(i).color.G / 255, part(i).color.B / 255)
TaoGlut.glutSolidSphere(part(i).radius * 3, 16, 16)
If part(i).issun Then
TaoGl.glEnable(TaoGl.GL_LIGHTING)
End If
End If
Next
End Sub
Public Sub onReshape(ByVal width As Integer, ByVal height As Integer)
TaoGl.glViewport(0, 0, width, height)
TaoGl.glMatrixMode(TaoGl.GL_PROJECTION)
TaoGl.glLoadIdentity()
TaoGlu.gluPerspective(90, CDbl(width) / CDbl(height), 1, 601)
TaoGlu.gluLookAt(0, 0, -300, 0, 0, 0, 0, 1, 0)
TaoGl.glMatrixMode(TaoGl.GL_MODELVIEW)
TaoGl.glLoadIdentity()
End Sub

Das sollte aller GL-relevanter Code sein. Any ideas?

MeLLe
2004-09-23, 12:51:04
Ich hab gerade mitbekommen, dass das Problem in SÄMLICHEN OpenGL-Apps besteht - scheint also was Treibermäßiges zu sein ... mal Cat 4.9 versuchen ...

MeLLe
2004-09-23, 14:57:47
Entschuldigt die Aufregung - es war wirklich ein Treiber-Bug ... warum auch immer ...

Nunja - nun gehts! ;)