July 29, 2021, 17:50:01

### Author Topic: [bb] Simple Bounding Cubes by N [ 1+ years ago ]  (Read 677 times)

#### BlitzBot

• Jr. Member
• Posts: 1
##### [bb] Simple Bounding Cubes by N [ 1+ years ago ]
« on: June 29, 2017, 00:28:42 »
Title : Simple Bounding Cubes
Author : N
Posted : 1+ years ago

Description : Short description is enough

Code :
Code: BlitzBasic
1. ; ID: 1089
2. ; Author: Noel R. Cower
3. ; Date: 2004-06-17 16:06:49
4. ; Title: Simple Bounding Cubes
5. ; Description: 3D and 2D functions for drawing cubes similar to the bounding boxes in 3ds around entities
6.
7. Graphics3D 800,600,32,2
8.
9. C = CreateCamera()
10. M = CreateCube()
11. Box = BoundEntity3D(M)
12. MoveEntity C,-6,5.2,4
13. PointEntity C,M
14.
15. L = CreateLight(2)
16. PositionEntity L,32,32,32
17. LightRange L,24
18. LightColor L,200,200,200
19. CameraClsMode C,0,0
20. AmbientLight 32,32,32
21. Repeat
22.         TurnEntity M,-.5,-.6,-.7
23.         ScaleEntity M,Abs Sin(Float(MilliSecs())/40)*2,Abs Sin(Float(MilliSecs())/80)*2,Abs Cos(Float(MilliSecs())/160)*2
24.         PositionEntity M,Sin(Float(MilliSecs())/40)*3,0,Cos(Float(MilliSecs())/40)*5
25.
26.         If KeyHit(57) Then
27.                 Mode = Not Mode
28.                 If Mode = 0 Then
29.                         ShowEntity Box
30.                 Else
31.                         HideEntity Box
32.                 EndIf
33.         EndIf
34.
35.         If Mode = 0 Then BoundEntity3D M,Box,.2
36.         UpdateWorld
37.         Cls
38.         WireFrame False
39.         AmbientLight 32,32,32
40.         CameraClsMode C,0,1
41.         RenderWorld
42.         CameraClsMode C,0,0
43.         WireFrame True
44.         AmbientLight 255,255,255
45.         HideEntity Box
46.         RenderWorld
47.         If Mode = 0 Then ShowEntity Box
48.         If Mode = 1 Then BoundEntity2D M,C
49.         Flip
50. Until KeyHit(1)
51.
52. Function BoundEntity3D(Entity,Box = 0,Outline#=.15)
53.         If Entity = 0 Then Return False
54.         EClass\$ = EntityClass(Entity)
55.         If Lower(EClass\$) <> "mesh" Then Return False
56.
57.         If Box = 0 Then
58.                 Box = CreateCube()
59.                 EntityFX Box,1+16
60.                 T = CreateTexture(256,256,1+16+32)
61.                 SetBuffer(TextureBuffer(T))
62.                 Color 32,32,32
63.                 Rect 0,0,256,256,1
64.                 Color 0,0,0
65.                 Rect 6,6,256-12,256-12,True
66.
67.                 Color 255,255,255
68.
69.                 Line 0,0,0,32
70.                 Line 0,255-32,0,255
71.
72.                 Line 256,0,256,32
73.                 Line 255,255-32,255,255
74.
75.                 Line 0,0,32,0
76.                 Line 255-32,0,255,0
77.
78.                 Line 0,255,32,255
79.                 Line 255-32,255,255,255
80.
81.                 SetBuffer(BackBuffer())
82.                 EntityTexture Box,T,0,0
83.                 EntityBlend Box,3
84.                 FreeTexture T
85.         EndIf
86.
87.         Local X#,Y#,Z#,BX#,BY#,BZ#
88.         X = -999999
89.         Y = -999999
90.         Z = -999999
91.         BX = 999999
92.         BY = 999999
93.         BZ = 999999
94.
95.         For Surface = 1 To CountSurfaces(Entity)
96.                 S = GetSurface(Entity,Surface)
97.                 For N = 0 To CountVertices(S)-1
98.                         TFormPoint VertexX(S,N),VertexY(S,N),VertexZ(S,N),Entity,0
99.                         If TFormedX() > X Then
100.                                 X = TFormedX()
101.                         ElseIf TFormedX() < BX Then
102.                                 BX = TFormedX()
103.                         EndIf
104.
105.                         If TFormedY() > Y Then
106.                                 Y = TFormedY()
107.                         ElseIf TFormedY() < BY Then
108.                                 BY = TFormedY()
109.                         EndIf
110.
111.                         If TFormedZ() > Z Then
112.                                 Z = TFormedZ()
113.                         ElseIf TFormedZ() < BZ Then
114.                                 BZ = TFormedZ()
115.                         EndIf
116.                 Next
117.         Next
118.
119.         FitMesh Box,X+Outline,Y+Outline,Z+Outline,BX-X-Outline*2,BY-Y-Outline*2,BZ-Z-Outline*2,0
120.         Return Box
121. End Function
122.
123. Function BoundEntity2D(Entity,Camera,Outline=16)
124.         If Entity = 0 Or Camera = 0 Then Return False
125.         EClass\$ = EntityClass(Entity)
126.         If Lower(EClass\$) <> "mesh" Then Return False
127.
128.         Local X,Y,BX,BY
129.         BX = GraphicsWidth()
130.         BY = GraphicsHeight()
131.         For Surface = 1 To CountSurfaces(Entity)
132.                 S = GetSurface(Entity,Surface)
133.                 For N = 0 To CountVertices(S)-1
134.                         TFormPoint VertexX(S,N),VertexY(S,N),VertexZ(S,N),Entity,0
135.
136.                         CameraProject Camera,TFormedX(),TFormedY(),TFormedZ()
137.
138.                         PX = ProjectedX()
139.                         PY = ProjectedY()
140.
141.                         If PX > X X = PX
142.                         If PX < BX
143.                                 BX = PX
144.                         EndIf
145.
146.                         If PY > Y Y = PY
147.                         If PY < BY
148.                                 BY = PY
149.                         EndIf
150.                 Next
151.         Next
152.
153.         X = X + Outline
154.         Y = Y + Outline
155.         BX = BX - Outline
156.         BY = BY - Outline
157.
158.         Line X,Y,X-32,Y
159.         Line X,Y,X,Y-32
160.
161.         Line BX,BY,BX+32,BY
162.         Line BX,BY,BX,BY+32
163.
164.         Line BX,Y,BX+32,Y
165.         Line BX,Y,BX,Y-32
166.
167.         Line X,BY,X-32,BY
168.         Line X,BY,X,BY+32
169. End Function