Unless of course, you use entitylinepick extensively. ;)
Quick terrain manipulation demo I just made. first time using entitypick. :) Mouse1 lowers the terrain. Unlike "terrain", each square is a separate surface which can be textured individually.
Graphics3D 800,600,0,2
camera=CreateCamera()
light=CreateLight(2)
LightConeAngles light,360,360
PositionEntity light,10.5,0,-3
AmbientLight 255,255,255
LightColor light,-10,-10,-10
RotateEntity light,10,0,0
Dim map(20,15,0)
SeedRnd MilliSecs()
For x = 1 To 20
For y = 1 To 15
map(x,y,0)=CreateMesh()
surface=CreateSurface(map(x,y,0))
AddVertex surface,0,0,0,0,0
AddVertex surface,0,0,1,0,1
AddVertex surface,1,0,0,1,0
AddVertex surface,1,0,1,1,1
AddTriangle surface,0,1,2
AddTriangle surface,3,2,1
PositionEntity map(x,y,0),x,0,y
brush=CreateBrush(Rand(255),Rand(255),Rand(255))
PaintEntity map(x,y,0),brush
EntityPickMode map(x,y,0),2
FreeBrush brush
UpdateNormals map(x,y,0)
Next
Next
PositionEntity camera,10.5,10,-3
RotateEntity camera,60,0,0
PointEntity light,map(10,5,0)
UpdateWorld
RenderWorld
While Not KeyHit(1)
RenderWorld
If MouseDown(1) Then
CameraPick camera,MouseX(),MouseY()
If PickedEntity() Then
MoveEntity PickedEntity(),0,-.1,0
LinePick PickedX()-1,1000,PickedZ(),0,-2000,0 ;adjust entity on left side
If PickedEntity() Then
surface=GetSurface(PickedEntity(),1)
vertexdown surface,2
vertexdown surface,3
LinePick PickedX()+1,1000,PickedZ(),0,-2000,0
End If
LinePick PickedX()+1,1000,PickedZ(),0,-2000,0 ;adjust entity on right side
If PickedEntity() Then
surface=GetSurface(PickedEntity(),1)
vertexdown surface,0
vertexdown surface,1
LinePick PickedX()-1,1000,PickedZ(),0,-2000,0
End If
LinePick PickedX(),1000,PickedZ()+1,0,-2000,0 ;adjust entity on upper side
If PickedEntity() Then
surface=GetSurface(PickedEntity(),1)
vertexdown surface,0
vertexdown surface,2
LinePick PickedX(),1000,PickedZ()-1,0,-2000,0
LinePick PickedX()-1,1000,PickedZ()+1,0,-2000,0
If PickedEntity() Then
surface=GetSurface(PickedEntity(),1)
vertexdown surface,2
LinePick PickedX()+1,1000,PickedZ()-1,0,-2000,0
End If
LinePick PickedX()+1,1000,PickedZ()+1,0,-2000,0
If PickedEntity() Then
surface=GetSurface(PickedEntity(),1)
vertexdown surface,0
LinePick PickedX()-1,1000,PickedZ()-1,0,-2000,0
End If
End If
LinePick PickedX(),1000,PickedZ()-1,0,-2000,0 ;adjust entity on lower side
If PickedEntity() Then
surface=GetSurface(PickedEntity(),1)
vertexdown surface,1
vertexdown surface,3
LinePick PickedX(),1000,PickedZ()+1,0,-2000,0
LinePick PickedX()-1,1000,PickedZ()-1,0,-2000,0
If PickedEntity() Then
surface=GetSurface(PickedEntity(),1)
vertexdown surface,3
LinePick PickedX()+1,1000,PickedZ()+1,0,-2000,0
End If
LinePick PickedX()+1,1000,PickedZ()-1,0,-2000,0
If PickedEntity() Then
surface=GetSurface(PickedEntity(),1)
vertexdown surface,1
LinePick PickedX()-1,1000,PickedZ()+1,0,-2000,0
End If
End If
End If
End If
Flip
Wend
End
Function VertexDown(surface,number)
VertexCoords surface,number,VertexX(surface,number),VertexY(surface,number)-.1,VertexZ(surface,number)
End Function
|