Code archives/3D Graphics - Misc/3D Entity Pick

This code has been declared by its author to be Public Domain code.

Download source code

3D Entity Pick by bradford62001
mouse buttons move forward and reverse

move mouse to edges of screen to rotate camera
; 3d pick
grid=4 ; change to suit the speed of your machine
Graphics3D 640,480,16,2
AppTitle "entity picker 3D"
light=CreateLight()
cam=CreateCamera()

Type box
Field xpos#,ypos#,zpos#
Field spinspeed#
Field entity
Field alpha#,r,g,b
End Type


box3d=CreateCube()
EntityPickMode box3d,3 ; IMPORTANT- make sure the entity is "pickable"
; this creates a cube full of cubes. if grid=4 then 4x4x4 = 64 cubes or (8x8x8 = 512 cubes) try different values
For x= 1 To grid 
For y = 1 To grid
For z = 1 To grid
b.box=New box ; adds a new box type to the pointer b (or something like that, I'm still learning this stuff)
b\entity = CopyEntity(box3d)
b\xpos#=x*4
b\ypos#=y*4
b\zpos#=z*4

rc=Rnd(10,200)
gc=Rnd(10,205)
bc=Rnd(10,205)
EntityColor b\entity,rc,gc,bc
EntityAlpha b\entity,.9
PositionEntity b\entity,b\xpos#,b\ypos#,b\zpos#
Next
Next
Next


MoveEntity cam,10,10,-4

HideEntity box3d 




Repeat
; camera code

If MouseX()<80 Then camturnx#=camturnx#-.01 ; TurnEntity cam,0,1,0
If MouseY()<80 Then camturny#=camturny#+.01
If MouseX()>580 Then camturnx#=camturnx#+.01
If MouseY()>400 Then camturny#=camturny#-.01
camturnx#=camturnx#*.98 ; fricion to slow the turning camera down to a stop
camturny#=camturny#*.98
TurnEntity cam,camturny#,camturnx#,0



If MouseDown(1) Then camspeed#=camspeed#+.001
If MouseDown(2) Then camspeed#=camspeed#-.001
camspeed#=camspeed#*.98 ; friction to slow the movement of the cam
MoveEntity cam,0,0,camspeed#

; run the pick test
pictentity=CameraPick ( cam,MouseX(),MouseY()) 
For b.box=Each box ; cycle thru all TYPES
If PickedEntity()=b\entity Then b\spinspeed#=b\spinspeed#+.2
b\spinspeed#=b\spinspeed#*.99
TurnEntity b\entity,0,b\spinspeed#,0 ; update all entities
Next 





UpdateWorld
RenderWorld
Text 0,0,("written by Bill Radford")
Flip

Until KeyHit(1)=1



Comments

None.

Code Archives Forum