
Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - MeshManual
;
; (c) 2012 - Fantaisie Software
;
; ------------------------------------------------------------
Declare DrawMatrix()
#CameraSpeed = 1
#scale = 3
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/fonts", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
;- Material
CreateMaterial(0, LoadTexture(0, "White.jpg"))
DisableMaterialLighting(0, #True)
MaterialCullingMode(0, #PB_Material_NoCulling)
MaterialShadingMode(0, #PB_Material_Wireframe )
;- Mesh Mexican Hat
CreateMesh(0, #PB_Mesh_TriangleList, #PB_Mesh_Static)
DrawMatrix()
FinishMesh(#False)
SetMeshMaterial(0, MaterialID(0))
node = CreateNode(#PB_Any, -5, 0, 0)
AttachNodeObject(node, MeshID(0))
;- Mesh Stars
CreateMesh(1, #PB_Mesh_PointList, #PB_Mesh_Static)
For i = 0 To 10000
MeshVertexPosition(Random(200)-100, Random(200)-100, Random(200)-100)
MeshVertexColor(RGB(255,255,0))
Next i
FinishMesh(#False)
SetMeshMaterial(1, MaterialID(0))
Stars = CreateNode(#PB_Any)
AttachNodeObject(Stars, MeshID(1))
;-Camera
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 10, 5, #PB_Absolute)
CameraFOV(0, 40)
CameraLookAt(0, NodeX(node), NodeY(node), NodeZ(node))
CameraBackColor(0, RGB(0, 0, 40))
;-Light
CreateLight(0, RGB(255,255,255), -10, 60, 10)
AmbientColor(RGB(90, 90, 90))
Repeat
Screen3DEvents()
ExamineKeyboard()
RotateNode(node, 0.3, -0.3, -0.3, #PB_Relative)
RotateNode(Stars, 0.1, 0.1, 0.1, #PB_Relative)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf
End
Procedure DrawMatrix()
Protected.l a, b, Nb
Protected.w P1, P2, P3, P4
Protected.f x, z
NbX=30
NbZ=30
;xMin.f = -1 : yMin.f = -1: zMin.f = -1 : xMax.f = 1: yMax = 1 : zMax = 1
xMin.f = -3 : yMin.f = -3: zMin.f = -3 : xMax.f = 3: yMax = 3 : zMax = 3
;xMin.f = -10 : zMin.f = -10 : xMax.f = 10: zMax = 10
range = xMax - xMin
step1.f = range / NbX
x.f = xMin: z.f = zMin : y.f = yMin
For b=0 To NbZ
For a=0 To NbX
;distance.f = Sqr(Pow((0-x),2) + Pow((0-z),2)) ; distance between plotted point and center 0,0
;If distance <= 2.0
;y.f = Sin(10*(x*x+z*z))/10
y.f =(1 - x*x -z*z) * Exp(-1/2 * (x*x + z*z)) ; Mexican Hat
MeshVertexPosition(x, y, z)
If y>=0
MeshVertexColor(RGB(255,100,0))
Else
MeshVertexColor(RGB(230,240,0))
EndIf
;EndIf
x.f + step1
Next a
x = xMin
z.f + step1
Next b
Nb=Nbx+1
For b=0 To NbZ-1
For a=0 To NbX-1
P1=a+(b*Nb)
P2=P1+1
P3=a+(b+1)*Nb
P4=P3+1
MeshFace(P3, P2, P1)
MeshFace(P2, P3, P4)
Next
Next
EndProcedure
the second code is using #PB_Mesh_PointList so we can easily making a round Hat exactly like a UFO

Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - MeshManual
;
; (c) 2012 - Fantaisie Software
;
; ------------------------------------------------------------
Declare DrawMatrix()
#CameraSpeed = 1
#scale = 3
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/fonts", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
;- Material
CreateMaterial(0, LoadTexture(0, "White.jpg"))
DisableMaterialLighting(0, #True)
MaterialCullingMode(0, #PB_Material_NoCulling)
MaterialShadingMode(0, #PB_Material_Wireframe )
;- Mesh Mexican Hat
;CreateMesh(0, #PB_Mesh_TriangleList, #PB_Mesh_Static)
CreateMesh(0, #PB_Mesh_PointList, #PB_Mesh_Static)
DrawMatrix()
FinishMesh(#False)
SetMeshMaterial(0, MaterialID(0))
node = CreateNode(#PB_Any, -5, 0, 0)
AttachNodeObject(node, MeshID(0))
;- Mesh Stars
CreateMesh(1, #PB_Mesh_PointList, #PB_Mesh_Static)
For i = 0 To 10000
MeshVertexPosition(Random(200)-100, Random(200)-100, Random(200)-100)
MeshVertexColor(RGB(255,255,0))
Next i
FinishMesh(#False)
SetMeshMaterial(1, MaterialID(0))
Stars = CreateNode(#PB_Any)
AttachNodeObject(Stars, MeshID(1))
;-Camera
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 7, 4, #PB_Absolute)
CameraFOV(0, 40)
CameraLookAt(0, NodeX(node), NodeY(node), NodeZ(node))
CameraBackColor(0, RGB(0, 0, 40))
;-Light
CreateLight(0, RGB(255,255,255), -10, 60, 10)
AmbientColor(RGB(90, 90, 90))
Repeat
Screen3DEvents()
ExamineKeyboard()
RotateNode(node, 0.3, -0.3, -0.3, #PB_Relative)
RotateNode(Stars, 0.1, 0.1, 0.1, #PB_Relative)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf
End
Procedure DrawMatrix()
Protected.l a, b, Nb
Protected.w P1, P2, P3, P4
Protected.f x, z
NbX=180
NbZ=180
;xMin.f = -1 : yMin.f = -1: zMin.f = -1 : xMax.f = 1: yMax = 1 : zMax = 1
xMin.f = -3 : yMin.f = -3: zMin.f = -3 : xMax.f = 3: yMax = 3 : zMax = 3
;xMin.f = -10 : zMin.f = -10 : xMax.f = 10: zMax = 10
range = xMax - xMin
step1.f = range / NbX
x.f = xMin: z.f = zMin : y.f = yMin
For b=0 To NbZ
For a=0 To NbX
distance.f = Sqr(Pow((0-x),2) + Pow((0-z),2)) ; distance between plotted point and center 0,0
If distance <= 2.0
;y.f = Sin(10*(x*x+z*z))/10
y.f =(1 - x*x -z*z) * Exp(-1/2 * (x*x + z*z)) ; Mexican Hat
MeshVertexPosition(x, y, z)
If y>=0
MeshVertexColor(RGB(255,100,0))
Else
MeshVertexColor(RGB(230,240,0))
EndIf
EndIf
x.f + step1
Next a
x = xMin
z.f + step1
Next b
Nb=Nbx+1
EndProcedure