Ooops
November 28, 2020, 01:20:48 PM

Author Topic: [bb] 3D Line Mesh Fx by Inner [ 1+ years ago ]  (Read 603 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] 3D Line Mesh Fx by Inner [ 1+ years ago ]
« on: June 29, 2017, 12:28:39 AM »
Title : 3D Line Mesh Fx
Author : Inner
Posted : 1+ years ago

Description : I got bored okay!

Code :
Code: BlitzBasic
  1. ;
  2. ; Adds a 3D line to the specified mesh.
  3. ; Note: 3D lines are only properly visible when rendered in wireframe mode!
  4. ;
  5. ; Params:
  6. ; mesh     - Mesh to add 3D line to. If 0, a new mesh is created.
  7. ; x0,y0,z0 - Start point of line.
  8. ; x1,y2,z1 - End point of line.
  9. ; r,g,b    - Line colour.
  10. ;
  11. ; Returns:
  12. ; Handle of mesh the 3D line was added to.
  13. ;
  14. Function create_3D_line(mesh,x0#,y0#,z0#,x1#,y1#,z1#,r%=255,g%=255,b%=255)
  15.  
  16.         If mesh = 0
  17.                 mesh = CreateMesh()
  18.                 surf = CreateSurface(mesh)
  19.                 EntityFX mesh,1+2+16
  20.         Else
  21.                 last_surf = CountSurfaces(mesh)
  22.                 surf = GetSurface(mesh,last_surf)
  23.                 If CountVertices(surf) > 30000 Then surf = CreateSurface(mesh)
  24.         End If
  25.  
  26.         v0 = AddVertex(surf,x0,y0,z0)
  27.         v1 = AddVertex(surf,x1,y1,z1)  
  28.         v2 = AddVertex(surf,x0,y0,z0)  
  29.         AddTriangle surf,v0,v1,v2
  30.        
  31.         VertexColor surf,v0,r,g,b
  32.         VertexColor surf,v1,r,g,b
  33.         VertexColor surf,v2,r,g,b
  34.  
  35.         Return mesh
  36.  
  37. End Function
  38. ;
  39. ; CamCtrl
  40. ;
  41. ;
  42. Function CameraControl(camera,camPiv)
  43.         ; --- camera controls
  44.         scrollwheel = MouseZSpeed()
  45.         If MouseDown(1) Then
  46.                 TurnEntity(camPiv, MouseYSpeed(),-MouseXSpeed(),0)
  47.         Else If scrollwheel <> 0 Then
  48.                 MoveEntity(camera, 0,0,scrollwheel*3)
  49.         Else
  50.                 dummy = MouseYSpeed():dummy = MouseXSpeed():dummy = MouseZSpeed() ; prevent mousespeed blips.
  51.         End If
  52.         MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
  53. End Function
  54. ; --- set graphics
  55. Graphics3D 640,480,32,0
  56. SetBuffer(BackBuffer())
  57.  
  58. AntiAlias False
  59.  
  60. ; --- create scene setup
  61. camPiv = CreatePivot()
  62. camera = CreateCamera(camPiv)
  63. CameraClsColor camera,128,128,128
  64. PositionEntity(camera, 0,0,-10)
  65.  
  66. light=CreateLight(2)
  67. PositionEntity(light,4,10,0)
  68. LightRange(light,10)
  69.  
  70. Function Random_Lines()
  71.         llen#=15.0
  72.         For i=0 To 1000
  73.                 If i=0 Then
  74.                         x1#=Rnd(-llen#,llen#)
  75.                         y1#=Rnd(-llen#,llen#)
  76.                         z1#=Rnd(-llen#,llen#)
  77.                 Else
  78.                         x1#=x2#
  79.                         y1#=y2#
  80.                         z1#=z2#
  81.                 EndIf
  82.                 x2#=Rnd(-llen#,llen#)
  83.                 y2#=Rnd(-llen#,llen#)
  84.                 z2#=Rnd(-llen#,llen#)
  85.                 create_3D_line(0,x1#,y1#,z1#,x2#,y2#,z2#)
  86.         Next
  87. End Function
  88.  
  89. Function Sinus3D_Lines()
  90.         llen#=15.0
  91.         rx#=Rnd(5.0)
  92.         ry#=Rnd(5.0)
  93.         rz#=Rnd(5.0)
  94.         For i=0 To 550
  95.                 If i=0 Then            
  96.                         x1#=Sin(xs#)*llen# : xs#=xs#+Cos(lsx#)*llen# : lsx#=lsx#+rx#
  97.                         y1#=Sin(ys#)*llen# : ys#=ys#+Cos(lsy#)*llen# : lsy#=lsy#+ry#
  98.                         z1#=Cos(zs#)*llen# : zs#=zs#+Sin(lsz#)*llen# : lsz#=lsz#+rz#
  99.                 Else
  100.                         x1#=x2#
  101.                         y1#=y2#
  102.                         z1#=z2#
  103.                 EndIf
  104.                 x2#=Sin(xs#)*llen# : xs#=xs#+Cos(lsx#)*llen# : lsx#=lsx#+rx#
  105.                 y2#=Sin(ys#)*llen# : ys#=ys#+Cos(lsy#)*llen# : lsy#=lsy#+ry#
  106.                 z2#=Cos(zs#)*llen# : zs#=zs#+Sin(lsz#)*llen# : lsz#=lsz#+rz#
  107.                 c=c+1
  108.                 If c=5
  109.                         rx#=Rnd(-5.0,5.0)
  110.                         ry#=Rnd(-5.0,5.0)
  111.                         rz#=Rnd(-5.0,5.0)
  112.                         c=0
  113.                 EndIf
  114.                 create_3D_line(0,x1#,y1#,z1#,x2#,y2#,z2#)
  115.                 cube=CreateSphere()
  116.                 ScaleEntity cube,.1,.1,.1
  117.                 PositionEntity cube,x1#,y1#,z1#
  118.                 EntityColor cube,255,0,0
  119.         Next
  120. End Function
  121.  
  122. ;Random_Lines()
  123. Sinus3D_Lines()
  124.  
  125. While Not KeyHit(1)
  126.  
  127.         CameraControl(camera,camPiv)
  128.         ; --- rendering
  129.         CameraClsMode(camera, 1, 1)
  130.         WireFrame(0)
  131.         RenderWorld()
  132.        
  133.         CameraClsMode(camera, 0, 0)
  134.         WireFrame(1)
  135.         RenderWorld()
  136.  
  137.         Flip()
  138. Wend


Comments :


big10p(Posted 1+ years ago)

 Reminds me of when I used to go fishing as a kid - line would always get in a big knot like that!...that create_3D_line function looks familiar, though. :)


N(Posted 1+ years ago)

 You ain't the first one ;)<a href="codearcse0be.html?code=1108" target="_blank">http://blitzbasic.com/codearcs/codearcs.php?code=1108[/url]


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal