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.

:idea: 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 :mrgreen:

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 :mrgreen:

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) 8)

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 :twisted: