Dreamotion3D

Généralités sur la programmation 3D
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Cool man ,et comme c'est toujours un plaisir de bosser avec toi, plus tu sera
présent sur DM3D, plus le moteur y gagnera :wink:
Force et sagesse...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Mais il y a un pb qui m'embete beaucoup.... c'est pas multiplateforme !

Et niveau 2D sur 3D, qu'as tu comme fonction à nous offrir ?
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Pour le multiplateforme, le fait d'avoir résolument choisi DirectX comme API,
réduite forcement l'utilisation a Windows. C'est un choix technique, et je
conviens qu'il peut etre frustrant pour les Mac et Linuxiens...

Pour les fonctions, je peux donner le liste, mais il y en a environ 200...

Pour résumer, pour l'instant le moteur gère:
- fonction2D de bases
- import statique format B3D - 3DS - X - 3DM
- import anim format MD2 - X - (B3D à venir)
- gestion des Entity avec parent-enfant
- Pixel - Vertex shaders - HLSL
- Light multiples et gestion des ombres (en cours)
- moteur de particules
- gestion des Textures et Brush avec programmation des effets
- petit moteur de terrain
- camera multiples
- module physique
- passerelle intégré vers les fonction bas niveau DirectX
- etc.. (j'en oubli surement)
Force et sagesse...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Niveau 2D sur 3D, en fait, ce serait genre pour faire un HUD, une GUi, etc...
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

HUD et GUI, c'est toujours un plus incontestable dans un bon moteur3D.
Mais c'est un gros boulot pour faire déjà quelques choses de présentable.
Et pour l'instant, je me consacre 100% a la partie 3D, qui est l'essence meme du moteur.
Meme si je sais qu'un jour il faudra que nous nous penchions sur le problème.
Maintenant, DM3D n'est pas un projet fermé, et si il y en a qui se le sentent, alors on sera la pour faire en sorte que cela se concrétise... :wink:
Force et sagesse...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Je ne te demande pas de les faire... mais j'essaie de voir si il ya des fonctions capable d'afficher de la 2D au dessus de la 3D (premier plan)... Je voudrais transférer ma console (type Quake) de Ogre vers DM3D...
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

OK, je comprends mieux. Il y a quelques fonctions 2D, comme pour dessiner
des ligne, cercle, etc... ainsi que des fonctions de gestion de Sprite2D, et de
texte bien sur. Dans le cas d'une console, avec les fonctions texte et les fonctions
Sprites , c'est jouable. Sinon, quelles fonctions penses-tu qu'il serait nescessaire
pour mener ton transfert vers DM3D possible ?
Force et sagesse...
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

J'ai testé ton moteur 3d, excellent, du beau boulot. seul defaut a mon avis, ignorer linux et mac est une erreur strategique surtout que le marché du mac par exemple avec son basculement vers l'architecture intel est de plus en plus important, tenir en compte egallement opengl pourrait a terme apporter beaucoups plus d'interet a Dreamotion3D, attirer beaucoups de developpeurs de jeux et augmenter la notoriete de ton travail. autre critere, un projet opensource se doit de tenir compte des architectures libres... cela dit, j'imagines le travail derriere pour realiser un wrapper directx et opengl (equivalences), mais ca ne doit pas etre tres difficile pour une personne de talent...
Je comprend que ce soit un choix technique, mais c'est quand meme dommage. en tous cas, bonne continuation...:)
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Merci pour le compliment.
Le fait de ne pas supporter OpenGL est souvent une question qui revient, voir une
critique. C'est vrai que mettre en quelque sorte de coté le monde Mac et Linux
n'est pas terrible. Je connais OpenGL, c'est on API d'apprenti si je puis dire, mais
pour l'insant malheureusement il n'est pas envisageable d'ecrire DM3D avec, car
DM3D est trop 'impliqué' DirectX, et déjà en interne ouvert DirectX10, ce qui
pour moi est le vrai chalenge et le vrai avenir pour la 3D top niveau ...
Désolé donc de ne me consacrer qu'aux 'Windows man', mais bon, dans le monde amateur
de la prog 3D si on fait le bilan BlitzMax, PB, C++ et C#, ils représnetent une
masse non négligeable quand meme... :wink:
Force et sagesse...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

@Coolman : Pour les amateurs d'OpenGl, la programmation s'apprend... donc n'hésitez pas, on sera sans aucun problème pret à tester !

@Tmyke : En fait, si tu peux transformer ce code (http://purebasic.hmt-forum.com/viewtopic.php?t=5678) tout en collant du texte sur la texture 0, il n'y aura aucun problème....

Ensuite, on verra pour les autres points, car je suis en train de créer un moteur de jeu, donc je marche de prototype en prototype !
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Comme promis, Comtois, voici un petit exemple. En fait, j'ai juste repris le sample
'Character' du pack PhysX (avec les média) et j'ai modifié le code comme suit:

Code : Tout sélectionner

; Fichiers Include 
IncludePath "Include\"
  IncludeFile "d3dx9.pbi"
  IncludeFile "dreamotion3d.pbi"
  IncludeFile "PhysX.pbi"
  

; Globales
Global	anglex.f, angley.f, flagXDown.w
Global	mox.f, omx.f, moy.l, omy.l


  Global	*camera.CEntity
  Global *rs.CEntity
  Global *cs.CEntity
  Global *st.CEntity
  Global *cap.CEntity
  Global	*base.CEntity
  Global	*font.CFont
  Global *light.CEntity

  Global  angle.f
  Global	*resul.CEntity
  Global	*sph.CEntity
  Global	face.l
  Global	*line.CEntity

	Global Dim tri.l(3)
	Global Dim v0.f(3), Dim v1.f(3), Dim v2.f(3)
	Global mat.D3DXMATRIX


  ;  Initialisation des différents modules
  If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End
  EndIf

  ; Initialise la fenêtre graphique
  DM_Graphics3D(800, 600, 32,  0, 1)
  ; Charge une font
  *font = DM_LoadFont("Arial",8 , 1)
  DM_SetColorText (*font, 198,198,198,255)
  
  SetCurrentDirectory("media/")
  
  ;---------------------------------
  ; INIT DU MOTEUR PHYSIQUE
  ;---------------------------------
  NX_Init(*DM_d3dDev9)


  ;------------------------------
  ; P'TITE LUMIERE
  ;------------------------------
  *light = DM_CreateLight(1, null)
  DM_LightRange(*light ,50)
  DM_LightAttenuation(*light, 1.0, 0.0, 0.0)
  DM_TranslateEntity(*light, 0,200,35)
  
  ;--------------------------------------------------------------
  ; CHARGE UN SOL
  ;--------------------------------------------------------------
  ; charge un sol pour avoir une référence
  *base = DM_LoadEntity("land.x", Null, False)
  NX_CreateStaticElement(*base,10,0)
  *base = DM_LoadEntity("square.3ds", null, false)
  DM_TranslateEntity(*base, 2,140,35)
  NX_CreateStaticElement(*base, 10,0)

  *sph = DM_LoadEntity("sphere2.x")
  DM_PositionEntity(*sph, 100,100,-50)


;------------------------------
; create CHARACTER
;------------------------------
	*cap = DM_LoadEntity("mariorun.x", null, false)
	NX_CreateCharacter(*cap,      0,26,0,   6.0,8.5, 0.1)
	;NX_EntityCollideCallBack(*cap, Collision)
	NX_SetCharacterGroup(*cap, 4)
	NX_SetSpeedJumpCharacter(*cap, 3.5)

 
;------------------------------
; une p'tite ligne
;------------------------------
  *line = DM_CreateLine(4)
  DM_LinePoint(*line, 0,20,10, 0,255,0)
  DM_LinePoint(*line, 10,20,0, 0,250,0)
  DM_LinePoint(*line, 10,20,10, 0,250,0)
  DM_CloseLine(*line)
 
angle=180.0

  ; ---------------------------------------
  ;           Gestion des caméras
  ; ---------------------------------------
  *camera = DM_CreateCamera(#Null)
  DM_MoveEntity(*camera, 207,150,101)
  DM_TurnEntity(*camera, 17,-140,0)
  DM_CameraClsColor(*camera, 25, 25, 25)

  ; ---------------------------------------
  ;           Boucle principale
  ; ---------------------------------------
  ; si plein ecran, permet d'avoir la fleche
  ;change_curseur( #IDC_ARROW  )
  Repeat

  	ExamineKeyboard()
  	ExamineMouse() 
  	ShowCursor_(1)
  	If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
  	  Quit=1
  	EndIf
  	


	
	  If KeyboardPushed(#PB_Key_Q)
	   		DM_TranslateEntity(*sph, 1,0,0)
	  EndIf
	  If KeyboardPushed(#PB_Key_W)
	   		DM_TranslateEntity(*sph, -1,0,0)
    EndIf



; If KeyHit(#PB_Key_R)
		dirx.f =0
		dirz.f =0
		diry.f = -1 
		*resul = NX_RayCastAnyShape(DM_EntityX(*sph), DM_EntityY(*sph), DM_EntityZ(*sph), dirx, diry, dirz)
		;récupère la face trouvée
		face = NX_RaycasFaceID()
		; récupère les vertex associé
		DM_TriangleVertex(*resul, face, @tri(0))
		; transpose dans des tableau de vertex pour traitement
		v0(0) = DM_VertexX(*resul, tri(0))
		v0(1) = DM_VertexY(*resul, tri(0))
		v0(2) = DM_VertexZ(*resul, tri(0))
		v1(0) = DM_VertexX(*resul, tri(1))
		v1(1) = DM_VertexY(*resul, tri(1))
		v1(2) = DM_VertexZ(*resul, tri(1))
		v2(0) = DM_VertexX(*resul, tri(2))
		v2(1) = DM_VertexY(*resul, tri(2))
		v2(2) = DM_VertexZ(*resul, tri(2))
		; recup la matrice d'attitude du mesh ttrouvé
		DM_EntityWorld(*resul, @mat)
		; transpose les coordonnées brut des vertices dans le world de représentation du mesh trouvé
		D3DXVec3TransformCoord(@v0(0), @v0(0), @mat)
		D3DXVec3TransformCoord(@v1(0), @v1(0), @mat)
		D3DXVec3TransformCoord(@v2(0), @v2(0), @mat)
		; modifie les point du line pour une représentation graphique de la face		
		DM_LinePosition(*line, 0, v0(0), v0(1), v0(2) ) 
		DM_LinePosition(*line, 1, v1(0), v1(1), v1(2) ) 
		DM_LinePosition(*line, 2, v2(0), v2(1), v2(2) ) 
		DM_LinePosition(*line, 3, v0(0), v0(1), v0(2) ) 
;	EndIf



  	; Gestion de la caméra
  	If KeyboardPushed(#PB_Key_Up)
  	 	DM_MoveEntity(*camera, 0,0,4)
  	ElseIf KeyboardPushed(#PB_Key_Down) 
  	  DM_MoveEntity(*camera, 0,0,-4)
  	EndIf
  	If MouseButton(#PB_MouseButton_Left)
  		If flagXdown=0
  			omx = MouseX()
  			omy = MouseY()
  			flagXDown=11
  		Else
  			moy = MouseY()-omy
  			angley=(moy/5.0)
  			omy= MouseY()
  			mox = MouseX()-omx
  			anglex=(mox/5.0)
  			omx= MouseX()
  			DM_TurnEntity(*camera, angley,anglex,0)
  		EndIf
  	Else
  	 		flagXDown=0
    EndIf

  	; ---------------
  	;      Rendu
  	; ---------------
    ; mise a jour de la physique
	  NX_Update()
 	
  	DM_BeginScene()
  	  DM_RenderWorld()
  	  ; Affichage du texte
	    DM_DrawText(*font, 10, 32, "Control Mario: Y/B move  G/H turn T/U strafe  SPACE jump")
  	DM_EndScene()

  Until Quit=1
  NX_Exit()
  DM_ClearGraphics()
  End
La sphere représente le point de départ du test RayCast, et le vecteur 'dir' est
par défaut orineté vers le bas. Les touche A et Z permettent de déplacer la sphere et
donc de matérialiser les face que l'on détecte sur les Entity physiques de la scene.

J'ai des petit soucis de couleur avec la fonction Line, donc pas de soucis je suis dessus
(marche bien avec BMax, mais pas avec PB bizarre..)

Sinon, dernière chose, download des deux modules mis a jours Dreamotion3D et PhysX
http://www.dreamotion3d.com/PureBasic/modulePB.zip
http://www.dreamotion3d.com/PureBasic/PhysXPB.zip

:wink:
Force et sagesse...
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Progi1984 a écrit :En fait, si tu peux transformer ce code (http://purebasic.hmt-forum.com/viewtopic.php?t=5678) tout en collant du texte sur la texture 0, il n'y aura aucun problème....
Je vais voir cela, je te fais signe...
Force et sagesse...
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

@Progi1984 je n'ai helas ni le temps, ni peut etre egallement tout simplement pas les competences de me lancer la dedans, ce que je cherche, c'est un moteur 3d de preference opensource et multiplateforme..

@tmyke je comprends tout a fait ton choix, ce n'etait nullement une critique mais j'ai trouvé que c'etait dommage, c'est tout :)
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

@Coolman: pas de soucis, en espérant peut-etre te compter un jour parmis les adeptes de DM3D :P

@Progi: voila vite fait sur la gaz un truc qui ressemble a ce que tu souhaitais:
c'est tout simple, un Sprite et un texte, il suffit de programmer une apparition
glissante sur demande en plus, plus une gestion clavier/texte-ecran et le tour est
joué ...
Image

http://www.dreamotion3d.com/PureBasic/console1.zip
Force et sagesse...
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Apparemment, dans la dernière version tu as répondu à mes attentes! Il est possible de colorer les lignes en accédant au vertex je suppose?. Est-ce que ces lignes 3d sont triées (je suppose que oui)?

Tout cela va me servir pour mon chargeur d'objets lightwave, dans lesquels les faces peuvent avoir un nombre de côtés supérieur à 3. Je fais l'affichage en vectorlines, car utiliser des faces serait un peu compliqué.

Ah oui, il faudrait mettre la doc dans chaque mise à jour stp.
Répondre