Mesh : CreatePyramid()

Généralités sur la programmation 3D
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Mesh : CreatePyramid()

Message par falsam »

Syntaxe
  • Resultat = CreatePyramid(#Mesh, Width.f, Height.f, [SizeTop.f=0])
Description
  • Crée un mesh pyramide.
Arguments
  • #Mesh Le numéro d'identification du nouveau mesh. #PB_Any peut être utilisé pour générer automatiquement ce numéro.
  • Width.f Largeur de la pyramide.
  • Height.f Hauteur de la pyramide.
  • SizeTop.f Largeur de la pyramide au sommet. (0 par défaut)
Valeur de retour
  • Renvoie une valeur non nulle en cas de succès, zéro sinon.
  • Si #PB_Any a été utilisé pour le paramètre #Mesh alors la valeur de retour est le numéro d'identification, généré automatiquement.
Exemple.

Code : Tout sélectionner

Global MouseX.f, MouseY.f

Declare CreatePyramid(Mesh, Width.f, Height.f, SizeTop.f=0)

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

OpenWindow(0, 0, 0, 1024, 768, "Create Pyramide", #PB_Window_Maximize | #PB_Window_BorderLess)
OpenWindowedScreen(WindowID(0),0, 0, WindowWidth(0) , WindowHeight(0))

Add3DArchive(#PB_Compiler_Home + "Examples\3D\Data\Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Packs/waterworld.zip", #PB_3DArchive_Zip)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Packs/desert.zip", #PB_3DArchive_Zip)

SkyBox("desert07.jpg")

;Caméra, Lumiere & Ombre
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 1.5, 4)
CameraLookAt(0, 0, 0, 0)

CreateLight(#PB_Any, RGB(151, 251, 151), -200, 100, -500)
WorldShadows(#PB_Shadow_Additive)

CreateMaterial(0, TextureID(LoadTexture(-1, "Dirt.jpg")))
CreateMaterial(1, TextureID(LoadTexture(-1, "Floor02.jpg")))

CreatePlane(0, 5, 5, 1, 1, 5, 5)
CreateEntity(0, MeshID(0), MaterialID(0), 0, 0, 0)

;Deux pyramides
CreatePyramid(0, 1, 1, 0.5)
CreateEntity(1, MeshID(0), MaterialID(1), 1, 0.5, 1)

CreatePyramid(0, 1, 1, 0)
CreateEntity(2, MeshID(0), MaterialID(1), -1, 0.5, 1)

While #True  
  Repeat
    Event  = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until Event = 0    
  
  If ExamineKeyboard()  
    If KeyboardReleased(#PB_Key_Escape)
      Break
    EndIf    
  EndIf
  
  If ExamineMouse()
    MouseX = -MouseDeltaX() *  0.05
    MouseY = -MouseDeltaY() *  0.05  
  EndIf
  
  RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
  
  RenderWorld()
  FlipBuffers()
Wend

Procedure CreatePyramid(Mesh, Width.f, Height.f, SizeTop.f=0)
  Protected Dim MeshData.PB_MeshVertex(0)
  Protected Result = CreateCube(Mesh, Width)
  
  If Mesh = #PB_Any
    Mesh = Result
  EndIf
  
  GetMeshData(Mesh, 0, MeshData(), #PB_Mesh_Vertex | #PB_Mesh_UVCoordinate, 0, MeshVertexCount(Mesh)-1)
  
  ;(3, 10, 16)
  MeshData(3)\x   = -SizeTop/2
  MeshData(10)\x  = -SizeTop/2
  MeshData(16)\x  = -SizeTop/2
  MeshData(3)\z   = SizeTop/2
  MeshData(10)\z  = SizeTop/2
  MeshData(16)\z  = SizeTop/2
  MeshData(3)\y   = Height/2
  MeshData(10)\y  = Height/2
  MeshData(16)\y  = Height/2
  
  ;(6, 11, 19)
  MeshData(6)\x   = -SizeTop/2
  MeshData(11)\x  = -SizeTop/2
  MeshData(19)\x  = -SizeTop/2
  MeshData(6)\z   = -SizeTop/2
  MeshData(11)\z  = -SizeTop/2
  MeshData(19)\z  = -SizeTop/2
  MeshData(6)\y   = Height/2
  MeshData(11)\y  = Height/2
  MeshData(19)\y  = Height/2
  
  ;(7, 14, 18)
  MeshData(7)\x   = SizeTop/2
  MeshData(14)\x  = SizeTop/2
  MeshData(18)\x  = SizeTop/2
  MeshData(7)\z   = -SizeTop/2
  MeshData(14)\z  = -SizeTop/2
  MeshData(18)\z  = -SizeTop/2
  MeshData(7)\y   = Height/2
  MeshData(14)\y  = Height/2
  MeshData(18)\y  = Height/2
  
  ;(2, 15, 17)
  MeshData(2)\x   = SizeTop/2
  MeshData(15)\x  = SizeTop/2
  MeshData(17)\x  = SizeTop/2  
  MeshData(2)\z   = SizeTop/2
  MeshData(15)\z  = SizeTop/2
  MeshData(17)\z  = SizeTop/2
  MeshData(2)\y   = Height/2
  MeshData(15)\y  = Height/2
  MeshData(17)\y  = Height/2
  
  ;(0, 9, 23)
  MeshData(0)\y   = -Height/2
  MeshData(9)\y   = -Height/2
  MeshData(23)\y  = -Height/2
  
  ;(5, 8, 20)
  MeshData(5)\y   = -Height/2
  MeshData(8)\y   = -Height/2
  MeshData(20)\y  = -Height/2
  
  ;(4, 13, 21)
  MeshData(4)\y   = -Height/2
  MeshData(13)\y  = -Height/2
  MeshData(21)\y  = -Height/2
  
  ;(1, 12, 22)
  MeshData(1)\y   = -Height/2
  MeshData(12)\y  = -Height/2
  MeshData(22)\y  = -Height/2
  
  SetMeshData(Mesh, 0, MeshData(), #PB_Mesh_Vertex | #PB_Mesh_UVCoordinate, 0, MeshVertexCount(Mesh)-1)
  
  ProcedureReturn Result
EndProcedure
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%