PureBasic

Forums PureBasic
Nous sommes le Dim 08/Déc/2019 20:09

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 67 messages ]  Aller à la page 1, 2, 3, 4, 5  Suivante
Auteur Message
 Sujet du message: Histoire d'un Cube (Notions de base à la 3D)
MessagePosté: Sam 29/Juin/2013 11:42 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Pure Basic 5.20 LTS - Mise à jour du 21 Juillet 2015
Image
Ce fil de discussion a pour objectif de vous apporter quelques notions de base dans le moteur 3D OGRE.

Qu'est ce que OGRE.
OGRE (Object-Oriented Graphics Rendering Engine) est un moteur 3D, écrit en C++ utilisé depuis d'autres langages : C#, Python, Java, ...... mais aussi avec Pure Basic (Of course).

■ Sites officiels :
http://www.ogre3d.org (En anglais)
https://www.patreon.com/ogre1

OGRE va vous permettre d'afficher des personnages, des bâtiments, des paysages, gérer des lumières et des ombres, utiliser une ou plusieurs caméras et grâce au système de particule de créer des effets de brouillards, flammes, fumées ..... en 3 Dimensions.

OpenMW est un projet Open Source utilisant OGRE 3D.
■ Vidéo de présentation : http://openmw.org/faq
■ Site : http://openmw.org/fr
■ Bin & Source : https://code.google.com/p/openmw/downloads/list

et aussi

Ogre3D Compositor Pure Basic Demo

Image

■ Vidéo : https://www.youtube.com/watch?v=BQyXeSgle7c

Un peu d'odre.
■ Créer un dossier que vous nommerez par exemple 3D Histoire d'un cube dans lequel vous placerez les codes que je vous présente ci-dessous.

■ Dans ce dossier que vous venez de créer, vous allez créer un dossier que vous nommerez data. Ce dossier contiendra l'ensembles des médias (Textures, Mesh, Eau (Water), Ciel(Skybox), Terrain, etc ....), polices, scripts qui seront utilisés dans vos créations 3D.

■ Dans le dossier Data, vous allez créer :
-Un dossier Textures
-Un dossier Scripts
-Un dossier Models

-Vous allez aussi copier les dossiers fonts et GUI que vous trouverez dans les exemples 3D du dossier d'installation de Pure Basic.

La structures de votre dossier devrait maintenant ressembler à celle ci-dessous :
■→<Histoire d'un cube>
               ■→<Data>
                         ■→<Fonts>
                         ■→<GUI>
                         ■→<Models>
                         ■→<Particules>
                         ■→<Textures>
                         ■→<Scripts>

Minimum vital.

Le néant
       Le code minimal à compiler : Initialisation du moteur 3D, ouverture d'une scène, mise en place d'une caméra, Une boucle événementielle ou vous apprendrez à quitter votre code.

Les trois dimensions
       Coup d’œil au système de coordonnées de l'espace.

Naissance du cube
Un peu de lumière
Le clonage
Première chute
Saut de puce
Rotation d'une entité.

Suivre une entité avec la caméra
       Utilisation de CameraFollow() (Apparu avec la version 5.20).

Permis de conduire
       Piloter un cube, poser des obstacles et gérer la caméra suiveuse.

Ramasser des pièces
Ramasser des pièces et ajouter un score.

Un peu de relief (Ciel, Soleil, Brouillard, Eau, Terrain)

Les nodes

Afficher un texte au dessus d'une entité Utilisation de la bibliothèque Text3D.

Créer un point d'articulation (Joint ou encore point de pivot) entre les points centraux de deux entités.

■ Les particules
       Découverte du système des particules
       Il neige

Le GUI : GUI est l'acronyme de l'expression anglaise Graphical User Interface, signifiant Interface Graphique d'Utilisateur.

Créer un chemin. : Comment obliger une entité à suivre un chemin ? C'est ce que nous allons voir avec l'objet CreateSpline().

Je vous propose de voir aussi ce deuxième exemple de code un peu différent du précédent. Le cube va suivre un chemin comportant des points de passage obligés, matérialisés par des balises sphériques blanches. Il devra aussi passer une passerelle constituée de deux plans inclinés à 45°.

La position x,y et z du cube s'affichera en bas de l'écran ainsi que le nombre de tours effectué.

Afficher le FPS (Frames Per Second) : Depuis la version 5.30 de Pure Basic il est possible d'afficher le nombre d'images par seconde sur un écran grace à la fonction Engine3DStatus() associé au paramétre #PB_Engine3D_CurrentFPS

Les mains dans le cambouis..
Je n'ai pas trouvé autre chose comme titre. C'est le coin bricolage ou truc et astuces.
Installer une version autonome de DirectX 9c. (Windows)
Zoomer sur une scene 3D avec la molette de la souris (Windows)
Comment rendre un materiel (texture) partiellement ou totalement transparent.
Créer une SEULE entité avec un ensemble de meshs.
Le Culling : Comment voir l'intérieur d'un mesh.
Se voir dans un miroir.
Deltatime : Comment gérer correctement les déplacements d'une entité dans une application via le deltatime. (Par G-Rom)

Utilitaires..
Misfit Model 3D Version 1.3.8 : Malheureusement ce projet est abandonné mais suffisamment stable pour créer des meshs que vous exporterez en fichier obj. Utilisez ensuite DelEd pour exporter votre fichier obj en fichier mesh.
Download : http://sourceforge.net/projects/misfitm ... source=dlp
Site          : http://www.misfitcode.com/misfitmodel3d
Langage   : Français

DeleD Version 2.45 : Pas aussi pratique que Misfit, ce logiciel est par contre le complément idéal pour importer un fichier obj par exemple et l'exporter vers Ogre3D sous la forme d'un fichier mesh.
Download : http://www.delgine.com/index.php?filename=product_deled
Site          : http://www.delgine.com
Langage   : Anglais

Récupérer les plugins d'import export sur ce lien http://www.delgine.com/plugins/viewPluginCategories.php et aprés décompression, copier les fichiers dans le dossier Plugins du dossier d'installation de Deled.

Quelques exemples de codes..
■ De nombreux exemples se trouvent dans le dossier Example\3D se trouvant dans le dossier d'installation de Pure Basic.

Quelques meshs gratuits pour Ogre3D..
■ Un pack signalé par Comtois sur ce lien http://www.purebasic.fr/french/viewtopi ... 13&t=13743

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Dernière édition par falsam le Lun 05/Oct/2015 23:25, édité 60 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Histoire d'un Cube : Le néant
MessagePosté: Sam 29/Juin/2013 11:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Le néant. Touche Escape pour quitter le programme.
Code:
;Le néant
InitEngine3D()
InitKeyboard()
InitSprite()

window = OpenWindow(#PB_Any,0,0,1024,768,"Histoire d'un cube (le néant)")
OpenWindowedScreen(WindowID(window),0,0,1024,768)

;
; Une camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
MoveCamera(Camera,0,0,10)

; La caméra regarde en direction d'un point au coordonnées x=0, y=0, z=0
CameraLookAt(camera,0,0,0)

While #True
 
  Event = WindowEvent()
   
  ExamineKeyboard() 
 
  ; Touche Escape pour fermer l'application
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf 
     
  ; Affiche le rendu de la scène
  RenderWorld()
  FlipBuffers()
Wend
Vous ne voyez rien ? c'est normal : Votre scène (Votre monde) est complètement vide !

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Dernière édition par falsam le Dim 04/Jan/2015 0:30, édité 6 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Histoire d'un Cube - Les 3 dimensions
MessagePosté: Sam 29/Juin/2013 11:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
3D signifie 3 dimensions. Une scène 3D c'est 3 axes au lieu de 2 dans un plan 2D.

l'axe X détermine la position horizontale d'un objet.
l'axe Y détermine la position verticale d'un objet.
l'axe Z détermine la profondeur d'un objet.

Les coordonnées d'un objet se donnent sous la forme (X, Y, Z).
Exemple

Code:
;Les trois dimensions

; Coordonnées x,y,z de la caméra
Define.f CamX, CamY, CamZ

InitEngine3D()
InitKeyboard()
InitSprite()

window = OpenWindow(#PB_Any,0,0,1024,768,"Les 3 dimensions")
OpenWindowedScreen(WindowID(window),0,0,1024,768)

;
; Les axes
Red = RGB(255, 0, 0) ;Couleur de l'axe X
Green = RGB(0, 255, 0) ;Couleur de l'axe Z
Blue = RGB(0, 255, 255) ;Coleur de l'axe Y

AxeX = CreateLine3D(#PB_Any, -10,0,0, Red, 10, 0, 0, Red)
AxeY = CreateLine3D(#PB_Any, 0,-10,0, Blue, 0, 10, 0, Blue)
AxeZ = CreateLine3D(#PB_Any, 0,0,-10, Green, 0, 0, 10, Green)

;
; Une camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CamX=2.0
CamY=1.0
CamZ=15

; La caméra regarde en dirextion d'un point au coordonnées x=0, y=0, z=0
CameraLookAt(camera,0,0,0)


While #True
 
  Event = WindowEvent()
   
  ExamineKeyboard() 
 
  ; Touche Escape pour fermer l'application
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf 
 
  If KeyboardPushed(#PB_Key_Left)
    CamX-0.2 
  ElseIf KeyboardPushed(#PB_Key_Right)
    CamX+0.2
  EndIf
 
  If KeyboardPushed(#PB_Key_Up)
    CamY+0.2 
  ElseIf KeyboardPushed(#PB_Key_Down)
    CamY-0.2
  EndIf
 
  MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute)
 
  ; Affiche le rendu de la scène
  RenderWorld()
  FlipBuffers()
Wend


Utiliser les flèches de direction gauche, droite, haut et bas pour déplacer la caméra.

Un lien explicatif sur les repères dans l'espace
http://www.purebasic.com/french/documen ... index.html

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Dernière édition par falsam le Dim 04/Jan/2015 0:32, édité 8 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Histoire d'un Cube : Naissance du cube
MessagePosté: Sam 29/Juin/2013 11:48 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Naissance du cube
Code:
;Naissance d'un cube

; Coordonnées x,y,z de la caméra
Define.f CamX, CamY, CamZ

InitEngine3D()
Parse3DScripts()
InitKeyboard()
InitSprite()

window = OpenWindow(#PB_Any,0,0,1024,768,"Histoire d'un cube")
OpenWindowedScreen(WindowID(window),0,0,1024,768)

;
; Les axes
Red = RGB(255, 0, 0) ;Couleur de l'axe x
Green = RGB(0, 255, 0) ;Couleur de l'axe y
Blue = RGB(0, 255, 255) ;Coleur de l'axe z

CreateLine3D(#PB_Any, -10,0,0, Red, 10, 0, 0, Red) ;Axe X
CreateLine3D(#PB_Any, 0,-10,0, Green, 0, 10, 0, Green) ;Axe Y
CreateLine3D(#PB_Any, 0,0,-10, Blue, 0, 0, 10, Blue) ;Axe Z

;
; Naissance d'un cube

; Une forme : C'est notre MESH qui ici sera un cube
Mesh = CreateCube(#PB_Any, 1)

; Une texture (Cette texture peut être loader avec l'instruction LoadTexture()
Texture = CreateTexture(#PB_Any,512,512)
StartDrawing(TextureOutput(Texture))
Box(0,0,512,512,RGB(0, 0, 0))
Box(1,1,510,510,RGB(255, 216, 0))
StopDrawing()

; Un MATERIEL c'est la partie visible de notre cube qui sera constitué de notre texture
Material = CreateMaterial(#PB_Any,TextureID(texture))

; Création de notre entité : ENTITE = MESH + MATERIEL
; Par défaut il se positionne au point de coordonnée 0,0,0
Entity = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material))

;
; Une camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CamX=2.0
CamY=1.0
CamZ=15

; La caméra regarde en direction d'un point au coordonnées x=0, y=0, z=0
CameraLookAt(camera,0,0,0)


While #True
 
  Event = WindowEvent()
   
  ExamineKeyboard() 
 
  ; Touche Escape pour fermer l'application
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf 
 
  If KeyboardPushed(#PB_Key_Left)
    CamX-0.2 
  ElseIf KeyboardPushed(#PB_Key_Right)
    CamX+0.2
  EndIf
 
  If KeyboardPushed(#PB_Key_Up)
    CamY+0.2 
  ElseIf KeyboardPushed(#PB_Key_Down)
    CamY-0.2
  EndIf
   
  MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute)
 
  ; Affiche le rendu de la scène
  ClearScreen(RGB(0, 0, 0))
  RenderWorld()
  FlipBuffers()
Wend


le cube peut prendre la forme d'un parallélépipède rectangle.
Exemple pour une dimension de 4 x 3 x 2
Après la ligne de code Mesh = CreateCube(#PB_Any, 1) ajouter TransformMesh(Mesh, 0,0,0, 4,3,2, 0,0,0)

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Dernière édition par falsam le Mar 17/Sep/2013 14:04, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Histoire d'un Cube : Un peu de lumière
MessagePosté: Sam 29/Juin/2013 11:59 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Un peu de lumière.

Juste aprés la ligne de code Entity = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material)) ajouter le code ci-dessous.
Code:
;La lumiere
AmbientColor(RGB(151, 251, 151))
CreateLight(#PB_Any,RGB(151, 251, 151), -0.5, 3, 5)

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Dernière édition par falsam le Sam 29/Juin/2013 15:23, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Histoire d'un Cube : Le Clonage
MessagePosté: Sam 29/Juin/2013 12:17 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Le Clonage : Comment dupliquer un cube

A partir d'un seul mesh et d'un seul materiel, nous allons créer 10 entités.
Code:
;Naissance d'un cube : le Clonage

; Coordonnées x,y,z de la caméra
Define.f CamX, CamY, CamZ

InitEngine3D()
Parse3DScripts()
InitKeyboard()
InitSprite()

window = OpenWindow(#PB_Any,0,0,1024,768,"Histoire d'un cube")
OpenWindowedScreen(WindowID(window),0,0,1024,768)

;
; Les axes
Red = RGB(255, 0, 0) ;Couleur de l'axe x
Green = RGB(0, 255, 0) ;Couleur de l'axe y
Blue = RGB(0, 255, 255) ;Coleur de l'axe z

AxeX = CreateLine3D(#PB_Any, -10,0,0, Red, 10, 0, 0, Red)
AxeY = CreateLine3D(#PB_Any, 0,-10,0, Green, 0, 10, 0, Green)
AxeZ = CreateLine3D(#PB_Any, 0,0,-10, Blue, 0, 0, 10, Blue)

;
; Naissance d'un cube

; Une forme : C'est notre MESH qui ici sera un cube
Mesh = CreateCube(#PB_Any, 1)

; Une texture (Cette texture peut être loader avec l'instruction LoadTexture()
Texture = CreateTexture(#PB_Any,512,512)
StartDrawing(TextureOutput(Texture))
Box(0,0,512,512,RGB(0, 0, 0))
Box(1,1,510,510,RGB(255, 216, 0))
StopDrawing()

; Un MATERIEL c'est la partie visible de notre cube qui sera constitué de notre texture
Material = CreateMaterial(#PB_Any,TextureID(texture))

; Création de 10 entités : ENTITE = MESH + MATERIEL
; CreateEntity() permet de définir les coordonnées x,y,z lors de la création d'une entité
For X = 0 To 9
  CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material), X*2, 0, 0)
Next

;La lumiere
AmbientColor(RGB(151, 251, 151))
CreateLight(#PB_Any,RGB(151, 251, 151), -0.5, 3, 5)

;
; Une camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CamX=2.0
CamY=1.0
CamZ=15

; La caméra regarde en dirextion d'un point au coordonnées x=0, y=0, z=0
CameraLookAt(camera,0,0,0)

While #True
 
  Event = WindowEvent()
   
  ExamineKeyboard() 
 
  ; Touche Escape pour fermer l'application
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf 
 
  If KeyboardPushed(#PB_Key_Left)
    CamX-0.2 
  ElseIf KeyboardPushed(#PB_Key_Right)
    CamX+0.2
  EndIf
 
  If KeyboardPushed(#PB_Key_Up)
    CamY+0.2 
  ElseIf KeyboardPushed(#PB_Key_Down)
    CamY-0.2
  EndIf
   
  MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute)
 
  ; Affiche le rendu de la scène
  RenderWorld()
  FlipBuffers()
Wend

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Dernière édition par falsam le Dim 04/Jan/2015 0:34, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Histoire d'un Cube
MessagePosté: Sam 29/Juin/2013 12:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4067
Merci pour ce tuto 3D. Je vais enfin pouvoir apprendre :o

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Histoire d'un Cube : Première chute
MessagePosté: Sam 29/Juin/2013 15:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Le code ci-dessous illustre la première chute du cube. On mettra en oeuvre l'instruction CreateEntityBody qui permet d'attribuer de propriétés de Masse, de Restitution (Rebond) et de Friction .

L'instruction WorldShadows() permet d'ajouter de l'ombre. (Of course)
Code:
;Naissance d'un cube : Premiere chute

; Coordonnées x,y,z de la caméra
Define.f CamX, CamY, CamZ

InitEngine3D()
Parse3DScripts()
InitKeyboard()
InitSprite()

window = OpenWindow(#PB_Any,0,0,1024,768,"Histoire d'un cube")
OpenWindowedScreen(WindowID(window),0,0,1024,768)

;
; Naissance d'un cube

; Une forme : C'est notre MESH qui ici sera un cube
Cube_Mesh = CreateCube(#PB_Any, 1)
Ground_Mesh = CreatePlane(#PB_Any, 10, 10, 3, 3, 3, 3)

; Une texture (Cette texture peut être loader avec l'instruction LoadTexture()
; Cette texture servira pour notre cube et le sol
Texture = CreateTexture(#PB_Any,512,512)
StartDrawing(TextureOutput(Texture))
Box(0,0,512,512,RGB(0, 0, 0))
Box(1,1,510,510,RGB(255, 216, 0))
StopDrawing()

; Un MATERIEL c'est la partie visible de notre cube qui sera constitué de notre texture
Material = CreateMaterial(#PB_Any,TextureID(texture))

; Création d'un cube en hauteur
; CreateEntity() permet de définir les coordonnées x,y,z lors de la création d'une entité
Cube_Entity = CreateEntity(#PB_Any, MeshID(Cube_Mesh), MaterialID(Material), 0, 1, 0)
CreateEntityBody(Cube_Entity, #PB_Entity_BoxBody,2,0,1)

; Création du sol
Ground_Entity = CreateEntity(#PB_Any, MeshID(Ground_Mesh), MaterialID(Material), 0, -2, 0)
CreateEntityBody(Ground_Entity, #PB_Entity_StaticBody, 0, 0, 1)

;
;Lumiere et ombre
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)

;
; Une camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CamX=2.0
CamY=1.0
CamZ=15

; La caméra regarde en direction du point au coordonnées x=0, y=0, z=0
CameraLookAt(camera,0,0,0)


While #True
 
  Event = WindowEvent()
   
  ExamineKeyboard() 
 
  ; Touche Escape pour fermer l'application
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf 
 
  If KeyboardPushed(#PB_Key_Left)
    CamX-0.2 
  ElseIf KeyboardPushed(#PB_Key_Right)
    CamX+0.2
  EndIf
 
  If KeyboardPushed(#PB_Key_Up)
    CamY+0.2 
  ElseIf KeyboardPushed(#PB_Key_Down)
    CamY-0.2
  EndIf
   
  MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute)
 
  ; Affiche le rendu de la scène
  RenderWorld()
  FlipBuffers()
Wend

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Dernière édition par falsam le Dim 04/Jan/2015 0:36, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Histoire d'un Cube : Saut de puce
MessagePosté: Sam 29/Juin/2013 16:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Nous allons mettre en oeuvre la fonction ApplyEntityImpulse(). Cette fonction permet d'ajouter une valeur de la force d'impulsion en x, y et z.

la touche Espace permet de faire sauter le cube. Attention au doigt trop lourd.

Code:
;Naissance d'un cube : Saut de puce

; Coordonnées x,y,z de la caméra
Define.f CamX, CamY, CamZ

InitEngine3D()
InitKeyboard()
InitSprite()

window = OpenWindow(#PB_Any,0,0,1024,768,"Histoire d'un cube")
OpenWindowedScreen(WindowID(window),0,0,1024,768)

;
; Naissance d'un cube

; Une forme : C'est notre MESH qui ici sera un cube
Cube_Mesh = CreateCube(#PB_Any, 1)
Ground_Mesh = CreatePlane(#PB_Any, 10, 10, 3, 3, 3, 3)

; Une texture (Cette texture peut être loader avec l'instruction LoadTexture()
; Cette texture servira pour notre cube et le sol
Texture = CreateTexture(#PB_Any,512,512)
StartDrawing(TextureOutput(Texture))
Box(0,0,512,512,RGB(0, 0, 0))
Box(1,1,510,510,RGB(255, 216, 0))
StopDrawing()

; Un MATERIEL c'est la partie visible de notre cube qui sera constitué de notre texture
Material = CreateMaterial(#PB_Any,TextureID(texture))

; Création d'un cube
; CreateEntity() permet de définir les coordonnées x,y,z lors de la création d'une entité
Cube_Entity = CreateEntity(#PB_Any, MeshID(Cube_Mesh), MaterialID(Material), -3.5, 0, 0)
CreateEntityBody(Cube_Entity, #PB_Entity_BoxBody,2,0,1)

; Création du sol
Ground_Entity = CreateEntity(#PB_Any, MeshID(Ground_Mesh), MaterialID(Material), 0, -1, 0)
CreateEntityBody(Ground_Entity, #PB_Entity_StaticBody, 0, 0, 1)

;
;Lumiere et ombre
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)

;
; Une camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CamX=2.0
CamY=1.0
CamZ=15

; La caméra regarde en direction du point au coordonnées x=0, y=0, z=0
CameraLookAt(camera,0,0,0)

While #True
 
  Event = WindowEvent()
   
  ExamineKeyboard() 
 
  ; Touche Escape pour fermer l'application
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf 
 
  If KeyboardPushed(#PB_Key_Left)
    CamX-0.2 
  ElseIf KeyboardPushed(#PB_Key_Right)
    CamX+0.2
  EndIf
 
  If KeyboardPushed(#PB_Key_Up)
    CamY+0.2 
  ElseIf KeyboardPushed(#PB_Key_Down)
    CamY-0.2
  EndIf
 
  ;Saut de puce
  If KeyboardReleased(#PB_Key_Space)
    ApplyEntityImpulse(Cube_Entity, 5, 5, 0)
  EndIf   
 
  MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute)
 
  ; Affiche le rendu de la scène
  RenderWorld()
  FlipBuffers()
Wend

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Dernière édition par falsam le Dim 04/Jan/2015 0:37, édité 3 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Histoire d'un Cube (Initiation à la 3D)
MessagePosté: Sam 29/Juin/2013 22:04 
Hors ligne

Inscription: Mer 21/Jan/2004 18:24
Messages: 1528
cool un tuto , mééééé

pourquoi spécialement avec la dernière version ? pourquoi pas avec la 5.11

à quoi sert le Parse3DScripts() ?

et je vois que tu affectes Cube_Mesh = CreateCube(#PB_Any, 1)

mais après au niveau de la duplication je ne vois pas bien comment affecté les mesh ?
For X = 0 To 9
CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material), X*2, 0, 0) -> vu que tu utilises un #pb_any, ou fourre tu ton n° de mesh ?
Next

merci pour le nuuul en 3d que je suis

Patrick


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Histoire d'un Cube (Initiation à la 3D)
MessagePosté: Sam 29/Juin/2013 22:48 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Patrick88 a écrit:
pourquoi spécialement avec la dernière version ? pourquoi pas avec la 5.11
Oui pourquoi pas :oops:
Patrick88 a écrit:
à quoi sert le Parse3DScripts() ?
L'instruction Parse3DScripts() lit tous les fichiers scripts avec l'extension ".materials" trouvés dans les chemins définis avec Add3DArchive(). Par habitude j'ai laissé cette instruction qui dans les exemples ci-dessus ne sert à rien.
Patrick88 a écrit:
au niveau de la duplication je ne vois pas bien comment affecté les mesh ?
For X = 0 To 9
CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material), X*2, 0, 0) -> vu que tu utilises un #pb_any, ou fourre tu ton n° de mesh ?
Next
Tu confonds l'identifiant d'une entité avec avec l'identifiant d'un mesh. D'ailleurs l'identifiant du mesh est bien indiqué dans l'extrait de code que tu donnes.

Une ENTITE est composée d'un MESH et d'un MATERIEL.
■ Le MESH va donner une forme non texturé.
■ Le MATERIAL est la matière qui entoure le mesh. Il est composé d'une texture et peut recevoir d'autres propriétés dont on parlera plus tard.

Exemple de création d'un cube SANS MATERIEL (Que c'est moche !)
Code:
Define.f CamX, CamY, CamZ

InitEngine3D()
InitKeyboard()
InitSprite()

window = OpenWindow(#PB_Any,0,0,1024,768,"Histoire d'un cube")
OpenWindowedScreen(WindowID(window),0,0,1024,768)

; Une forme : C'est notre MESH qui ici sera un cube
Mesh = CreateCube(#PB_Any, 1)

; Création de notre entité
Entity = CreateEntity(#PB_Any, MeshID(Mesh), #PB_Material_None )

; Une camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CamX=2.0
CamY=1.0
CamZ=15

; La caméra regarde en dirextion d'un point au coordonnées x=0, y=0, z=0
CameraLookAt(camera,0,0,0)

While #True
 
  Event = WindowEvent()
   
  ExamineKeyboard() 
 
  ; Touche Escape pour fermer l'application
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf 

  MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute)
 
  ; Affiche le rendu de la scène
  ClearScreen(RGB(0, 0, 0))
  RenderWorld()
  FlipBuffers()
Wend


Revenons à la fin de ta question
Patrick88 a écrit:
au niveau de la duplication je ne vois pas bien comment affecté les mesh ?
Le code dont tu fais référence duplique des cubes qui n'ont pas d'interaction. je n'avais donc pas besoin de connaitre leurs numéros d'ENTITES.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Histoire d'un Cube (Initiation à la 3D)
MessagePosté: Mar 02/Juil/2013 11:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4067
Encore merci pour ce toturial, j'ai pigé comment on fait un cube, comment on fait un sol et comment on cree une gravité.
Voici un code basé sur l'un des tiens :

Code:
;Naissance de 100 cubes : Premieres chutes

; Coordonnées x,y,z de la caméra
Define.f CamX, CamY, CamZ

InitEngine3D()
Parse3DScripts()
InitKeyboard()
InitSprite()

window = OpenWindow(#PB_Any,0,0,1024,768,"Histoire d'un cube")
OpenWindowedScreen(WindowID(window),0,0,1024,768)

;
; Naissance d'un cube

; Une forme : C'est notre MESH qui ici sera un cube
Cube_Mesh = CreateCube(#PB_Any, 1)
Ground_Mesh = CreatePlane(#PB_Any, 10, 10, 3, 3, 10,10)

; Une texture (Cette texture peut être loader avec l'instruction LoadTexture()
; Cette texture servira pour notre cube et le sol
Texture = CreateTexture(#PB_Any,512,512)
StartDrawing(TextureOutput(Texture))
Box(0,0,512,512,RGB(0, 0, 0))
Box(1,1,510,510,RGB(255, 216, 0))
For i=1 To 2000
  Box(Random(510),Random(510),Random(10),Random(10),Random(256*256*256))
Next
StopDrawing()

Texture2 = CreateTexture(#PB_Any,512,512)
StartDrawing(TextureOutput(Texture2))
Box(0,0,512,512,RGB(0, 0, 0))
Box(1,1,510,510,RGB(0, 0, 255))
For i=1 To 10000
  Box(Random(510),Random(510),Random(10),Random(10),Random(256*256*256))
Next
StopDrawing()


; Un MATERIEL c'est la partie visible de notre cube qui sera constitué de notre texture
Material = CreateMaterial(#PB_Any,TextureID(texture))
Material2= CreateMaterial(#PB_Any,TextureID(texture2))

; Création d'un cube en hauteur
; CreateEntity() permet de définir les coordonnées x,y,z lors de la création d'une entité
For i=1 To 100
  Cube_Entity = CreateEntity(#PB_Any, MeshID(Cube_Mesh), MaterialID(Material), Random(12)-6, Random(40)+10,Random(12)-6)
  CreateEntityBody(Cube_Entity, #PB_Entity_BoxBody,2,0,1)
Next

; Création du sol
Ground_Entity = CreateEntity(#PB_Any, MeshID(Ground_Mesh), MaterialID(Material2), 0, -2, 0)
CreateEntityBody(Ground_Entity, #PB_Entity_StaticBody, 0, 0, 1)

;
;Lumiere et ombre
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)

;
; Une camera
Camera = CreateCamera(#PB_Any,0,0,100,100)
CamX=2.0
CamY=1.0
CamZ=15

; La caméra regarde en direction du point au coordonnées x=0, y=0, z=0
CameraLookAt(camera,0,0,0)
    CamX-2 
MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute)


While #True
 
  Event = WindowEvent()
   
  ExamineKeyboard() 
 
  ; Touche Escape pour fermer l'application
  If Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
    Break
  EndIf 
 
  If KeyboardPushed(#PB_Key_Left)
    CamX-0.2 
  ElseIf KeyboardPushed(#PB_Key_Right)
    CamX+0.2
  EndIf
 
  If KeyboardPushed(#PB_Key_Up)
    CamY+0.2 
  ElseIf KeyboardPushed(#PB_Key_Down)
    CamY-0.2
  EndIf
   
  MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute)
 
  ; Affiche le rendu de la scène
  ClearScreen(RGB(0, 0, 0))
  RenderWorld()
  FlipBuffers()
  Wend

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Histoire d'un Cube (Initiation à la 3D)
MessagePosté: Mar 02/Juil/2013 12:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Pas mal SPH. Et si tu jouais aussi avec la gravité ?

Juste apres OpenWindowedScreen(WindowID(window),0,0,1024,768) tu ajoutes.
Code:
; Un peu de gravité
EnableWorldPhysics(#True) ;je pense que cette fonction est inutile
WorldGravity(-5) ;Par defaut la gravité est fixé à -9.806
Avant MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute) tu inséres
Code:
; La gravité s'inverse
  If KeyboardPushed(#PB_Key_Space)
    WorldGravity(5)
  EndIf
Attends que suffisamment de cubes tombent sur la platform et presse la touche Espace. Les cubes fixes resteront sur place.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Histoire d'un Cube (Initiation à la 3D)
MessagePosté: Mar 02/Juil/2013 12:56 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4067
falsam a écrit:
Pas mal SPH. Et si tu jouais aussi avec la gravité ?

Juste apres OpenWindowedScreen(WindowID(window),0,0,1024,768) tu ajoutes.
Code:
; Un peu de gravité
EnableWorldPhysics(#True) ;je pense que cette fonction est inutile
WorldGravity(-5) ;Par defaut la gravité est fixé à -9.806
Avant MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute) tu inséres
Code:
; La gravité s'inverse
  If KeyboardPushed(#PB_Key_Space)
    WorldGravity(5)
  EndIf
Attends que suffisamment de cubes tombent sur la platform et presse la touche Espace. Les cubes fixes resteront sur place.

Ca y est, j'ai fait mumuse.
Bon, maintenant, je vais matter les exemples de Dobro pour apprendre les mesh complexes. :wink:

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Histoire d'un Cube (Initiation à la 3D)
MessagePosté: Mar 02/Juil/2013 13:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4067
Ha oui, j'oubliais : il serait bon de faire un code qui fasse tourner un cube et pas la camera

ps : ce post devrait etre epinglé

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 67 messages ]  Aller à la page 1, 2, 3, 4, 5  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye