Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dave Griffiths
jellyfish
Commits
99ffd7c3
Commit
99ffd7c3
authored
Feb 15, 2015
by
Dave Griffiths
Browse files
bb intersection fix
parent
df08c096
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
32 additions
and
6 deletions
+32
-6
experiments/tesst.scm
experiments/tesst.scm
+11
-0
src/engine/engine.cpp
src/engine/engine.cpp
+1
-1
src/engine/primitive.cpp
src/engine/primitive.cpp
+19
-5
src/engine/primitive.h
src/engine/primitive.h
+1
-0
No files found.
experiments/tesst.scm
View file @
99ffd7c3
...
...
@@ -75,7 +75,18 @@
(
translate
(
vector
2
-6
0
))
(
texture
0
)
(
identity
)
(
define
a
(
build-cube
))
(
define
b
(
with-state
(
parent
a
)
(
build-cube
)))
(
define
c
(
build-cube
))
(
with-primitive
b
(
parent
c
))
(
with-primitive
a
(
recalc-bb
)
(
msg
"bb/point-intersect? 1="
(
bb/point-intersect?
(
vector
0
0
0
)
0
))
(
msg
"bb/point-intersect? 0="
(
bb/point-intersect?
(
vector
10
0
0
)
0
))
(
translate
(
vector
10
0
0
))
(
msg
"bb/point-intersect? 1="
(
bb/point-intersect?
(
vector
10
0
0
)
0
))
)
src/engine/engine.cpp
View file @
99ffd7c3
...
...
@@ -526,7 +526,7 @@ bool engine::bb_point_intersect(const vec3 &p, flx_real threshold)
scenenode
*
n
=
grabbed_node
();
if
(
n
&&
n
->
m_primitive
!=
NULL
)
{
vec3
pt
=
n
->
m_tx
.
transform
(
p
);
vec3
pt
=
n
->
m_tx
.
inverse
().
transform
(
p
);
return
n
->
m_primitive
->
intersect_bb
(
pt
,
threshold
);
}
}
...
...
src/engine/primitive.cpp
View file @
99ffd7c3
...
...
@@ -25,7 +25,8 @@
#include "cube.h"
primitive
::
primitive
(
unsigned
int
size
,
type
t
)
primitive
::
primitive
(
unsigned
int
size
,
type
t
)
:
m_bb_empty
(
true
)
{
#ifndef _EE
switch
(
t
)
...
...
@@ -57,7 +58,8 @@ void primitive::build()
m_tex
=
get_pdata_arr
(
"t"
);
}
primitive
::
primitive
()
primitive
::
primitive
()
:
m_bb_empty
(
true
)
{
m_size
=
12
*
3
;
#ifndef _EE
...
...
@@ -172,14 +174,26 @@ void primitive::recalc_bb()
{
for
(
int
i
=
0
;
i
<
m_size
;
i
++
)
{
if
(
m_bbmin
>
m_positions
[
i
])
m_bbmin
=
m_positions
[
i
];
if
(
m_bbmax
<
m_positions
[
i
])
m_bbmax
=
m_positions
[
i
];
if
(
m_bb_empty
)
{
m_bbmin
=
m_positions
[
i
];
m_bbmax
=
m_positions
[
i
];
m_bb_empty
=
false
;
}
if
(
m_positions
[
i
].
x
<
m_bbmin
.
x
)
m_bbmin
.
x
=
m_positions
[
i
].
x
;
if
(
m_positions
[
i
].
y
<
m_bbmin
.
y
)
m_bbmin
.
y
=
m_positions
[
i
].
y
;
if
(
m_positions
[
i
].
z
<
m_bbmin
.
z
)
m_bbmin
.
z
=
m_positions
[
i
].
z
;
if
(
m_positions
[
i
].
x
>=
m_bbmax
.
x
)
m_bbmax
.
x
=
m_positions
[
i
].
x
;
if
(
m_positions
[
i
].
y
>=
m_bbmax
.
y
)
m_bbmax
.
y
=
m_positions
[
i
].
y
;
if
(
m_positions
[
i
].
z
>=
m_bbmax
.
z
)
m_bbmax
.
z
=
m_positions
[
i
].
z
;
}
}
bool
primitive
::
intersect_bb
(
const
vec3
&
p
,
flx_real
threshold
)
{
return
intersect_point_bb
(
p
,
m_bbmin
,
m_bbm
in
,
threshold
);
return
intersect_point_bb
(
p
,
m_bbmin
,
m_bbm
ax
,
threshold
);
}
list
*
primitive
::
intersect
(
const
vec3
&
start
,
const
vec3
&
end
)
...
...
src/engine/primitive.h
View file @
99ffd7c3
...
...
@@ -69,6 +69,7 @@ protected:
u32
m_size
;
list
m_pdata
;
bool
m_bb_empty
;
vec3
m_bbmin
;
vec3
m_bbmax
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment