December 03, 2020, 08:52:30 PM

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

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Simple Bounding Cubes by N [ 1+ years ago ]
« on: June 29, 2017, 12:28:42 AM »
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


Comments :


Neochrome(Posted 1+ years ago)

 Nice!!! cool for sharing!


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal