alor si quelqu'un sait comment retrouver l'angle d'une camera ou entité sa m'aiderais beaucoup merci.
Petit probléme en 3D avec les camera et les angles
-
CameleonTH
- Messages : 333
- Inscription : sam. 25/juin/2005 11:18
- Localisation : Laon (02)
- Contact :
Petit probléme en 3D avec les camera et les angles
Voila mon probléme je n'arrive pas a retrouver l'angle d'une camera, pour la tourner pas de probléme mais aprés comment fait-on pour retrouver son angle car j'ai essayer de les retrouver en fonction fonction du mouvement que l'on fait mais le mouvmement et fais avec la souris et c'est pas précis du tous (en fonction d'un geste trop brusque la variable est totalement fausse, ex: au lieu de 360° j'ai 380°)
alor si quelqu'un sait comment retrouver l'angle d'une camera ou entité sa m'aiderais beaucoup merci.
alor si quelqu'un sait comment retrouver l'angle d'une camera ou entité sa m'aiderais beaucoup merci.
pour l'instant tu n'as pas le choix il faut mémoriser toi même les angles et je te l'accorde ,c'est vraiment pas terrible.Fred a dit qu'il allait voir ce qu'il pouvait faire dans la version 4 , souhaitons qu'il nous les ajoute ces angles , faire de la 3D sans angles c'est difficile 
En attendant , je fais comme ça :
M3D_WrapValue est une fonction qui me maintient l'angle entre 0 et 360°.
C'est pas indispensable , ça devrait fonctionner sans ça .
Et bien sûr , au départ j'ai initialisé ma caméra dans une position pour mettre son angle Y à zéro. L'angle X est moins génant pour ce que je fais , je n'ai pas besoin qu'il corresponde au monde 3D.
En clair , j'ai ajouté un cameralocate() avant la boucle principale et je fais un cameralookat() de façon à ce qu'elle regarde droit devant , à angle 0 sur l'axe y.
CosD() et SinD() <<< c'est pour gérer les angles en degrés.
En attendant , je fais comme ça :
Code : Tout sélectionner
;Rotation de la caméra avec la souris
If ExamineMouse()
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
EndIf
;Mémorise les angles
Camera\AngleX = M3D_WrapValue( Camera\AngleX + MouseX)
Camera\AngleY = M3D_WrapValue( Camera\AngleY + MouseY)
;Oriente la caméra
RotateCamera(0,MouseX,MouseY,0) C'est pas indispensable , ça devrait fonctionner sans ça .
Et bien sûr , au départ j'ai initialisé ma caméra dans une position pour mettre son angle Y à zéro. L'angle X est moins génant pour ce que je fais , je n'ai pas besoin qu'il corresponde au monde 3D.
En clair , j'ai ajouté un cameralocate() avant la boucle principale et je fais un cameralookat() de façon à ce qu'elle regarde droit devant , à angle 0 sur l'axe y.
Code : Tout sélectionner
CameraLocate(0,X,Y,Z)
CameraLookAt(0,X+CosD(Camera\AngleX)*100,Y,-SinD(Camera\AngleX)*100)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
CameleonTH
- Messages : 333
- Inscription : sam. 25/juin/2005 11:18
- Localisation : Laon (02)
- Contact :
de M3D_Matrix3D (les sources sont disponibles)
mais voila le code
mais voila le code
Code : Tout sélectionner
ProcedureDLL.f M3D_WrapValue(Angle.f)
Angle/360
Angle-Int(Angle)
If Angle<0
ProcedureReturn (Angle+1)*360
Else
ProcedureReturn Angle*360
EndIf
EndProcedurehttp://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
CameleonTH
- Messages : 333
- Inscription : sam. 25/juin/2005 11:18
- Localisation : Laon (02)
- Contact :
Non en faite c'est bon j'ai trouver le lien sur ton site
http://perso.wanadoo.fr/comtois/M3D_Mat ... rix3D1.zip
http://perso.wanadoo.fr/comtois/M3D_Mat ... rix3D1.zip
-
CameleonTH
- Messages : 333
- Inscription : sam. 25/juin/2005 11:18
- Localisation : Laon (02)
- Contact :
ben oui , tu vas de 0 à 360°.
tu n'as pas d'angle négatif , c'est ça qui te gêne ?
tu n'as pas d'angle négatif , c'est ça qui te gêne ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
CameleonTH
- Messages : 333
- Inscription : sam. 25/juin/2005 11:18
- Localisation : Laon (02)
- Contact :
euh là faut que tu nous montres un bout de code, moi je n'ai pas ce problème.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
CameleonTH
- Messages : 333
- Inscription : sam. 25/juin/2005 11:18
- Localisation : Laon (02)
- Contact :
Voila un petit bout de code qui me pose probléme=, c'est pas celui avec le lequelle sa me pose probléme mais li me pose probléme ossi.
bien sur il faut les fichier robot.mesh et r2skin.jpg.
Code : Tout sélectionner
InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()
OpenWindow(0,100,100,800,600,0,"test")
OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,0)
CameraLookAt(0,0,0,0)
#PlayerSpeed = 10
#RobotMesh = 0
#RobotTexture = 0
#Robot = 0
#RobotMat = 0
LoadMesh (#RobotMesh , "robot.mesh")
LoadTexture(#RobotTexture, "r2skin.jpg")
CreateMaterial(#RobotMat, TextureID(#RobotTexture))
CreateEntity(0,MeshID(#RobotMesh),MaterialID(#RobotMat),x,y,z)
Repeat
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#PlayerSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #PlayerSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#PlayerSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #PlayerSpeed
Else
KeyY = 0
EndIf
EndIf
;Rotation de la caméra avec la souris
If ExamineMouse()
MouseX = -(MouseDeltaX()/10)*#PlayerSpeed/2
MouseY = -(MouseDeltaY()/10)*#PlayerSpeed/2
EndIf
;Mémorise les angles
AngleX = M3D_WrapValue( AngleX + MouseX)
AngleY = M3D_WrapValue( AngleY + MouseY)
;Oriente la caméra
RotateCamera(0,MouseX,MouseY,0)
MoveCamera(0, KeyX, 0, KeyY)
RenderWorld()
If StartDrawing(ScreenOutput())
FrontColor(255, 255, 255)
DrawingMode(1)
Locate(0, 0) : DrawText(StrF(Engine3DFrameRate(0),1)+" FPS")
Locate(0, 20) : DrawText(Str(CountRenderedTriangles())+" Triangles")
Locate(0, 60) : DrawText(Str(AngleX))
Locate(0, 80) : DrawText(Str(AngleY))
StopDrawing()
EndIf
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) C'est filperj qui a codé ça , ma façon était horrible 
Sinon j'ai fait quelques tests , et effectivement , on dirait que ça merde avec la version actuelle d'ogre, par contre ça fonctionne bien avec la version beta.
C'est pour ça que je n'avais rien remarqué , j'utilise la version beta en ce moment
Donc voila , essaye avec la version beta .
Sinon j'ai fait quelques tests , et effectivement , on dirait que ça merde avec la version actuelle d'ogre, par contre ça fonctionne bien avec la version beta.
C'est pour ça que je n'avais rien remarqué , j'utilise la version beta en ce moment
Donc voila , essaye avec la version beta .
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
CameleonTH
- Messages : 333
- Inscription : sam. 25/juin/2005 11:18
- Localisation : Laon (02)
- Contact :
oui avec la beta il faut ajouter Add3DArchive() pour indiquer où se trouve les textures ou les meshs .
Extrait de mon code :
Extrait de mon code :
Code : Tout sélectionner
Add3DArchive("Robot\" , #PB_3DArchive_FileSystem)
Add3DArchive("Textures\" , #PB_3DArchive_FileSystem)http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
autre détail , si tu veux un mouvement souple , n'oublie pas de mettre
MouseX et MouseY en flottant, idem pour AngleX et AngleY.
MouseX et MouseY en flottant, idem pour AngleX et AngleY.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.