Page 2 sur 13

Publié : mar. 02/mars/2004 9:06
par comtois
Kit de démarrage :)

http://perso.wanadoo.fr/comtois/Sokoban ... DFORUM.htm

il comprend :

un répertoire TEXTURES => Il contient quelques textures
Un fichier DATA3D.PBI => Contient les datas de quelques primitives 3D, le plan , le cube ,le cylindre , la sphere
Un fichier INCLUDE.PBI => Il va évoluer ,il contiendra les constantes ,les structures , les variables globales ? , faudra se mettre d'accord sur l'organisation ,c'est une proposition .
Un fichier FONCTIONS3D.PBI => Les fonctions de bases pour déplacer un objet 3D , certaines sont perfectibles ,si quelqu'un souhaite le faire qu'il n'hésite pas .
Par exemple la fonction WrapValue() , pourra être changée par le code de PsychoFanta du forum anglais , sa fonction est bien plus performante .
Et bien sûr le fichier principal , j'ai un peu simplifié ? ça reste à voir :)

j'attends encore un peu , avant de passer à l'étape suivante .

soit commencer à mettre en place un niveau
soit commencer à modifier le déplacement du perso , parque là comme il bouge , ça va pas être pratique pour pousser des caisses :)

ou autre chose ?

Publié : mar. 02/mars/2004 10:27
par comtois
filperj

Je viens de faire un petit essai avec un menu ,c'est cool , ça fonctionne très bien sans faire une autre fenêtre , en plus on peut le cacher ,ça me semble très bien comme ça. on va pouvoir définir des trucs à mettre dans le menu .

par exemple un truc comme ça :

Fichier > Enregistre une partie > Charge une partie > Quitter
Affichage > 2D > 3D
Niveau > Annule le dernier coup > Charge un niveau > Charge une solution
Options > Vitesse > Touches > etc ...
Aide > aide > A propos de

Publié : mar. 02/mars/2004 13:17
par CORBASE
Merci pour les infos Comtois !
Enfin je vais essayer de mieux comprendre par la suite !

Mais sinon, il faut que j'achete ma license, car sinon je vais pas pouvoir continué !

Enfin j'attend que mes parents me l'achète, il devrais le faire très prochaine, je vais essayer de le prendre ce soir, car je peux pas tester le pack vu qu'il y a rédérence a des APIs !

Bref, nouvel objectif now, Bien comprendre tout le code !

Publié : mar. 02/mars/2004 15:35
par Anonyme2
Comtois, voici mes questions (personne ne rigole, car je ne saisi pas tout et j'aimerais comprendre).

Premierement, l'exemple téléchargé sur ton site plante sous Win98 lorsque l'on quitte avec escape, une erreur de page.

Mes questions (mais sur l'exemple du forum):

Mesch :

Si j'ai bien compris, une Mesh est un ensemble de coordonnées permettant de définir une forme et éventuellement sa couleur.
La définiton de PB :
Les Meshs sont des objets 3D composés de triangles qui sont réliés entre eux pour donner la forme finale.

Je que j'aimerais c'est un croquis par exemple d'un cube avec les axes et à partir de là définir une MESH avec des valeurs numériques avec l'instruction SetMeshData et les différents types, savoir ou est l'origine etc.

#PB_Mesh_Vertices
#PB_Mesh_Triangles
#PB_Mesh_UVCoordinates
#PB_Mesh_Normals
#PB_Mesh_Colors

Il me faut ça pour comprendre 8O

Texture :

Là aussi, un croquis avec les axes permettrait de mieux comprendre.
Tu as créé 3 textures, concretement elle ressemble à quoi individuellement ?

Caméra :
Comment as-tu choisi les coordonnées de la position de la caméra pour les 3 vues ?

Publié : mar. 02/mars/2004 19:03
par CORBASE
Denis, je peux te dire juste ce que je connais ( soit pas grand chose :p )

Alors un mesh, tu prend sa comme un objet 3D ( ici le cube ) que tu peux animer et déplacer en l'encapsulant dans une entity.

Ensuite pour les textures, c'est juste un carre que tu applique sur des formes

Vala ce que j'en ai retenu, si je dis des conneries, merci aux autres de me corriger !

Au fait, sa y est j'ai acheté ma license PB !!!

Publié : mar. 02/mars/2004 21:04
par Anonyme2
Oui CORBASE, je crois que j'ai compris comme toi.

Maintenant il faut un peu approfondir un peu si on veut pas être largué d'entrée :oops:

Publié : mar. 02/mars/2004 21:12
par filperj
@Comtois
L'histoire d'ouvrir une autre fenêtre pour le menu, c'était juste une idée comme ça... Mais j'ai pas compris comment tu propose de s'y prendre? Des boutons à côté du windowedscreen? Ou pas du tout ça?
Enfin, j'ai téléchargé, je regarderai mieux demain (fatigué).

Publié : mar. 02/mars/2004 21:14
par CORBASE
Je crois bien Denis, il va falloir mettre les choses au point !

Bon, sinon Comtois et les autres, j'ai améliorer un peu la fonction AffAide(). C'est pas grand chose mais sa peu aidr pour affiché un petit texte du style, "Vous avez gagné etc ..."

Enfin, voici la procédure modifié :

Code : Tout sélectionner

Procedure AffAide()
   ;Affiche quelques infos   
   StartDrawing(ScreenOutput())
	 DrawingMode(1)
	 FrontColor(0, 0, 255) 

   Locate(150,120)
   DrawText("Nombre d'images Minimum = " + StrF(Engine3DFrameRate(#PB_Engine3D_Minimum )) + " / Nombre d'images Maximum = " + StrF(Engine3DFrameRate(#PB_Engine3D_Maximum)))
   Locate(150,140)
   DrawText("Nombre d'images par seconde = " + StrF(Engine3DFrameRate(#PB_Engine3D_Current)))
   Locate(150,160)
   DrawText(StrF(EntityX(0)) + " / " + StrF(EntityY(0)) + " / " + StrF(EntityZ(0)))
	 Locate(150,250)
	 DrawText("Voici un petit menu que on pourrait utiliser pour des petites infos")
 	 DrawingMode(2)
 	 Box(100, 100, 800, 600 ,RGB(255,255,255)) 

   StopDrawing()
EndProcedure
On se moque pas les génie de la 3D, je débute ! :p

Comtois si ta le temps sur un post, tu peux m'expliquer comment marche les datas ?

Ths d'avance :p

Publié : mar. 02/mars/2004 22:55
par Invité
extrait du site mandragor
Vu qu’on sait que notre objet est un ensemble de triangle, il faut à présent savoir ce qu’est un triangle. Vous savez sûrement qu’un triangle est défini par trois points. On parlera de trois vectrices (Vertexes, Meshes). Il s’agit de points dans l’espace (objet) sur lesquels sont « posés » les triangles.

Il est conseillé d’avoir un ensemble de vectrices séparé de l’ensemble des faces (c’est à dire que chaque face pointe vers trois vectrice, sans les contenir vraiment), car la plupart du temps une vectrice est utilisée par plus d’un triangle. Ca serait idiot d’avoir deux vectrices en mémoire qui représentent exactement le même point.
Une vectrice, finalement, c’est un quadruplet (x,y,z,t), point final.

Mais ça n’est pas tout, pour définir totalement une face (un triangle), on a besoin de quelques renseignements en plus :

- La normale en chaque sommet du triangle, pour des calculs de lumières.
- Le matériau de cette face.
- Si le matériau de cette face possède une texture, alors il faut que chaque sommet possède une coordonée de texture.

Exemple le plus simple avec un plain

Code : Tout sélectionner

DataSection
PlainPoints:
Data.f -0.5, 0, -0.5 
Data.f 0.5 , 0, -0.5 
Data.f 0.5 , 0, 0.5 
Data.f -0.5, 0, 0.5 

PlainTriangles:
Data.w 0, 1, 2 
Data.w 0, 2, 3 
Data.w 2, 1, 0 
Data.w 3, 2, 0

PlainTextures:
Data.f 0, 0 
Data.f 1, 0 
Data.f 1, 1   
Data.f 0, 1 
EndDataSection


pour faire un mesh , il faut des vertex ( des points ) , des triangles , et définir les coordonnées uv de la texture.

pour un plain il faut 4 points
Data.f -0.5, 0, -0.5 ;point 0 , position en x,y,z
Data.f 0.5 , 0, -0.5 ;point 1 , position en x,y,z
Data.f 0.5 , 0, 0.5 ;point 2 , position en x,y,z
Data.f -0.5, 0, 0.5 ;point 3 , position en x,y,z
les axes , tu les places où tu veux , mais si tu veux que ton objet tourne sur son centre de gravité quand tu fais une commande rotateEntity() , il vaut mieux placer l'origine des axes sur le centre de gravité de ton objet.
ça donne ça :

Code : Tout sélectionner

3        2

0        1
ensuite , il faut relier les points pour former des triangles
ATTENTION ,l'ordre des points est important , selon que tu tournes dans un sens ou dans l'autre , le triangle sera visible ou non .
Dans mon exemple , je ne me suis pas embêté ,j'ai doublé les triangles , et je tourne un coup dans un sens , et un coup dans l'autre , comme ça , quelque soit l'orientation de mon objet , il sera visible .
exemple pour le premier triangle , 0,1,2 , et le troisième 2,1,0

Code : Tout sélectionner

PlainTriangles:
Data.w 0, 1, 2 
Data.w 0, 2, 3 
Data.w 2, 1, 0 
Data.w 3, 2, 0

Code : Tout sélectionner

3------2
|     /  |
|   /    |
| /      |
0------1

ça fontionnerait très bien avec seulement deux triangles

Code : Tout sélectionner

PlainTriangles:
Data.w 0, 1, 2 
Data.w 0, 2, 3 
seulement dans ce cas ,il faudra faire attention à l'orientation de l'objet , car une face sera invisible ( cachée )

maintenant il reste les textures

Code : Tout sélectionner

PlainTextures:
Data.f 0, 0 
Data.f 1, 0 
Data.f 1, 1   
Data.f 0, 1 
je vais te décrire ce que j'ai déduit de différents essais , et suite à la lecture du code "MeshManual" fourni avec purebasic , ce n'est peut-être pas très exact ,mais ça me suffit pour bricoler :)

donc , tu prends la texture , par exemple une image de 256x256

tu places les axes u et v , u en horizontal , et v en vertical

et tu indiques les coordonnées de chaque vertex sur cette texture
pour un objet plain ,c'est facile , pour des formes plus compliquées , mieux vaut utiliser des logiciels qui savent faire ça très bien :)
bon si je retrouve ,je mettrai l'adresse d'un site qui en dit un peu plus , je suis tombé dessus il y a quelques temps.

Autre point important ,j'avais remarqué que l'axe v était orienté ainsi

Code : Tout sélectionner

|--------> axe u
|
|
|
V  axe v
mais si j'en crois ce que j'ai lu , la version 1.3 d'ogre va changer le sens de l'axe v ,il sera orienté vers le haut .

dernier point , 0 correspond à l'origine de l'axe , et 1 correspond à 100%

Data.f 1,0
signifie que le point sur la texture sera à 100% sur l'axe u , et à 0 sur l'axe v

pour les couleurs ,je ne sais pas , je n'ai pas encore fait d'essais .

pour les normales :

http://raphaello.univ-fcomte.fr/ig/Math ... teurNormal
bon ça tu devais le savoir :)

par contre faut que je retrouve l'adresse d'un site qui explique assez bien comment le calculer concrètement .

mais bon , toujours pareil , les logiciels de modélisation font ça très bien , faire ses meshs en manuel c'est bien pour un cube ,après , ça devient vite casse tête .
à moins que tu ne veuilles écrire un logiciel de modélisation ? :)

sinon , autre exemple avec un cube ici

http://www.serveurperso.com/~cederavic/ ... f=14&t=593

Publié : mar. 02/mars/2004 23:18
par comtois
Zut je n'étais pas connecté , j'aurais pu poursuivre dans le post précédent !!
Texture :

Là aussi, un croquis avec les axes permettrait de mieux comprendre.
Tu as créé 3 textures, concretement elle ressemble à quoi individuellement ?
ben , déjà il y a une texture qui ne sert à rien , ensuite , les deux autres , tu prends la surface du sol vert ,c'est une texture , tu prends une face du cube bleu , c'est une autre texture , cette texture se répète sur les 6 faces du cube . là je ne comprends pas trop ta question ?
Caméra :
Comment as-tu choisi les coordonnées de la position de la caméra pour les 3 vues ?
après des essais :)

pour l'angle c'était évident , je voulais la caméra derrière ,donc je prends l'angle du perso ( cube bleu ) et j'ajoute 180° pour placer la camera derrière ,ensuite, je voulais placer la camera légèrement au dessus du perso avec camera\camerahaut , et enfin la distance entre le perso et la camera se trouve dans Camera\CameraDist que j'ai ajusté avec des essais .

Remarque à ce sujet , je ne me suis pas rendu compte que j'avais repris un vieux bout de code , et depuis j'ai changé la structure camera , je le ferai pour la prochaine version.
Car ça ne sert à rien de faire une structure camera , si c'est pour ajouter à nouveau Cameradist !
Camera\CameraDist , devient Camera\Distance dans la prochaine version :)

autre remarque , tu peux t'amuser à modifier le mesh du sol ,en mettant un plain à la place du cube par exemple , et ensuite ,tu modifies les valeurs des vertex du plain , et tu observes ce qui se passe ,y'a pas mieux pour se faire sa propre idée :)

Publié : mar. 02/mars/2004 23:22
par comtois
filperj a écrit :@Comtois
L'histoire d'ouvrir une autre fenêtre pour le menu, c'était juste une idée comme ça... Mais j'ai pas compris comment tu propose de s'y prendre? Des boutons à côté du windowedscreen? Ou pas du tout ça?
Enfin, j'ai téléchargé, je regarderai mieux demain (fatigué).

J'ai fait comme ça , juste pour voir si ça marchait , j'ai tout à apprendre pour les applis windows ,c'est l'occasion :)
par contre , apparemment ,c'est pas trop compatible avec la 3D ?
ça plante chez denis , et qui d'autre ?
ou alors on fait mal un truc ?

chez moi ça ne plante en tout cas .

Code : Tout sélectionner

....

ElseIf OpenWindowedScreen( WindowID(0), 0, 0, ScreenWidth , ScreenHeight , 0, 0, 0 ) = 0 
   MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 ) 
   End 
EndIf 

;/ un petit menu
CreateMenu(0,WindowID(0))
MenuTitle("Fichier")
   MenuItem(1,"Enregistre une partie")
   MenuItem(2,"Charge une partie")
   MenuItem(3,"Quitter")
MenuTitle("Affichage")
   MenuItem(11,"Vue 2D")
   MenuItem(12,"Vue 3D")
MenuTitle("Niveau")
   MenuItem(21,"Annule le dernier coup")
   MenuItem(22,"Charge un niveau")
   MenuItem(22,"Charge une solution")
MenuTitle("Options")
   MenuItem(31,"Paramétrer les Touches")
   MenuItem(32,"Vitesse")
MenuTitle("Aide")
   MenuItem(41,"Aide Sokoban3D")
   MenuItem(42,"A propos de ...")  
;/une barre 
;pourquoi on ne la voit Pas ?
If CreateStatusBar(0,WindowID(0))
   AddStatusBarField(100)
   AddStatusBarField(50)
   AddStatusBarField(100)
EndIf

  StatusBarText(0, 0, "Area 1")
  StatusBarText(0, 1, "Area 2", #PB_StatusBar_BorderLess)
  StatusBarText(0, 2, "Area 3", #PB_StatusBar_Right | #PB_StatusBar_Raised) 
  UpdateStatusBar(0)

Publié : mer. 03/mars/2004 5:48
par Anonyme2
Merci Comtois,

je vais regarder cet après-midi.
Mes questions sont basiques car je ne me suis pas mis à la 2D ou 3D donc tout est nouveau. Je lis la doc de PB mais elle est déjà faite pour des connaisseurs. Si il y a des logiciels qui permettent de modeliser les MESH c'est aussi bien.

Publié : mer. 03/mars/2004 7:34
par comtois
CORBASE a écrit :Comtois si ta le temps sur un post, tu peux m'expliquer comment marche les datas ?Ths d'avance :p
Euh , le mieux quand tu ne comprends pas un truc ,c'est que tu fasses un post toi même pour poser ta question , et ne donne pas de nom sinon les autres se diront "bon ben ,si ce que j'ai à lui dire ça ne l'intéresse pas ,je le garde pour moi " :lol:

il faut ménager les susceptibilités , et puis mon temps :)

je te fais un exemple dans la section débutant pour lancer le débat , en attendant que d'autres complètent l'information s'ils le jugent utile .

Publié : mer. 03/mars/2004 12:23
par Anonyme2
ça plante chez denis , et qui d'autre ?
Ca plante lorsque l'on quite avec la touche Escape
Peut-être la Dll de Danilo ?

Publié : mer. 03/mars/2004 15:09
par filperj
Ca plante lorsque l'on quite avec la touche Escape
Peut-être la Dll de Danilo ?
Ca se pourrait bien, il me semble que c'était une version béta... si je me souvient bien.
Essais de retester avec la Dll "standart", à l'occasion.