Source     Discussion     Modifier     Historique     Forums     Salon IRC

Source:Escaliers3D.pb

Un article de Games Creators Network.

Texture utilisée
Texture utilisée
Capture d'écran
Capture d'écran
;Comtois
;Escalier 3D en colimaçon
;PB 3.93 le 13/03/05
 
;- Déclaration des procédures
Declare Erreur(Message$)
Declare.f Sind(Angle.f)
Declare.f Cosd(Angle.f)
Declare.f WrapValue(Angle.f)
 
; -Initialisation
#ScreenWidth = 1024 : #ScreenHeight = 768 : #ScreenDepth = 32
 
If InitEngine3D() = 0
  Erreur("Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll")
ElseIf InitSprite() = 0 Or InitKeyboard() = 0
  Erreur("Impossible d'initialiser DirectX 7 Ou plus")
ElseIf OpenScreen( #ScreenWidth , #ScreenHeight , #ScreenDepth , "Démo" ) = 0
  Erreur("Impossible d'ouvrir l'écran ")
EndIf
 
;-Mesh
CreateMesh(0) ;Cube
SetMeshData(0, #PB_Mesh_Vertices , ?CubePoints , 16)
SetMeshData(0, #PB_Mesh_Triangles , ?CubeTriangles, 12)
SetMeshData(0, #PB_Mesh_UVCoordinates , ?CubeTextures , 16)
SetMeshData(0, #PB_Mesh_Normals , ?CubeNormales , 16)
 
;-light
CreateLight(0,RGB(255,255,255)  )
 
;- Material
CreateMaterial(0 ,LoadTexture(0,"Bois1.png"))
MaterialShadingMode(0, #PB_Material_Phong)
 
;-Entity
;Fabrique l'escalier
Angle.f = 0
NombreMarche = 35
Distance = 70
HauteurMarche = 15
LargeurMarche = 100
ProfondeurMarche = 66
;Les marches
For Marche = 0 To NombreMarche - 1
CreateEntity(Marche, MeshID(0), MaterialID(0))
  ResizeEntity (Marche, LargeurMarche, HauteurMarche, ProfondeurMarche)
  EntityLocate(Marche, Cosd(Angle) * Distance, HauteurMarche / 2 + HauteurMarche * Marche, -Sind(Angle) * Distance)
  RotateEntity(Marche, Angle, 0, 0)
  Angle = WrapValue(Angle + 30)
Next Marche
 
;La colonne centrale
HauteurColonne.f = NombreMarche * HauteurMarche
Colonne = Marche + 1
CreateEntity(Colonne, MeshID(0) , MaterialID(0) )
ResizeEntity(Colonne, 4 + Distance / 2 , HauteurColonne, 4 + Distance / 2 )
EntityLocate(Colonne, 0, HauteurColonne / 2, 0 )
 
;- Camera
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,20)
AmbientColor(RGB(85,85,85))
 
;- Boucle principale
HauteurCamera = NombreMarche * 5
DistanceCamera = 450
Pas.f = 0.6
 
Repeat
 
  ClearScreen(0, 0, 0)
  CameraLocate(0, Cosd(Angle) * DistanceCamera , HauteurCamera, -Sind(Angle) * DistanceCamera)
  LightLocate (0, Cosd(Angle) * DistanceCamera / 2, HauteurCamera, -Sind(Angle) * DistanceCamera / 2)
  CameraLookAt(0, 0, HauteurCamera, 0)
 
  Angle = WrapValue(Angle + Pas / 2)
  If HauteurCamera < 0 Or HauteurCamera > NombreMarche * HauteurMarche : Pas * -1 : EndIf
 
  HauteurCamera + Pas
 
  RenderWorld()
  FlipBuffers()
  ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape)  
 
End
 
;- Procédures
 
Procedure Erreur(Message$)
  MessageRequester("Erreur", Message$, 0)
  End
EndProcedure
 
Procedure.f WrapValue(Angle.f) 
  Angle/360 
  Angle-Int(Angle) 
  If Angle<0 
    ProcedureReturn (Angle+1)*360 
  Else 
    ProcedureReturn Angle*360 
  EndIf 
EndProcedure 
 
Procedure.f Cosd( Angle.f )
  ;calcule le cos d'un angle en degré
  ProcedureReturn Cos( Angle * 0.0174533 )
EndProcedure
 
Procedure.f Sind( Angle.f )
  ;calcule le sin d'un angle en degré
  ProcedureReturn Sin( Angle * 0.0174533 )
EndProcedure
 
;-Datas du Cube
 
DataSection
 
CubePoints:
Data.f -0.5,-0.5,-0.5
Data.f -0.5,-0.5,0.5
Data.f 0.5,-0.5,0.5
Data.f 0.5,-0.5,-0.5
 
Data.f -0.5,0.5,-0.5
Data.f -0.5,0.5,0.5
Data.f 0.5,0.5,0.5
Data.f 0.5,0.5,-0.5
 
Data.f -0.5,-0.5,-0.5
Data.f -0.5,-0.5,0.5
Data.f 0.5,-0.5,0.5
Data.f 0.5,-0.5,-0.5
 
Data.f -0.5,0.5,-0.5
Data.f -0.5,0.5,0.5
Data.f 0.5,0.5,0.5
Data.f 0.5,0.5,-0.5
 
CubeNormales:
Data.f -5,0,-5
Data.f -5,0,5
Data.f 5,0,5
Data.f 5,0,-5
Data.f -5,0,-5
Data.f -5,0,5
Data.f 5,0,5
Data.f 5,0,-5
 
Data.f 0,-10,0
Data.f 0,-10,0
Data.f 0,-10,0
Data.f 0,-10,0
Data.f 0,10,0
Data.f 0,10,0
Data.f 0,10,0
Data.f 0,10,0
 
CubeTriangles:
Data.w 0,4,7
Data.w 0,7,3
Data.w 1,5,4
Data.w 1,4,0
Data.w 2,6,5
Data.w 2,5,1
Data.w 3,7,6
Data.w 3,6,2
Data.w 9,8,11
Data.w 9,11,10
Data.w 12,13,14
Data.w 12,14,15
 
CubeTextures:
Data.f 0,1
Data.f 1,1
Data.f 0,1
Data.f 1,1
 
Data.f 0,0
Data.f 1,0
Data.f 0,0
Data.f 1,0
 
Data.f 0,0
Data.f 1,0
Data.f 1,1
Data.f 0,1
 
Data.f 0,0
Data.f 1,0
Data.f 1,1
Data.f 0,1
EndDataSection

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.