Reglages opengl

Soyez le premier à donner votre avis sur cette source.

Vue 8 378 fois - Téléchargée 802 fois


Description

JE ne sai pas pour vous mais pour moi les réglages OpenGL c'est le bordel : Chez moi c'est plus simple : un bouton tu appuis : Jour tu éteinds : Nuit.

Enfin bon pour essayer de comprendre j'ai repris un code trouvé sur le NET. et j'ai rebidouillé pour me faire la main.

alors Oui la totalité de ce code n'est pas de moi (C'est peu dire) et Oui les remarques sont en Anglais (Sorry Dad !) mais bon c'est hyper commenté :)

Pour ceux que ca intéresse ...

Conclusion :


Merci a : Daniel S. Soper
Le projet initial s'appel : OpenGL Color and Lighting Model Demonstration in Visual Basic

Codes Sources

A voir également

Ajouter un commentaire Commentaire
Messages postés
192
Date d'inscription
vendredi 2 mars 2001
Statut
Membre
Dernière intervention
10 janvier 2006

Même remarque que sur le code précédent! Utilise les normales!!!! Surtout pour pouvoir apprécier les ombres, c'est pour ca que tu n'obtient rien au niveau de l'affichage hormis un bloc monocolore! Donc je te donne un exemple de code qui te permet de faire ca ::

Ca te permet d'obtenir le vecteur normal à la face formée par 3 points
Coord1(0)=Point1.X :: Coord1(1)=Point1.Y :: Coord1(2)=Point1.Z
Coord2(0)=Point2.X :: Coord2(1)=Point2.Y :: Coord2(2)=Point2.Z
Coord3(0)=Point3.X :: Coord3(1)=Point3.Y :: Coord3(2)=Point3.Z

Private Sub CalculNormal(Coord1() As Single, Coord2() As Single, coord3() As Single)
Dim va(3) As Single, vb(3) As Single, vr(3) As Single, Val As Single

va(0) = Coord1(0) - Coord2(0)
va(1) = Coord1(1) - Coord2(1)
va(2) = Coord1(2) - Coord2(2)

vb(0) = Coord1(0) - coord3(0)
vb(1) = Coord1(1) - coord3(1)
vb(2) = Coord1(2) - coord3(2)

vr(0) = va(1) * vb(2) - vb(1) * va(2)
vr(1) = vb(0) * va(2) - va(0) * vb(2)
vr(2) = va(0) * vb(1) - vb(0) * va(1)

Val = CSng(Sqr(vr(0) ^2 + vr(1) ^2 + vr(2) ^2 ))
If Val = 0 Then Exit Sub
glNormal3f vr(0) / Val, vr(1) / Val, vr(2) / Val
End Sub


J'ai directement utilisé ton code pour que tu comprennes le mécanisme :

glenable glcNormalize

Dim Point1(2) As Single
Dim Point2(2) As Single
Dim Point3(2) As Single

With Element.STL_def
For J = 0 To .NmbVertex - 3 Step 3
glBegin Mode
For n = 0 To 2
glVertex3f .Vertex(J + n).X, .Vertex(J + n).Y, .Vertex(J + n).Z
glNormal3f .Vertex(J + n).X, .Vertex(J + n).Y, .Vertex(J + n).Z
Next
Point1(0) = .Vertex(J).X
Point1(1) = .Vertex(J).Y
Point1(2) = .Vertex(J).Z

Point2(0) = .Vertex(J + 1).X
Point2(1) = .Vertex(J + 1).Y
Point2(2) = .Vertex(J + 1).Z

Point3(0) = .Vertex(J + 2).X
Point3(1) = .Vertex(J + 2).Y
Point3(2) = .Vertex(J + 2).Z
CalculNormal Point1, Point2, Point3
glEnd
Next
End With

On voit deja plus claire!
Tu peux bien sur stocker les normales des faces une fois pour toute dans une structure dès le chargement de ton objet, ca te permet d'économiser du temps de calcul!
La méthode que je te propose permet d'obtenir une normal bien délimitée pour chaque face, il existe des méthodes qui permettent d'avoir des normales dépendant de la courbure locale de ton objet dans la zone de la face, ca permet d'avoir un rendu de bien meilleur qualité, sans zones bien délimitées!
Autre détail tres important : je trouve que ta méthode pour bouger ta scène (rotation, zoom, translation) n'est vraiment pas intuitive à utiliser de plus ton code est assez gros pour ce genre de tache! Je te conseillerais ca :

Sub PicOutPut_MouseMove
if Button=1 then
Angle(0)=X-Souris.x
Angle(1)=Y-Souris.y
else
Zoom=int((X-Souris.x)^2+(Y-Souris.Y)^2)
end if
end sub

Souris est une structure permettant d'avoir la position de la souris lors du clik sur PicOUtPut:

Sub Pic_OutPut_MouseDown
Souris.X=X
Souris.Y=Y
end sub

puis dans ta routine d'affichage tu met juste avant glBegin

glRotatef Angle(0), 1,0,0
glRotatef Angle(1), 0,1,0

wala maintenant tu peux recoder ton programme pour qu'il soit plus facile à utiliser et pour que la manipulation des lumières servent a quelquechose!

Au fait, pense à ceux qui sont en 800*600!!

Bon Coding ++
GEFF

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.