Matrix and wave
Posted: Sat Sep 13, 2003 7:24 pm
I dont know how texture and color mesh work
Where can i find snippet or tutorial ?
Where can i find snippet or tutorial ?
Code: Select all
;-Initialisation
If InitEngine3D()=0
MessageRequester("Erreur", "Impossible d'initialiser la 3D", 0)
End
EndIf
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0)
End
EndIf
If OpenScreen(800,600,16,"Vagues") = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran ", 0)
End
EndIf
;-Variables Globales
Global AngleVague.f,vitesse.f,decaleX.f,decaleZ.f,hauteur.f
AngleVague = Random(360)
vitesse = 2.0
decaleX = 21.0
decaleZ = 15.0
hauteur = 2.0
Declare Matrice(NbpointsX.w,NbpointsZ.w)
;-Constantes
#Pi = 3.14159265
#NbX=30
#NbZ=30
#PointID = 0
#TriangleID = 1
#TextureID = 2
;-Mémoires Mesh
AllocateMemory(#PointID,12*961,0)
AllocateMemory(#TriangleID,12*1800,0)
AllocateMemory(#TextureID,4*2,0)
Matrice(#NbX,#NbZ)
;-Mesh
CreateMesh(0)
SetMeshData(0, 0, UseMemory(#PointID) , 961)
SetMeshData(0, 1, UseMemory(#TriangleID) , 1800)
SetMeshData(0, 2, UseMemory(#TextureID), 1) ; là je ne sais pas encore comment faire
;-Texture
CreateTexture(0,256,256)
StartDrawing(TextureOutput(0))
Box(0,0,256,256,RGB(190,190,255))
StopDrawing()
;-Entity
CreateEntity(0, MeshID(0), CreateMaterial(0, TextureID(0)))
ScaleEntity(0, 10, 10, 10)
;-Camera
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,150,180,520)
CameraLookAt(0,150,0,0)
CameraRenderMode(0, #PB_Camera_Wireframe)
;-Procédures
Procedure Matrice(FX.w,FZ.w)
adresse=UseMemory(#PointID)
For b=0 To FZ
For a=0 To FX
PokeF(adresse, a) : PokeF(adresse + 4, 0) : PokeF(adresse + 8, b)
adresse + 12
Next a
Next b
adresse=UseMemory(#TriangleID)
For b=0 To FZ - 1
For a=0 To FX - 1
Nb = FX + 1
hg=a + (b * Nb)
hd=a + 1 + (b * Nb)
bg=a + ((b + 1) * Nb)
bd=a + 1 + ((b + 1) * Nb)
PokeW(adresse , hg) : PokeW(adresse + 2, hd) : PokeW(adresse + 4, bg)
PokeW(adresse + 6, hd) : PokeW(adresse + 8, bg) : PokeW(adresse + 10, bd)
adresse + 12
Next a
Next b
PokeF(UseMemory(#TextureID) , 1) : PokeF(UseMemory(#TextureID) + 4, 1)
EndProcedure
Procedure.w wrapvalue(angle.l)
While angle-360>=0
angle-360
Wend
ProcedureReturn angle
EndProcedure
Procedure.f Sind(angle.l)
a.f=angle/180.0 * #Pi
ProcedureReturn Sin(a)
EndProcedure
Procedure.f Cosd(angle.l)
a.f=angle/180.0 * #Pi
ProcedureReturn Cos(a)
EndProcedure
Procedure vagues()
; adaptation d'un code darkbasic en purebasic
adresse = UseMemory(#PointID) + 4
For z = 0 To #NbZ
For x = 0 To #NbX
Sommet.f = Sind(AngleVague + (x * decaleX) + (z * decaleZ)) * hauteur
PokeF(adresse, Sommet)
adresse + 12
Next x
Next z
SetMeshData(0, 0, UseMemory(#PointID) , 961)
EndProcedure
Procedure AffAide()
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(255,255,255)
Locate(0,0)
DrawText("[F1] / [F2] / [F3] => Change Mode affichage")
Locate(0,20)
DrawText("[PageUp] / [PageDown] => Hauteur : " + Str(hauteur))
Locate(0,40)
DrawText("[Flèche Haut] / [Flèche bas] => DecaleZ : " + Str(decaleZ))
Locate(0,60)
DrawText("[Flèche Gauche] / [Flèche droite] => DecaleX : " + Str(decaleX))
StopDrawing()
EndProcedure
;-Boucle principale
Repeat
ClearScreen(0, 0, 0)
ExamineKeyboard()
AffAide()
If KeyboardReleased(#PB_Key_F1) : CameraRenderMode(0, #PB_Camera_Plot) : EndIf
If KeyboardReleased(#PB_Key_F2) : CameraRenderMode(0, #PB_Camera_Wireframe) : EndIf
If KeyboardReleased(#PB_Key_F3) : CameraRenderMode(0, #PB_Camera_Textured) : EndIf
If KeyboardReleased(#PB_Key_PageUp) : hauteur + 0.5 : EndIf
If KeyboardReleased(#PB_Key_PageDown) : hauteur - 0.5 : EndIf
If KeyboardReleased(#PB_Key_Up) : decaleZ + 1 : EndIf
If KeyboardReleased(#PB_Key_Down) : decaleZ - 1 : EndIf
If KeyboardReleased(#PB_Key_Left) : decaleX - 1 : EndIf
If KeyboardReleased(#PB_Key_Right) : decaleX + 1 : EndIf
AngleVague = wrapvalue(AngleVague + vitesse)
vagues()
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End