Page 1 sur 2
Apprendre les routines 3D
Publié : mar. 01/juil./2014 8:40
par SPH
Salut,
Est ce qu'une ame charitable pourrais poster les 9 formules necessaires pour faire de la 3D (je ne parle pas d'ogre)
Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 9:47
par falsam
Strange cette question. Il y a t'il vraiment que 9 formules nécessaires pour faire de la 3D ? je suis trop noob en la matière pour répondre à cette question.
Toutefois j'ai un lien dans mes favoris qui pourra peut être répondre à ta question : On y parle de accélération, vélocité, énergie, gravité, distance entre deux points dans l'espace, d'interaction entre force, friction et déplacement, et plein d'autres chose.
C'est en anglais et les formules sont codées en ..... Pure Basic. YeahHHHHhhhhh.
Pure Basic Game Math Guide
Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 10:27
par SPH
Je tiens ca d'un bon codeur : dans le temps, il y avait 12 formules math pour faire de la 3D. Puis, on a reussi a tirer seulement 9 formules. Mais depuis quelques annees, il y a une nouvelle facon de faire de la 3D.
Comme la 3D sous ogre m'effraye, je veux coder de la 3D depuis pb...

Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 10:42
par djes
Tu confonds 3D et rotation dans l'espace.
Je t'explique rapidement : à l'époque où on codait absolument tout, le déplacement d'un point dans l'espace, qui comprend translation, rotation, échelle, devait être très optimisé. La rotation est particulièrement coûteuse en calculs, elle demande normalement 12 multiplications, et la multiplication est l'une des opérations les plus lentes d'un microprocesseur. Une version optimisée permettait de faire une rotation avec seulement 9 multiplications, d'où un gain évident. Mais la rotation n'est pas tout !
Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 10:45
par SPH
Aurais tu une routine PB qui affiche un simple triangle qui tourne dans l'espace ?
Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 10:55
par falsam
SPH tu es dingue
Un code qui permet de dessiner un triangle en rotation en OpenGl (Necessite Pure Basic 5.30 Beta)
Code : Tout sélectionner
Enumeration
#MainForm
#OpenGL
#Timer
EndEnumeration
;-Dessin OpenGL
Procedure Draw()
SetGadgetAttribute(#OpenGL, #PB_OpenGL_SetContext, #True)
glClear_ (#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
glBegin_(#GL_TRIANGLES);
glVertex2i_(0, 0) ;1er sommet
glVertex2i_(1, 0) ;2eme sommet
glVertex2i_(0, 1) ;3eme sommet
glEnd_()
glRotatef_(0.09,0.0,0.0,0.09)
glFlush_() ;s'assure que toutes les commandes OpenGL ont été exécutées
SetGadgetAttribute(#OpenGL, #PB_OpenGL_FlipBuffers, #True)
EndProcedure
;-Redimentionne le contexte OpenGlGadget
Procedure ReSize()
ResizeGadget(#OpenGL, #PB_Ignore, #PB_Ignore, WindowWidth(#MainForm) - 20, WindowHeight(#MainForm)-20)
Draw()
EndProcedure
;-Start
OpenWindow(#MainForm, 0, 0, 800, 600, "OpenGL Gadget exemple", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenGLGadget(#OpenGL, 10, 10, 780, 580)
AddWindowTimer(#MainForm, #Timer, 16)
BindEvent(#PB_Event_SizeWindow, @ReSize())
BindEvent(#PB_Event_Timer, @Draw())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 10:59
par SPH
Grand merci. Je vais etudier ca de tres pret

Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 11:10
par Backup
pour repondre tres précisement a ta question
Code : Tout sélectionner
;codé par Dobro
; Purebasic 4.51
#dobro =1
#Police =1
#Sprite =1
;
Declare triangle(taille,posx,posy,angle_triangle,angle_ouverture,couleur)
; ***********************************
Resultat = InitSprite ()
FontID = LoadFont ( #Police , "arial" , 18, #PB_Font_Bold )
Global EcranX = GetSystemMetrics_ ( #SM_CXSCREEN ): ;=largeur de l'ecran
Global EcranY = GetSystemMetrics_ ( #SM_CYSCREEN ): ;=hauteur de l'ecran
WindowID = OpenWindow (1, 0, 0, EcranX, EcranY, "hello" ,#PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
WindowID = WindowID (1)
Result = OpenWindowedScreen ( WindowID ,0,0, EcranX, EcranY, 1, 0,0)
Resultat = InitKeyboard ()
largeur=100
Resultat = InitMouse ()
;;CreateSprite ( #Sprite , EcranX,EcranY) ; cree un sprite
Repeat
ExamineKeyboard ()
xa=EcranX/2:ya=EcranY/2 ; xa et ya = centre de l'ecran
; procedure de creation d'un triangle !!
;triangle(taille,posx,posy,angle_triangle,angle_ouverture,couleur)
;taille= taille du triangle
; posx et posy = position du triangle dans l'ecran
; angle_triangle= orientation du triangle en degres
; angle_ouverture = angle du sommet du triangle en degre
; couleur =couleur du contour du triangle
triangle(250,xa,ya,i,60, RGB (255,0,255)) ; appel la procedure
i=i+1
if i>359
i=0
Endif
;;;; DisplaySprite ( #Sprite , 0, 0)
event= WindowEvent ()
FlipBuffers (): ; affiche l'ecran
ClearScreen (RGB(0, 0, 0)) : ;efface l'ecran
If KeyboardPushed ( #PB_Key_Escape ) ; press Esc to quit
End
EndIf
Until event= #PB_Event_CloseWindow
Procedure triangle(taille,posx,posy,angle_triangle,angle_ouverture,couleur)
; *********************************
StartDrawing ( ScreenOutput ( ))
DrawText (1,1, Str (angle_triangle))
xf=taille* Cos (angle_triangle*2* #PI /360)+posx
yf=taille* Sin (angle_triangle*2* #PI /360)+posy
LineXY (posx, posy, xf, yf ,couleur)
angle_ouverture=angle_triangle+ angle_ouverture
; ************ 2mem ligne ****************
xf2=taille* Cos (angle_ouverture*2* #PI /360)+posx
yf2=taille* Sin (angle_ouverture*2* #PI /360)+posy
LineXY (posx, posy, xf2, yf2 ,couleur )
; ************ 3mem ligne ****************
LineXY (xf, yf, xf2, yf2 ,couleur)
StopDrawing ()
EndProcedure
; Epb
Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 11:12
par falsam
J'ai modifié le premier code en ajoutant la rotation du triangle.
PS : Ogre3D c'est bien ..... et même pas peur

Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 11:19
par Backup
autre code interressant
Code : Tout sélectionner
;*****************************************************************************
;*
;* Name : 3DCube
;* Author : Petr Vavrin (peterb)
;* Date : 12.06.09
;* Notes :
;*
;*****************************************************************************
InitSprite():o=400:OpenWindow(0,0,0,o,o,"3D cube",$C80001):Dim p(o):Dim a.f(o)
Dim l(o)
OpenWindowedScreen(WindowID(0),0,0,o,o,1,0,0)
Restore t
For c=0 To 5
Read.b d
Read.w e
For m=0 To 3
i=c*4+m
p(i)=(d>>(m*2)&3-1.5)*5
l(i)=e>>(m*4)&15
Next
Next
DataSection
t:
Data.l $0c3221ff,$65f31443,$5887cf76,$30625100,$8473
EndDataSection
While WindowEvent()<>16
ClearScreen(0)
sc=ScreenOutput()
s+255
StartDrawing(sc)
v.f+0.05
w.f+0.01
For c=0 To 7
m=c*3
x=p(m)
y=p(m+1)
z=p(m+2)
g.f=Sin(v)*y+Cos(v)*z
f.f=o/(40-(Cos(w)*g-Sin(w)*x))
a(m)=(Cos(w)*x+Sin(w)*g)
a(m)*f+o/2
a(m+1)=(Cos(v)*y-Sin(v)*z)*f+o/2
Next
For c=0 To 11
m=c*2
i=l(m)*3-3
j=l(m+1)*3-3
For k=1 To 3
LineXY(a(i)+k,a(i+1),a(j)+k,a(j+1),s-k)
Next
Next
DrawText(9,9,"Enjoy this 3DCube",s,0):
StopDrawing():
FlipBuffers():
Delay(15):
Wend
;
; Epb
Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 11:23
par SPH
Grand merci. La dedans, il y a exactement ce que je cherchais... (diggestion)

Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 11:26
par Fred
En quoi utiliser les sin() et cos() à la pelle pour faire tourner un malheureux cube est-elle plus simple que l'utilisation des commandes d'OGRE ?

Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 11:34
par falsam
Fred a écrit :En quoi utiliser les sin() et cos() à la pelle pour faire tourner un malheureux cube est-elle plus simple que l'utilisation des commandes d'OGRE ?

+1
Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 11:37
par SPH
Je n'y arrive pas avec ogre. Faut dire, je ne m'y suis pas mis a fond...
Peut on egalement afficher un simple triangle en 3D dans ogre ? (je veux faire des effets de cubes transparent qui morphent en autres objets)
Re: Apprendre les routines 3D
Publié : mar. 01/juil./2014 11:50
par comtois
SPH a écrit :Peut on egalement afficher un simple triangle en 3D dans ogre ?
Non, on peut faire des trucs comme
ça, mais afficher un simple triangle avec Ogre c'est pas possible
