Apprendre les routines 3D

Généralités sur la programmation 3D
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Apprendre les routines 3D

Message 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)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Apprendre les routines 3D

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Apprendre les routines 3D

Message 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... :?
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Apprendre les routines 3D

Message 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 !
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Apprendre les routines 3D

Message par SPH »

Aurais tu une routine PB qui affiche un simple triangle qui tourne dans l'espace ?
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Apprendre les routines 3D

Message 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
Dernière modification par falsam le mar. 01/juil./2014 11:09, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Apprendre les routines 3D

Message par SPH »

Grand merci. Je vais etudier ca de tres pret :!:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Apprendre les routines 3D

Message 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

Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Apprendre les routines 3D

Message 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:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Apprendre les routines 3D

Message 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

Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Apprendre les routines 3D

Message par SPH »

Grand merci. La dedans, il y a exactement ce que je cherchais... (diggestion) 8)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Fred
Site Admin
Messages : 2651
Inscription : mer. 21/janv./2004 11:03

Re: Apprendre les routines 3D

Message 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 ? :)
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Apprendre les routines 3D

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Apprendre les routines 3D

Message 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)
Dernière modification par SPH le mar. 01/juil./2014 11:51, modifié 1 fois.
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Apprendre les routines 3D

Message 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:
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.
Répondre