Histoire d'un Cube (Notions de base à la 3D)
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Histoire d'un Cube (Notions de base à la 3D)
Pure Basic 5.20 LTS - Mise à jour du 21 Juillet 2015
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
■ 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
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
■ 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
Dernière modification par falsam le lun. 05/oct./2015 23:25, modifié 60 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Histoire d'un Cube : Le néant
Le néant. Touche Escape pour quitter le programme.
Vous ne voyez rien ? c'est normal : Votre scène (Votre monde) est complètement vide !
Code : Tout sélectionner
;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
Dernière modification par falsam le dim. 04/janv./2015 0:30, modifié 6 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Histoire d'un Cube - Les 3 dimensions
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
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
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 : Tout sélectionner
;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
Un lien explicatif sur les repères dans l'espace
http://www.purebasic.com/french/documen ... index.html
Dernière modification par falsam le dim. 04/janv./2015 0:32, modifié 8 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Histoire d'un Cube : Naissance du cube
Naissance du cube
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)
Code : Tout sélectionner
;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
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)
Dernière modification par falsam le mar. 17/sept./2013 14:04, modifié 2 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Histoire d'un Cube : Un peu de lumière
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.
Juste aprés la ligne de code Entity = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(Material)) ajouter le code ci-dessous.
Code : Tout sélectionner
;La lumiere
AmbientColor(RGB(151, 251, 151))
CreateLight(#PB_Any,RGB(151, 251, 151), -0.5, 3, 5)
Dernière modification par falsam le sam. 29/juin/2013 15:23, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Histoire d'un Cube : Le Clonage
Le Clonage : Comment dupliquer un cube
A partir d'un seul mesh et d'un seul materiel, nous allons créer 10 entités.
A partir d'un seul mesh et d'un seul materiel, nous allons créer 10 entités.
Code : Tout sélectionner
;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
Dernière modification par falsam le dim. 04/janv./2015 0:34, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Histoire d'un Cube
Merci pour ce tuto 3D. Je vais enfin pouvoir apprendre
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Histoire d'un Cube : Première chute
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)
L'instruction WorldShadows() permet d'ajouter de l'ombre. (Of course)
Code : Tout sélectionner
;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
Dernière modification par falsam le dim. 04/janv./2015 0:36, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Histoire d'un Cube : Saut de puce
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.
la touche Espace permet de faire sauter le cube. Attention au doigt trop lourd.
Code : Tout sélectionner
;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
Dernière modification par falsam le dim. 04/janv./2015 0:37, modifié 3 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Histoire d'un Cube (Initiation à la 3D)
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
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
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Histoire d'un Cube (Initiation à la 3D)
Oui pourquoi pasPatrick88 a écrit :pourquoi spécialement avec la dernière version ? pourquoi pas avec la 5.11
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 : à quoi sert le Parse3DScripts() ?
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.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
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 : Tout sélectionner
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
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.Patrick88 a écrit : au niveau de la duplication je ne vois pas bien comment affecté les mesh ?
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Histoire d'un Cube (Initiation à la 3D)
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 :
Voici un code basé sur l'un des tiens :
Code : Tout sélectionner
;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 ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Histoire d'un Cube (Initiation à la 3D)
Pas mal SPH. Et si tu jouais aussi avec la gravité ?
Juste apres OpenWindowedScreen(WindowID(window),0,0,1024,768) tu ajoutes.Avant MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute) tu inséresAttends que suffisamment de cubes tombent sur la platform et presse la touche Espace. Les cubes fixes resteront sur place.
Juste apres OpenWindowedScreen(WindowID(window),0,0,1024,768) tu ajoutes.
Code : Tout sélectionner
; Un peu de gravité
EnableWorldPhysics(#True) ;je pense que cette fonction est inutile
WorldGravity(-5) ;Par defaut la gravité est fixé à -9.806
Code : Tout sélectionner
; La gravité s'inverse
If KeyboardPushed(#PB_Key_Space)
WorldGravity(5)
EndIf
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Histoire d'un Cube (Initiation à la 3D)
Ca y est, j'ai fait mumuse.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.Avant MoveCamera(camera, CamX, CamY, CamZ, #PB_Absolute) tu inséresCode : Tout sélectionner
; Un peu de gravité EnableWorldPhysics(#True) ;je pense que cette fonction est inutile WorldGravity(-5) ;Par defaut la gravité est fixé à -9.806
Attends que suffisamment de cubes tombent sur la platform et presse la touche Espace. Les cubes fixes resteront sur place.Code : Tout sélectionner
; La gravité s'inverse If KeyboardPushed(#PB_Key_Space) WorldGravity(5) EndIf
Bon, maintenant, je vais matter les exemples de Dobro pour apprendre les mesh complexes.
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Re: Histoire d'un Cube (Initiation à la 3D)
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é
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 ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits