Ooops
January 20, 2021, 12:38:39 PM
Welcome,
Guest
. Please
login
or
register
.
Did you miss your
activation email
?
1 Hour
1 Day
1 Week
1 Month
Forever
Login with username, password and session length
Home
Forum
Help
Search
Gallery
Login
Register
SyntaxBomb - Indie Coders
»
Languages & Coding
»
Blitz Code Archives
»
3D Graphics - Maths
»
[bb] Ray Box Intersection by elias_t [ 1+ years ago ]
« previous
next »
Print
Pages: [
1
]
Go Down
Author
Topic: [bb] Ray Box Intersection by elias_t [ 1+ years ago ] (Read 1346 times)
BlitzBot
Jr. Member
Posts: 1
[bb] Ray Box Intersection by elias_t [ 1+ years ago ]
«
on:
June 29, 2017, 12:28:42 AM »
Title :
Ray Box Intersection
Author :
elias_t
Posted :
1+ years ago
Description :
Fast ray box intersection function.
Code :
Code: BlitzBasic
;Ray box intersection function:
;
;rox,roy,roz = ray start point
;rdx,rdy,rdz = ray destination point
;
;bminx,bminy,bminz = box min corner
;bmaxx,bmaxy,bmaxz = box max corner
Function
raybox
(
rox#,roy#,roz#, rdx#,rdy#,rdz#, bminx#,bminy#,bminz#, bmaxx#,bmaxy#,bmaxz#
)
Local
txmin#,txmax#,tymin#,tymax#
Local
ddx#=
1.0
/
(
rox-rdx
)
Local
ddy#=
1.0
/
(
roy-rdy
)
If
ddx >=
0
txmin =
(
bminx - rox
)
* ddx
txmax =
(
bmaxx - rox
)
* ddx
Else
txmin =
(
bmaxx - rox
)
* ddx
txmax =
(
bminx - rox
)
* ddx
EndIf
If
ddy >=
0
tymin =
(
bminy - roy
)
* ddy
tymax =
(
bmaxy - roy
)
* ddy
Else
tymin =
(
bmaxy - roy
)
* ddy
tymax =
(
bminy - roy
)
* ddy
EndIf
If
(
(
txmin > tymax
)
Or
(
tymin > txmax
)
)
Return
0
If
(
tymin > txmin
)
txmin = tymin
If
(
tymax < txmax
)
txmax = tymax
Local
tzmin#,tzmax#
Local
ddz#=
1.0
/
(
roz-rdz
)
If
ddz >=
0
tzmin =
(
bminz - roz
)
* ddz
tzmax =
(
bmaxz - roz
)
* ddz
Else
tzmin =
(
bmaxz - roz
)
* ddz
tzmax =
(
bminz - roz
)
* ddz
EndIf
If
(
txmin > tzmax
)
Or
(
tzmin > txmax
)
Return
0
Return
1
End Function
;EXAMPLE
Graphics3D
640
,
480
,
32
,
2
cam=
CreateCamera
(
)
PositionEntity
cam,
0
,
5
,-
10
li=
CreateLight
(
)
;start and end point of line segment
p1x#=
8
:p1y#=
10
:p1z#=-
10
p2x#=-
8
:p2y#=-
5
:p2z#=
45
;define the bounding box
bx#=
1
; box x min
by#=
2
; box y min
bz#=
3
; box z min
bw#=
3
; box width
bh#=
4
; box height
bd#=
5
; box depth
bxm#=bx+bw
; box x max
bym#=by+bh
; box y max
bzm#=bz+bd
; box z max
box=
CreateCube
(
)
EntityColor
box,
0
,
255
,
100
EntityFX
box,
16
EntityAlpha
box,.7
FitMesh
box, bx,by,bz, bw,bh,bd
;visual ray
m=
CreateMesh
(
)
s=
CreateSurface
(
m
)
v0=
AddVertex
(
s,v0x,v0y,v0z
)
v1=
AddVertex
(
s,v1x,v1y,v1z
)
v2=
AddVertex
(
s,v2x,v2y,v2z
)
AddTriangle
(
s,v0,v2,v1
)
EntityColor
m,
255
,
255
,
0
EntityFX
m,
16
VertexCoords
(
s,
0
,p1x+.15,p1y,p1z
)
VertexCoords
(
s,
1
,p2x,p2y,p2z
)
VertexCoords
(
s,
2
,p1x-.15,p1y,p1z
)
UpdateNormals
m
PositionEntity
cam,
10
,
15
,-
10
PointEntity
cam ,m
While
Not
KeyHit
(
1
)
RenderWorld
(
)
If
KeyDown
(
200
)
Then
VertexCoords
(
s,
1
,
VertexX
(
s,
1
)
,
VertexY
(
s,
1
)
+.1,
VertexZ
(
s,
1
)
)
If
KeyDown
(
208
)
Then
VertexCoords
(
s,
1
,
VertexX
(
s,
1
)
,
VertexY
(
s,
1
)
-.1,
VertexZ
(
s,
1
)
)
If
KeyDown
(
203
)
Then
VertexCoords
(
s,
1
,
VertexX
(
s,
1
)
-.1,
VertexY
(
s,
1
)
,
VertexZ
(
s,
1
)
)
If
KeyDown
(
205
)
Then
VertexCoords
(
s,
1
,
VertexX
(
s,
1
)
+.1,
VertexY
(
s,
1
)
,
VertexZ
(
s,
1
)
)
If
KeyDown
(
201
)
Then
VertexCoords
(
s,
1
,
VertexX
(
s,
1
)
,
VertexY
(
s,
1
)
,
VertexZ
(
s,
1
)
+.1
)
If
KeyDown
(
209
)
Then
VertexCoords
(
s,
1
,
VertexX
(
s,
1
)
,
VertexY
(
s,
1
)
,
VertexZ
(
s,
1
)
-.1
)
dx#=
VertexX
(
s,
1
)
dy#=
VertexY
(
s,
1
)
dz#=
VertexZ
(
s,
1
)
res=raybox
(
p1x,p1y,p1z, dx,dy,dz, bx,by,bz, bxm,bym,bzm
)
Text
0
,
0
,
"Arrow Keys = Move ray Destination"
Text
10
,
10
,res
Flip
Wend
End
Comments :
TartanTangerine (was Indiepath)(Posted 1+ years ago)
Very good. I think I will try to use this very soon.
Olive(Posted 1+ years ago)
very good, thanks for sharing :)btw, 3 lines missing : Text 0,0,resFlip FalseWend
eBusiness(Posted 1+ years ago)
Editing should work.
CyberHeater(Posted 1+ years ago)
Try adding RenderWorldText 0,0,"res = " + resFlipWendto the end of it.
elias_t(Posted 1+ years ago)
Oi.Sorry. ctrl+A did'nt worked...Updated now.
bytecode77(Posted 1+ years ago)
great code! especialy useful for raytracing apps. but useless without intersection point coordinates return...
Logged
Print
Pages: [
1
]
Go Up
« previous
next »
SyntaxBomb - Indie Coders
»
Languages & Coding
»
Blitz Code Archives
»
3D Graphics - Maths
»
[bb] Ray Box Intersection by elias_t [ 1+ years ago ]
SimplePortal 2.3.6 © 2008-2014, SimplePortal