Page 2 sur 6

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : jeu. 10/févr./2011 11:32
par Cool Dji
T'as mis les 2 fichiers graphiques dans le même dossier que la source ?

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : jeu. 10/févr./2011 17:27
par SPH
Cool Dji a écrit :T'as mis les 2 fichiers graphiques dans le même dossier que la source ?
Oui

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : jeu. 10/févr./2011 18:53
par Ar-S
ça marche ici.
Je trouve étrange ce genre d'accouds lorsque qu'on tourne en X

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : jeu. 10/févr./2011 20:43
par Cool Dji
Ar-S a écrit :Yeah bien joué, belles avancées :) Image
Héhé, Merci
Ar-S a écrit :Je trouve étrange ce genre d'accouds lorsque qu'on tourne en X
Je vois pas ce que tu veux dire Ar-S : tu t'étonnes que les acteurs de films X se donnent des coups ?

Bon, sinon, il s'est passé un truc bizarre : j'ai testé l'executable avec la Engine3D.dll sur un PC ou PB n'est pas installé et le prog a planté. Alors, que j'avais déjà testé des productions au préalable (gaga punch, notamment) sur ce PC. C'est le poste d'un collègue qui me sert de machine à test !!

Problème sur le directory ? je regarde ça mais à la maison tous les ordis ont PureBasic d'installé !!
SPH, ça te fait quoi précisément ? (tu peux mettre une copie d'écran ?)
Est-ce que ça peut avoir un lien avec l'option du compilateur (ps : ne pas mettre directX dans bibliothèque sous systeme avec la 4.51)

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : dim. 13/févr./2011 17:04
par beauregard
Cool Dji a écrit :
Ar-S a écrit :Yeah bien joué, belles avancées :) Image
Bon, sinon, il s'est passé un truc bizarre : j'ai testé l'executable avec la Engine3D.dll sur un PC ou PB n'est pas installé et le prog a planté. Alors, que j'avais déjà testé des productions au préalable (gaga punch, notamment) sur ce PC. C'est le poste d'un collègue qui me sert de machine à test !!

Problème sur le directory ? je regarde ça mais à la maison tous les ordis ont PureBasic d'installé !!
SPH, ça te fait quoi précisément ? (tu peux mettre une copie d'écran ?)
Est-ce que ça peut avoir un lien avec l'option du compilateur (ps : ne pas mettre directX dans bibliothèque sous systeme avec la 4.51)
avec la 3D, il y a peut être une dll indispensable, comme Engine3D.dll, faut poser la question sur le forum english.

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : dim. 13/févr./2011 20:17
par G-Rom
Je trouve étrange ce genre d'accouds lorsque qu'on tourne en X
If ExamineMouse()
MouseX.f = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY.f = -(MouseDeltaY()/10)*#CameraSpeed/2
EndIf

++

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : dim. 13/févr./2011 21:41
par Cool Dji
@G-Rom : Merci pour le .f, du coup j'ai compris la question d'Ar-S !! :D

@Beauregard : Cool de te lire sur le forum, ça faisait longtemps !! Je vais faire différentes versions à test que j'essayerai chez mon collègue : la principale piste => j'ai lancé depuis une clé USB, faut peut être copier sur le Disque Dur...

Je continue de travailler sur un affichage face par face sans passer par un cube complet. Ca permet de varier les textures plus facilement et d'intégrer de temps en temps des textures du style comme celle-ci... :lol: :lol: :lol:

Image

Tout de suite, on a envie de se perdre dans le labyrinthe... :mrgreen:

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : dim. 13/févr./2011 22:27
par G-Rom
De rien.
Essaye d'utilisé des "plans" a la place des cubes pour le sol , tu vas gagner pas mal de tps proc.
pour les poster , utilise les billboards , c'est fait pour ca.
CameraRange(CamID,Near,Far)
Near correspond a la zone de clipping de ton frustum culling ( qui est implémenté en natif )
Far , la distance lointaine.


Image

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : lun. 14/févr./2011 13:44
par Cool Dji
Après essais,

ça prends moins de temps d'afficher 6 faces d'un cube avec le même mesh que d'afficher 2 faces d'un cube avec 2 mesh différents !!!

Donc le nombre de mesh est un facteur d'optimisation important.
Je vais tester et comparer :

1 - garder l'unité du cube en n'affichant que les faces utiles

2 - placer toutes les faces visibles dans un seul mesh => Est-ce que c'est le principe utilisé dans la fonction LoadWord() ?

3 - agréger des faces pour faire des plans => ça risque de faire un grand nombre de texture différentes

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : lun. 14/févr./2011 18:55
par G-Rom
1 - garder l'unité du cube en n'affichant que les faces utiles
pourquoi pas.
2 - placer toutes les faces visibles dans un seul mesh => Est-ce que c'est le principe utilisé dans la fonction LoadWord() ?
Erreur , tu auras des problèmes d'optimisations , le frustum detecte si un mesh est dans le champ de vision , si oui , il parcours les faces du mesh , on l'occurence tout ton niveau. pour loadworld , l'engine utilise un paging géometry différent.
LoadWorld() sera surement supprimer , format obselete.
tu auras à la place des static geometry , 1 millions de cube ne ferons pas peur à pb.

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : lun. 14/févr./2011 20:37
par Cool Dji
Oki G-Rom

1 million !!!!! :D

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : ven. 18/févr./2011 23:18
par Cool Dji
Nouvelle progression grâce à la rubrique de Comtois sur la construction de mesh
http://comtois.developpez.com/tutoriels ... 3d/cube3d/
Je cherchais une rubrique aussi essentielle depuis longtemps et je suis tombé dessus seulement aujourd'hui...
Merci donc Comtois d'avoir posté ce post en 2008 !!

Gràce à cela, j'ai compris comment rendre visible les faces de l'intérieur du cube car je cherchais le moyen de pouvoir déambuler à l'interieur des mesh...

J'ai défini (avec un tableur excel) toutes les possibilités de cubes de 1 à 6 faces.
le cube 1 a la face du dessus
le cube 2 a la face de dessous
le cube 3 a la face du dessus et du dessous
.
.
.
le cube 64 a toutes les faces

Ceci me permet de construire un labyrinthe avec un ensemble de briques différentes et je n'affiche que le strict minimum de faces.
Là c'est encore un peu de la théorie car j'ai confondu ordre des points et normale pour rendre les faces visibles de l'interieur ou de l'exterieur du cube.
Là, seuls les cubes 15 et 48 sont opérationnels (il faut juste que je relance excel pour générer tous les 64 cubes).
Je vais ajouter d'autres briques spécifiques comme des escaliers ou des rampes...

Ce week-end, je vais :
- finir cette version (avec tous les cubes possibles)
- améliorer et commenter le code
- refaire un labyrinthe plus sympa

En attendant, si vous êtes curieux :

Texture01.jpg
Image

Police.bmp
Image

DefinitionCube.txt (c'est l'include qui contient la définition des 64 mesh-cubes)
http://xdji.free.fr/Telechargement/DefinitionCube.txt

Code : Tout sélectionner

; Cool Dji, Février 2011, PB 4.51

#CameraSpeed = 10
#Hauteur = 100
test.i =0
decacam.i=1

InitSprite() : InitKeyboard()  :InitEngine3D() : InitMouse() : InitSprite3D()

AntialiasingMode(#PB_AntialiasingMode_x6)

OpenScreen(1024, 768, 32, "Circuit")


;Add3DArchive("\Texture\", #PB_3DArchive_FileSystem)
Add3DArchive("\", #PB_3DArchive_FileSystem)

;- Génération de la police de caractère
LoadImage(0,"police.bmp")
For j =0 To 46:GrabImage(0,1,j*6,0,6,7)
CreateSprite(j,6,7,#PB_Sprite_Texture):TransparentSpriteColor(j, 0)
StartDrawing(SpriteOutput(j)):DrawImage(ImageID(1),0,0): StopDrawing()
CreateSprite3D(j, j):Next


;- code Création d'un cube de 3d  -  Comtois

;-Mesh




CreateMesh(1, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(1, Options      , ?Sommets_1, 4*1)
SetMeshData(1, #PB_Mesh_Face, ?Triangles_1, 2*1)

CreateMesh(2, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(2, Options      , ?Sommets_2, 4*1)
SetMeshData(2, #PB_Mesh_Face, ?Triangles_2, 2*1)

CreateMesh(3, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(3, Options      , ?Sommets_3, 4*2)
SetMeshData(3, #PB_Mesh_Face, ?Triangles_3, 2*1*2)

CreateMesh(4, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(4, Options      , ?Sommets_4, 4*1)
SetMeshData(4, #PB_Mesh_Face, ?Triangles_4, 2*1)

CreateMesh(5, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(5, Options      , ?Sommets_5, 4*2)
SetMeshData(5, #PB_Mesh_Face, ?Triangles_5, 2*2)

CreateMesh(6, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(6, Options      , ?Sommets_6, 4*2)
SetMeshData(6, #PB_Mesh_Face, ?Triangles_6, 2*2)

CreateMesh(7, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(7, Options      , ?Sommets_7, 4*3)
SetMeshData(7, #PB_Mesh_Face, ?Triangles_7, 2*3)

CreateMesh(8, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(8, Options      , ?Sommets_8, 4*1)
SetMeshData(8, #PB_Mesh_Face, ?Triangles_8, 2*1)

CreateMesh(9, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(9, Options      , ?Sommets_9, 4*2)
SetMeshData(9, #PB_Mesh_Face, ?Triangles_9, 2*2)

CreateMesh(10, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(10, Options      , ?Sommets_10, 4*2)
SetMeshData(10, #PB_Mesh_Face, ?Triangles_10, 2*2)

CreateMesh(11, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(11, Options      , ?Sommets_11, 4*3)
SetMeshData(11, #PB_Mesh_Face, ?Triangles_11, 2*3)

CreateMesh(12, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(12, Options      , ?Sommets_12, 4*2)
SetMeshData(12, #PB_Mesh_Face, ?Triangles_12, 2*2)

CreateMesh(13, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(13, Options      , ?Sommets_13, 4*3)
SetMeshData(13, #PB_Mesh_Face, ?Triangles_13, 2*3)

CreateMesh(14, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(14, Options      , ?Sommets_14, 4*3)
SetMeshData(14, #PB_Mesh_Face, ?Triangles_14, 2*3)

CreateMesh(15, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(15, Options      , ?Sommets_15, 4*4)
SetMeshData(15, #PB_Mesh_Face, ?Triangles_15, 2*4)

CreateMesh(16, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(16, Options      , ?Sommets_16, 4*1)
SetMeshData(16, #PB_Mesh_Face, ?Triangles_16, 2*1)

CreateMesh(17, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(17, Options      , ?Sommets_17, 4*2)
SetMeshData(17, #PB_Mesh_Face, ?Triangles_17, 2*2)

CreateMesh(18, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(18, Options      , ?Sommets_18, 4*2)
SetMeshData(18, #PB_Mesh_Face, ?Triangles_18, 2*2)

CreateMesh(19, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(19, Options      , ?Sommets_19, 4*3)
SetMeshData(19, #PB_Mesh_Face, ?Triangles_19, 2*3)

CreateMesh(20, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(20, Options      , ?Sommets_20, 4*2)
SetMeshData(20, #PB_Mesh_Face, ?Triangles_20, 2*2)

CreateMesh(21, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(21, Options      , ?Sommets_21, 4*3)
SetMeshData(21, #PB_Mesh_Face, ?Triangles_21, 2*3)

CreateMesh(22, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(22, Options      , ?Sommets_22, 4*3)
SetMeshData(22, #PB_Mesh_Face, ?Triangles_22, 2*3)

CreateMesh(23, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(23, Options      , ?Sommets_23, 4*4)
SetMeshData(23, #PB_Mesh_Face, ?Triangles_23, 2*4)

CreateMesh(24, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(24, Options      , ?Sommets_24, 4*2)
SetMeshData(24, #PB_Mesh_Face, ?Triangles_24, 2*2)

CreateMesh(25, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(25, Options      , ?Sommets_25, 4*3)
SetMeshData(25, #PB_Mesh_Face, ?Triangles_25, 2*3)

CreateMesh(26, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(26, Options      , ?Sommets_26, 4*3)
SetMeshData(26, #PB_Mesh_Face, ?Triangles_26, 2*3)

CreateMesh(27, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(27, Options      , ?Sommets_27, 4*4)
SetMeshData(27, #PB_Mesh_Face, ?Triangles_27, 2*4)

CreateMesh(28, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(28, Options      , ?Sommets_28, 4*3)
SetMeshData(28, #PB_Mesh_Face, ?Triangles_28, 2*3)

CreateMesh(29, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(29, Options      , ?Sommets_29, 4*4)
SetMeshData(29, #PB_Mesh_Face, ?Triangles_29, 2*4)

CreateMesh(30, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(30, Options      , ?Sommets_30, 4*4)
SetMeshData(30, #PB_Mesh_Face, ?Triangles_30, 2*4)

CreateMesh(31, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(31, Options      , ?Sommets_31, 4*5)
SetMeshData(31, #PB_Mesh_Face, ?Triangles_31, 2*5)

CreateMesh(32, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(32, Options      , ?Sommets_32, 4*1)
SetMeshData(32, #PB_Mesh_Face, ?Triangles_32, 2*1)

CreateMesh(33, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(33, Options      , ?Sommets_33, 4*2)
SetMeshData(33, #PB_Mesh_Face, ?Triangles_33, 2*2)

CreateMesh(34, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(34, Options      , ?Sommets_34, 4*2)
SetMeshData(34, #PB_Mesh_Face, ?Triangles_34, 2*2)

CreateMesh(35, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(35, Options      , ?Sommets_35, 4*3)
SetMeshData(35, #PB_Mesh_Face, ?Triangles_35, 2*3)

CreateMesh(36, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(36, Options      , ?Sommets_36, 4*2)
SetMeshData(36, #PB_Mesh_Face, ?Triangles_36, 2*2)

CreateMesh(37, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(37, Options      , ?Sommets_37, 4*3)
SetMeshData(37, #PB_Mesh_Face, ?Triangles_37, 2*3)

CreateMesh(38, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(38, Options      , ?Sommets_38, 4*3)
SetMeshData(38, #PB_Mesh_Face, ?Triangles_38, 2*3)

CreateMesh(39, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(39, Options      , ?Sommets_39, 4*4)
SetMeshData(39, #PB_Mesh_Face, ?Triangles_39, 2*4)

CreateMesh(40, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(40, Options      , ?Sommets_40, 4*2)
SetMeshData(40, #PB_Mesh_Face, ?Triangles_40, 2*2)

CreateMesh(41, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(41, Options      , ?Sommets_41, 4*3)
SetMeshData(41, #PB_Mesh_Face, ?Triangles_41, 2*3)

CreateMesh(42, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(42, Options      , ?Sommets_42, 4*3)
SetMeshData(42, #PB_Mesh_Face, ?Triangles_42, 2*3)

CreateMesh(43, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(43, Options      , ?Sommets_43, 4*4)
SetMeshData(43, #PB_Mesh_Face, ?Triangles_43, 2*4)

CreateMesh(44, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(44, Options      , ?Sommets_44, 4*3)
SetMeshData(44, #PB_Mesh_Face, ?Triangles_44, 2*3)

CreateMesh(45, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(45,Options      , ?Sommets_45, 4*4)
SetMeshData(45, #PB_Mesh_Face, ?Triangles_45, 2*4)

CreateMesh(46, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(46, Options      , ?Sommets_46, 4*4)
SetMeshData(46, #PB_Mesh_Face, ?Triangles_46, 2*4)

CreateMesh(47, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(47, Options      , ?Sommets_47, 4*5)
SetMeshData(47, #PB_Mesh_Face, ?Triangles_47, 2*5)

CreateMesh(48, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(48, Options      , ?Sommets_48, 4*2)
SetMeshData(48, #PB_Mesh_Face, ?Triangles_48, 2*2)

CreateMesh(49, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(49, Options      , ?Sommets_49, 4*3)
SetMeshData(49, #PB_Mesh_Face, ?Triangles_49, 2*3)

CreateMesh(50, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(50, Options      , ?Sommets_50, 4*3)
SetMeshData(50, #PB_Mesh_Face, ?Triangles_50, 2*3)

CreateMesh(51, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(51, Options      , ?Sommets_51, 4*4)
SetMeshData(51, #PB_Mesh_Face, ?Triangles_51, 2*4)

CreateMesh(52, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(52, Options      , ?Sommets_52, 4*3)
SetMeshData(52, #PB_Mesh_Face, ?Triangles_52, 2*3)

CreateMesh(53, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(53, Options      , ?Sommets_53, 4*4)
SetMeshData(53, #PB_Mesh_Face, ?Triangles_53, 2*4)

CreateMesh(54, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(54, Options      , ?Sommets_54, 4*4)
SetMeshData(54, #PB_Mesh_Face, ?Triangles_54, 2*4)

CreateMesh(55, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(55, Options      , ?Sommets_55, 4*5)
SetMeshData(55, #PB_Mesh_Face, ?Triangles_55, 2*5)

CreateMesh(56, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(56, Options      , ?Sommets_56, 4*3)
SetMeshData(56, #PB_Mesh_Face, ?Triangles_56, 2*3)

CreateMesh(57, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(57, Options      , ?Sommets_57, 4*4)
SetMeshData(57, #PB_Mesh_Face, ?Triangles_57, 2*4)

CreateMesh(58, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(58, Options      , ?Sommets_58, 4*4)
SetMeshData(58, #PB_Mesh_Face, ?Triangles_58, 2*4)

CreateMesh(59, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(59, Options      , ?Sommets_59, 4*5)
SetMeshData(59, #PB_Mesh_Face, ?Triangles_59, 2*5)

CreateMesh(60, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(60, Options      , ?Sommets_60, 4*4)
SetMeshData(60, #PB_Mesh_Face, ?Triangles_60, 2*4)

CreateMesh(61, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(61, Options      , ?Sommets_61, 4*5)
SetMeshData(61, #PB_Mesh_Face, ?Triangles_61, 2*5)

CreateMesh(62, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(62, Options      , ?Sommets_62, 4*5)
SetMeshData(62, #PB_Mesh_Face, ?Triangles_62, 2*5)

CreateMesh(63, 100)
Options = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
SetMeshData(63, Options      , ?Sommets_63, 4*6)
SetMeshData(63, #PB_Mesh_Face, ?Triangles_63, 2*6)




;-Textures

LoadTexture(0,"Texture01.jpg")

;-Matière

CreateMaterial(0, TextureID(0))



CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,300,#Hauteur+#Hauteur/2,300)
CameraLookAt(0,1000,0,1000)

;-
;-- Tableau pour les cases du labyrinthe
Dim hauteur.f(900*2)
Dim posx.f(900*2)
Dim posy.f(900*2)

Dim mposx.f(1)
Dim mposy.f(1)
Dim mposz.f(1)
Dim mmesh.i(1)
nbmesh=0


current = 0
Restore Labyrinthe
Repeat
  Read.w hauteur(current)
  current+1
Until current = 900*2



;---- place chaque case en X et Y

j=0

For l=1 To 2

For i=1 To 3000 Step 100
 For k=1 To 3000 Step 100
  If hauteur(j)>0
   nbmesh=nbmesh+1    
   ReDim mposx(nbmesh)
   ReDim mposy(nbmesh)
   ReDim mposz(nbmesh)
   ReDim mmesh(nbmesh)
   
    mposx(nbmesh)=k
    mposy(nbmesh)=i
    mposz(nbmesh)=l*#Hauteur
    mmesh(nbmesh)=hauteur(j)
    
EndIf
  posx(j)=k
  posy(j)=i
  j=j+1
    
  Next
Next

Next  ; l


#Entity = 0
For j=1 To nbmesh

  ;- Affecte le bon mesh
 ; si hauteur <> 00 ou -1, creation d'un mesh avec sauvegarde des coordonnées pour chaque mesh 
CreateEntity(j, MeshID(mmesh(j)), MaterialID(0))

; CreateEntity(j, MeshID(0), MaterialID(10))


ScaleEntity(j, 100, #Hauteur, 100) ; Agrandi l'entity

Next


;-
;-- Gestion des textes
;Chaine qui indique l'ordre des lettres contenues dans l'image "Gaga Punch.bmp"
Global Strig$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789-"

; Déclaration de la procédre qui affiche les textes
; (Texte à afficher, position Y, taille, n° de sprite, max aléatoire pour faire trembler la lettre)
Declare AffT(TextMenu01$,y.i,sz.i,sprite.i,rnd.i)

; le texte est automatiquement centré
; Text$ = TExt à afficher
; y     =position y du text
; sz    =Taille de la police (sert pour le zomm des lettres et de l'espacement)
; sp    =Pointe sur le sprite A de la bonne police
; rnd   =valeur de tremblement des lettres
Procedure AffT(Text$,y.i,sz.i,sp.i,rnd.i)
sx=0:For i=1 To Len(Text$):For j=1 To Len(Strig$)
If Mid(Text$,i,1)=Mid(Strig$,j,1):a=sz+2
DisplaySprite3D(sp+j-1,sx+Random(rnd)+400-(Len(Text$)*a)/2,y+Random(rnd),200)
sx=sx+sz+2:j=Len(Strig$):EndIf :Next:Next
EndProcedure


;-
;-       BIG LOOP

Repeat

; --   
For j=1 To nbmesh
     EntityLocate(j,mposx(j),mposz(j),mposy(j))  
Next

If ExamineKeyboard()
                       
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed
        Else
          KeyY = 0
        EndIf
     
       
      EndIf
     
     
      If ExamineMouse()
        MouseX.f = -(MouseDeltaX()/10)*#CameraSpeed/2
        MouseY.f = -(MouseDeltaY()/10)*#CameraSpeed/2
      EndIf
     
     
     
;- Position de la Camera
  Height.f = 11 ; TerrainHeight(CameraX(0), CameraZ(0))
  RotateCamera(0, MouseY, MouseX, RollZ, #PB_Relative)
     
     
;-- Test des collisions
;--- Sauvegarde l'ancienne position
   olkdkeyX=CameraX(0)
   olkdkeyY=CameraY(0)
   olkdkeyZ=CameraZ(0)
   
;--- Déplace la camera
   MoveCamera  (0, KeyX, -CameraY(0)+#Hauteur+#Hauteur/2, KeyY)

   
;--- Regarde si la camera est dans le décor
   
      test=0
        For j=0 To 899
          If hauteur(j)=0
             If ((CameraX(0)+decacam>=posx(j)) And (CameraX(0)-decacam=<posx(j)+100) And (CameraZ(0)+decacam>=posy(j)) And (CameraZ(0)-decacam=<posy(j)+100))
               test=1
             EndIf
           EndIf
        Next
         

     If test= 1
;---- Si oui, replace-là à son ancienne position
       CameraLocate(0,olkdkeyX, olkdkeyY, olkdkeyZ)
      EndIf
     
     
      RenderWorld()
           
     
      Start3D()
     
      AffT("KEY UP AND DOWN     MOUSE    TO MOVE AND TURN",80,6,0,0)
      AffT("X "+Str(CameraX(0)),100,6,0,0)
      AffT("Y "+Str(CameraY(0)),110,6,0,0)
      AffT("Z "+Str(CameraZ(0)),120,6,0,0)
   
     
      AffT(Str(CountRenderedTriangles())+" TRIANGLES",200,6,0,0)
      AffT(Str(Engine3DFrameRate(#PB_Engine3D_Current))+" FPS",210,6,0,0)
     

      Stop3D()
      FlipBuffers()
      ExamineKeyboard()
       
     Until KeyboardPushed(#PB_Key_Escape):
    End   
   
   
  
  
  
;{ Définition du cube
DataSection

  
  IncludeFile ("DefinitionCube.txt")

Labyrinthe:

; -1 = espace vide =>   pas de mesh
; 00 = obstacle    =>   pas de mesh
; 01 à 64 = brique sans test de collision
; Dessus	Dessous	devant	derrière	gauche	droite
;   32       16      8        4        2       1            

;                       Devant
;
;
;  Droite                                    Gauche
;
;
;                       Derriere
; Etage 00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,22,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,24,24,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,19,00,00,18,16,16,16,16,16,24,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,20,20,16,16,16,16,16,17,00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,17,00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,17,00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,00,16,16,16,16,16,16,17,00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,17,00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,20,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,18,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,00
Data.w 00,26,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

; Etage 01
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
Data.w 00,06,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,21,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,33,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,33,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,02,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,17,00
Data.w 00,26,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,00
Data.w 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

EndDataSection
;}
Edit 19 février

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : sam. 19/févr./2011 12:28
par Warkering
Ça prend un bouton "J'aime", définitivement! :wink:

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : sam. 19/févr./2011 18:28
par Cool Dji
Mignonne, hein la miss !

Bon, j'ai changé la structure du Map Editor pour ne créer des mesh que lorsqu'il y en faut...
case 00 = obstacle
case -1 = espace vide
case 01 à 64, briques du map editor

J'ai ajouté la possibilité d'avoir plusieurs étages dans le Map Editor...

J'ai remplacé le code précédent et pour que ça marche, il faut également mettre à jour la définition des cube (include en datasection)
J'ai oublié de paramétrer le mapping des faces, du coup, on perd en réalisme...

Stop coding, moules frites à préparer pour le repas du soir !!

Re: Labyrinthe 3D - début d'un nouveau projet

Publié : sam. 19/févr./2011 21:01
par Warkering
J'ai une petite remarque à faire. Je ne comprend pour quoi, mais :
Lorsque je regarde les cubes, j'ai 40 FPS, stable. Mais lorsque je regarde dans le vide, au plafond, j'ai une drop d'FPS vers les 30.