TV3D et PureBasic...

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 »

Il faut surtout voir si ta carte te suffit pour le moment dans tes applications.
Si oui, alors pourquoi changer ? Il est certains que d'ici quelques temps elle sera dépassé.
Et si tu veux t'amuser en 3D, alors une carte un poil plus recente serait la bienvenue ;)


Sur ce, j'ai mis à jour l'archive, avec les premiers exemples illustrant quelques fonctions
lié à la gestion physique. Je m'amuse bien à conduire la petite voiture :)


ImageImage
Dernière modification par tmyke le jeu. 26/nov./2009 18:36, modifié 1 fois.
Force et sagesse...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

J'aime bien les derniers exemples :)

Par contre, je n'ai pas encore fouillé, mais pour le clavier y'a moyen de gérer un clavier azerty ? parce qu'écrire TVInput_IsKeyPressed(#TV_KEY_A)
pour utiliser la touche [Q], c'est pas terrible.
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.
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 »

Tu me pose une colle là. Je dirais que comme cela non, il n'y a pas d'instruction
en apparence pour basculer sur le clavier AZERTY.

Je dirais à vue de nez qu'il faut juste re-programmer le codage des touches qui est fait dans le fichier
pbTV3DConstante.pbi, avec par exemple #TV_KEY_A = 16 au lieu de 30, etc...

ou ajouter une liste de constante clavier #TV_FR_KEY_A = 16 etc..

J'y avais pas pensé :?
Force et sagesse...
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Message par kelebrindae »

Très joli !
Les possibilités graphiques sont alléchantes, et le moteur physique a l'air plutôt bien aussi; ça donne envie.

C'est juste dommage qu'il faille payer 150$ pour se débarrasser du logo "powered by True Vision 3D", j'avais vaguement espéré que ce serait gratuit; DreamMotion3D m'a donné de mauvaises habitudes, je suppose... :wink:
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

...mais c'est un projet fou !

Message par beauregard »

kelebrindae a écrit :payer 150$
si tu fait un jeu de course de dingue, ou un fps de folie qui intéresse un éditeur, les 150$ ne seront pas un obstacle, loin de là... et t'auras probablement d'autres soucis bien plus sérieux.

pour relativiser, 150$, c'est une consultation chez un avocat spécialisé en droit commercial et industriel( 120 euros en 2002).
tmyke a écrit :basculer sur le clavier AZERTY.
il y a une commande purebasic, mmh,

Code : Tout sélectionner

KeyboardMode(#PB_Keyboard_International) 
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 »

kelebrindae a écrit :Très joli !
Les possibilités graphiques sont alléchantes, et le moteur physique a l'air plutôt bien aussi; ça donne envie.

C'est juste dommage qu'il faille payer 150$ pour se débarrasser du logo "powered by True Vision 3D", j'avais vaguement espéré que ce serait gratuit; DreamMotion3D m'a donné de mauvaises habitudes, je suppose... :wink:
Le watermark peut etre genant au depart, mais on l'oubli vite. Il est certain qu'apres, pour diffuser ses creations,
alors il faut se taper la licence, pas forcement donnee.
Mais comme je l'ai souligne en prehanbule de ce sujet, il ne s'agit que d'une possibilite parmis d'autre pour faire
de la 3D avec PureBasic (meme si plus je joue avec, plus je trouve ce moteur possede un fort potentiel).
Il en existe d'autre, meme si aucune ne semble federatrices pour le moment.
beauregard a écrit :
tmyke a écrit :basculer sur le clavier AZERTY.
il y a une commande purebasic, mmh,

Code : Tout sélectionner

KeyboardMode(#PB_Keyboard_International) 


Faudrais que je teste ;) mais comme laisse entendre plus haut, il faut tout simplement faire un codage
des constante claviers specifique Fr, et cela devrait largement suffire.

(desole pour les accents, je suis avec mon telephone)
Force et sagesse...
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

lien vers le wiki donnant accés à des tutoriels (en anglais) en vb

http://wiki.truevision3d.com/

pat
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 ce lien Pat, c'est un point d'entre très intéressant pour TV3D .
Pour des codes et des tuto, voir ici: http://tv3dsamples.blogspot.com/
C'est des codes C#, VB, C++ mais cela laisse pas mal de listing à décortiquer...

Sinon je me bat avec Vista, ou j'ai des plantages systématiques. Je pense avoir trouvé le soucis et
la parade, des news d'ici un jour ou deux, je dois aussi régler des soucis sur TVInput en mode FullScreen pour la souris.
Bref, le revers de la medaille, moins glorieux comme boulot, mais néanmoins indispensable.

Mais apparemment rien de rédhibitoire pour le moment, juste quelques ajustement pour que cela puisse tourner sur
toutes les plateforme Windows

;)
Force et sagesse...
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

j'ai tenté (en vain) de convertir un petit code vb de création de mesh avec addvertex, un peu comme j'avais bidouillé avec opengl, mais il y des paramétres sur la fonction qui sont restés obscurs...

en vb ça donne :
Mesh.AddVertex x, 0, z, 0, 0, 0 (tout simple)

la fonction qui m'a semblé le plus proche
;TVMesh_AddVertex.l(*mesh.TVMesh,x.f,y.f,z.f,nx.f,ny.f,nz.f,tu1.f,tv1.f,tu2.f=0.0,tv2.f=0,color.l=0)
arg!
TVMesh_AddVertex.l(*mesh, x, 0, z, 0, 0, 0, 0, 0, 0, 0, 0)

le code vb convertit en pb (j'ai bidouillé l'exemple 2 qui me paraissait le plus proche )

Code : Tout sélectionner

; ------------------------------------------------------------
;   TV3D exemples
;
;   Exemple 2   :   exemple pour creation ;manuel; de mesh 
;   Historique  :
;     xx/03/09  19:16    TMyke
;
; ------------------------------------------------------------

; Include files 
IncludePath "Includes\"   :   IncludeFile "pbTV3D.pbi"

EnableExplicit

Global hwnd.l
Global *engine.TVEngine
Global *global_scene.TVScene
Global *tv_input.TVInputEngine
Global *mesh.TVMesh
Global *camera.TVCamera
Global Quit.l, i.l
 
Declare updateCamera()

Procedure.l MyCylinder(Radius.f, Height.f, Sides.f)
 
    Protected Theta.f ;Current Angle
    Protected Inc.f ;Angular increment
    Protected x.f ;x coord
    Protected y.f ;y coord
    Protected z.f ;z coord
    Protected i.l ;Integer
 
    ;Mesh.SetPrimitiveType TV_TRIANGLESTRIP
    ;TVMesh_SetPrimitiveType(*mesh.TVMesh,ePrimitiveType.l)
    TVMesh_SetPrimitiveType(mesh,#TV_TRIANGLESTRIP)
 
    ;Cylinder Precision
    Inc = 2 * #PI / Sides ;where each side has two triangles
       
    Theta = 0
   
    For i = 0 To Sides
       
        ;Calculate Vertices
        x = Radius * Cos(Theta)
        y = Height
        z = Radius * Sin(Theta)
       
        ;Vertex at the top of the cylinder
        ;Mesh.AddVertex x, 0, z, 0, 0, 0
        ;TVMesh_AddVertex.l(*mesh.TVMesh,x.f,y.f,z.f,nx.f,ny.f,nz.f,tu1.f,tv1.f,tu2.f=0.0,tv2.f=0,color.l=0)
        TVMesh_AddVertex.l(*mesh, x, 0, z, 0, 0, 0, 0, 0, 0, 0, 0)
        ;Vertex at the bottom of the cylinder
        ;Mesh.AddVertex x, y, z, 0, 0, 0
        TVMesh_AddVertex.l(*mesh, x, y, z, 0, 0, 0, 0, 0, 0, 0, 0)
        Theta = Theta + Inc
   
    Next
    ProcedureReturn *mesh
EndProcedure

;----------------------------------------------------------
; ouverture d'une fenetre
 *engine = TVGraphics3D(800, 600)
 
 ;----------------------------------------------------------
; TV3D n'est pas seulement un moteur 3D, mais un moteur de
; jeux. Donc, on lui spécifie la creation d'une scene, ce qui
; initialise en quelque sortie tous les éléments du moteur 3D
  *global_scene = TVScene_Create()
  TVScene_SetBackgroundColor( 0.1, 0.1, 0.2)
; limitation du frame rate à la fréquence de rafraichissement de l'écran
 TVEngine_SetVSync(*global_scene , #True)

*mesh = MyCylinder(10,10,3)

;----------------------------------------------------------
; creation d'un Mesh, vide, que l'on appel "cube", 
; ; rataché à notre scene 
;      *cube = TVScene_CreateMeshBuilder("cube")
; creation dessus d'un simple cube

; on veut voir nos face quelque soit 'orientation
;  TVMesh_SetCullMode(*cube, #TV_DOUBLESIDED)
; ; ajout d'une face
;  TVMesh_AddFace(*cube, 0)
; ; ajout d'un certain nombre de vertices
;  For i = 0 To 11
;     TVMesh_AddVertexEx(*cube, ?Vertex+32*i, 32)
;  Next

;----------------------------------------------------------
; creation d'une camera
*camera = TVCamera_Create()
TVCamera_SetPosition(*camera, 0,0,-5)


;----------------------------------------------------------
; creation d'un device Input pour la gestion des entré (souris et clavier ici)
TVInput_Create()
TVInput_Initialize( #True, #True)
;
Repeat

    TVMesh_RotateY(*mesh, 0.01,0)

  ; gestion touche et freecamera
    updateCamera()
  
  ; boucle de rendu
    TVEngine_Clear(*engine, #False)
     TVMesh_Render(*mesh)
    TVEngine_RenderToScreen(*engine)

Until Quit=1
; end

Global angx.f, angy.f, mDown.l
Procedure updateCamera()
	 
	Protected mx.l, my.l
	Protected bt1.L, bt2.l, bt3.l, bt4.l, btroll.l
	
	TVInput_GetMouseState(@mx , @my , @bt1 , @bt2, @bt3, @bt4 , @btroll )
		
	If bt1
  		If mDown=0
  			mDown=11
  		Else
			angx = mx*0.15
			angy = my*0.15
		  TVCamera_Turn(*camera, DEG2RAD(angy), DEG2RAD(angx), 0)

  		EndIf
	Else
  	 	mDown=0		
	EndIf
	If TVInput_IsKeyPressed.l(#TV_KEY_UP)
		 TVCamera_MoveRelative(*camera,0.005 * TVEngine_AccurateTimeElapsed.f(*engine),0,0, #True)
	EndIf
	If TVInput_IsKeyPressed.l(#TV_KEY_DOWN)
		 TVCamera_MoveRelative(*camera,-0.005 * TVEngine_AccurateTimeElapsed.f(*engine),0,0, #True)
	EndIf
	If TVInput_IsKeyPressed.l(#TV_KEY_ESCAPE)
		 Quit=1
	EndIf
			
EndProcedure
:? :?:

pat
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

Ben voilà... Installé et tout fonctionne... Enfin presque...
Mais c'est certainement du à moi...

Sous JaPBe pas de problème... ! Superbe !

Mais sous IDE normal (PB 3.0) J'ai des cubes blancs... Etc... Pourquoi ???

C'est pas la première fois, avec d'autres aussi.
Il suffisait de mettre le débugger externe graphique... Mais ici non ???
Encore pas mal de truc à apprendre ?
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

GeBonet a écrit :cubes blancs
mmh, tu as peut être les même soucis que j'avais: mise à jour de directX et pilote graphique, puis rouler jeunesse... :)

ps: ta carte doit supporter shader
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

Ouais... Possible, mais alors pourquoi avec JaPBe aucun problème ?
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

GeBonet a écrit :Ouais... Possible, mais alors pourquoi avec JaPBe aucun problème ?
c'est étrange. au début j'utilisais Japbe, pour tester mais finallement l'ide officiel me suffit. çà doit être une histoire de direction, Dobro ayant déjà rencontré ce type de problème, mmh, fait donc un copier/coller des 2 .dll dans, heu, le dossier où, heu, on partage les trucs, hum.
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 »

Patrick88 a écrit :j'ai tenté (en vain) de convertir un petit code vb de création de mesh avec addvertex, un peu comme j'avais bidouillé avec opengl, mais il y des paramétres sur la fonction qui sont restés obscurs...

en vb ça donne :
Mesh.AddVertex x, 0, z, 0, 0, 0 (tout simple)

la fonction qui m'a semblé le plus proche
;TVMesh_AddVertex.l(*mesh.TVMesh,x.f,y.f,z.f,nx.f,ny.f,nz.f,tu1.f,tv1.f,tu2.f=0.0,tv2.f=0,color.l=0)
arg!
TVMesh_AddVertex.l(*mesh, x, 0, z, 0, 0, 0, 0, 0, 0, 0, 0)

le code vb convertit en pb (j'ai bidouillé l'exemple 2 qui me paraissait le plus proche )


pat
Je regarde cela, et en rentrant du boulot demain, je pense pouvoir te donner le code valide.
GeBonet a écrit :Ouais... Possible, mais alors pourquoi avec JaPBe aucun problème ?
Je ne connais pas JaPBe, et je n'ai donc pas essayé. Avec l'IDE de base, et en installant comme
prévu le pack, cela devrait marcher. Maintenant, pour cela fonctionne parfaitement avec JaPBe et
pas avec l'IDE de PB, là je ne serais
répondre.... :?:
Force et sagesse...
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

tmyke a écrit :là je ne serais répondre.... :?:
oui, c'est vraiment très étrange...
Répondre