09:01.02 |
*** join/#brlcad DarkCalfz
(DC@173.231.40.98) |
09:19.28 |
*** join/#brlcad plaes
(~plaes@gn237.zone.eu) |
10:24.09 |
*** join/#brlcad abhi2011
(~chatzilla@ip170-79-211-87.adsl2.static.versatel.nl) |
10:38.15 |
*** join/#brlcad archivist
(~archivist@host81-149-189-98.in-addr.btopenworld.com) |
10:38.15 |
*** join/#brlcad alex_joni
(~alex_joni@emc/board-of-directors/alexjoni) |
10:38.51 |
*** join/#brlcad CIA-62
(~CIA@cia.atheme.org) |
10:39.08 |
*** join/#brlcad plaes
(~plaes@gn237.zone.eu) |
10:39.43 |
*** join/#brlcad betta_y_omega
(~betta_y_o@90.166.231.220) |
10:39.43 |
*** join/#brlcad kanzure
(~kanzure@131.252.130.248) |
10:40.33 |
*** join/#brlcad DarkCalfz
(DC@173.231.40.98) |
10:40.33 |
*** join/#brlcad kunigami2
(~kunigami@loco-gw.ic.unicamp.br) |
10:40.33 |
*** join/#brlcad ``Erik
(Here@c-69-140-109-104.hsd1.md.comcast.net) |
10:40.38 |
*** join/#brlcad merzo
(~merzo@12-152-132-95.pool.ukrtel.net) |
10:41.58 |
*** join/#brlcad KimK
(~Kim__@209.248.147.2.nw.nuvox.net) |
10:41.58 |
*** join/#brlcad packrat
(~packrator@99-67-225-40.lightspeed.livnmi.sbcglobal.net) |
10:41.58 |
*** join/#brlcad starseeker
(~starseeke@BZ.BZFLAG.BZ) |
10:45.33 |
*** join/#brlcad louipc
(~louipc@archlinux/trusteduser/louipc) |
10:45.33 |
*** join/#brlcad brlcad
(~sean@BZ.BZFLAG.BZ) |
13:45.10 |
*** join/#brlcad abhi2011
(~chatzilla@ip170-79-211-87.adsl2.static.versatel.nl) |
13:46.37 |
abhi2011 |
is there a way to calculate a transformation
matrix to convert between co-ordinate systems |
13:47.17 |
abhi2011 |
bullet's co-ordinate system assumes the y axis
as up, but is right handed, just like mged |
13:48.09 |
abhi2011 |
so objects fall towards the xz plane when
gravity is applied |
13:48.45 |
abhi2011 |
the transformation matrix has to map the
translations and rotations to mged's co-ordinate system
correctly |
13:57.08 |
abhi2011 |
i ll try a simple rotation about the
x-axis |
14:55.21 |
abhi2011 |
trying to reset some primtives to the origin
before the simulation starts |
14:55.47 |
abhi2011 |
apparently rt_matrix_transform() applies a
translation/rotation to the existing transform |
14:56.22 |
abhi2011 |
there does not seem to be a functions that can
directly set the absolute world transform of a
comb/primitive |
15:29.17 |
*** join/#brlcad ``Erik
(Here@c-69-140-109-104.hsd1.md.comcast.net) |
17:19.42 |
*** join/#brlcad abhi2011
(~chatzilla@ip170-79-211-87.adsl2.static.versatel.nl) |
17:29.05 |
*** join/#brlcad merzo
(~merzo@77-191-133-95.pool.ukrtel.net) |
18:28.00 |
brlcad |
abhi2011: perhaps there's a way to specify the
coordinate system to bullet |
18:29.37 |
brlcad |
otherwise, you can just apply the rotation
before you feed values to bullet and the reverse when you read
values and apply them back on geometry |
18:32.40 |
abhi2011 |
brlcad: ok |
18:33.57 |
abhi2011 |
about the bounding box function, I have been
trying with combp = (struct rt_comb_internal *)ip->idb_ptr; and
rt_bound_tree(combp->tree, tree_min, tree_max) |
18:34.32 |
abhi2011 |
however rt_bound_tree() does not implement the
OP_DB_LEAF case which causes the traversal of the tree to get
stuck |
18:35.50 |
abhi2011 |
so I was considering adding that case, but
even if I rt_bound_tree() does get me to the leaf, it seems the
leaf only had information about a primtive's name |
18:36.22 |
abhi2011 |
not its shape information such as a pointer to
its ft_bbox() method etc, or any geometry info |
18:49.29 |
brlcad |
abhi2011: so it sounds like there's some
disconnect, that you're not setting up something
correctly |
18:50.59 |
brlcad |
if I recall correctly, you had it working
earlier, when you were mimicking what the bb command does (ala
_ged_get_obj_bounds) |
18:51.13 |
brlcad |
now you're basically saying that method
doesn't work |
18:51.22 |
brlcad |
but you had it working for combs, so what's
changed? |
18:55.53 |
brlcad |
IF ip is a comb (which you have to check),
then you still have to call rt_gettree() to "load" the members of
that comb and calculate the primitive bb's (and THEN you can call
rt_bound_tree() to get the overall comb bb) |
18:56.57 |
brlcad |
read src/libged/get_obj_bounds.c again -- it
does what you're trying to do |
18:57.12 |
brlcad |
it just starts with a char*name instead of an
rt_db_internal |
18:58.39 |
brlcad |
when your function is done and working, it
should drop right into _ged_get_obj_bounds() and
_ged_get_obj_bounds2() |
18:58.58 |
brlcad |
(or better still, into the callers of those
functions so they can be eliminated) |
19:30.08 |
abhi2011 |
brlcad: yes I just found that out, that I need
to call rt_gettree() for combs, otherwise the members are not
loaded |
19:30.24 |
abhi2011 |
well now I ll get it working |
19:35.28 |
abhi2011 |
ok I got the reason why I had said
rt_bound_tree() was working before |
19:36.15 |
abhi2011 |
it was with a standalone program which
obtained a struct rt_i *rtip directly from the the database file ,
using rtip = rt_dirbuild(argv[1], title, sizeof(title)); |
19:36.54 |
abhi2011 |
this trip does have the primtives and can be
safely passed to rt_gettree(rtip, argv[2]), to load all the
primtives for a combination |
19:37.19 |
abhi2011 |
but in the bb box function, I create an in-mem
rtip |
19:37.40 |
abhi2011 |
which does not know anything about the
primitives |
19:37.59 |
abhi2011 |
as it was not made from the original
file |
19:39.09 |
abhi2011 |
so calling rt_gettree() as follows : ( when I
am trying to find the bb for a comb of course), would lead to the
members of that comb still not getting loaded |
19:40.52 |
abhi2011 |
if (rt_gettree(rtip, "dummy") <
0){... |
19:42.36 |
abhi2011 |
the only thing thats changed is the rtip
between the 2 cases (the one where I build rtip using rt_dirbuild()
and the bb function case which uses an in-mem rtip ) |
19:46.44 |
abhi2011 |
brlcad: thats why the original rtip that was
made from the database file would be needed to get to the
primtives, because rt_gettree() needs to get the original
rtip |
20:14.34 |
brlcad |
I'm not sure much of that made sense to me
:) |
20:16.05 |
brlcad |
recounting what you did to me isn't necessary,
I know what you did :) it was a question to ask yourself to
hopefully help you figure out what you now need to do to get things
working |
20:18.14 |
abhi2011 |
yes ok :) , I am certain now that the
original dbip needs to be passed and I ll get the bb using it and
wrap up the function |
20:18.29 |
abhi2011 |
perhaps in the near future i ll be able to
remove it |
20:19.02 |
brlcad |
if it's a comb, your job is really
easy |
20:19.58 |
brlcad |
the only real work remaining is/was supposed
to be figuring out how to calculate the bb for a
primitive |
20:20.14 |
brlcad |
you had *A* solution, just not the ideal
solution |
20:20.55 |
brlcad |
so you could go with what you had (using the
inmem) ... or figure out how to build an rt_comb_internal by hand
with just that one primitive |
20:22.31 |
brlcad |
I'd suggest getting it to work for both comb
and prims using the two methods you already know work, then trying
to build the rt_comb_internal as a replacement method for
prims |
20:22.56 |
brlcad |
that way, the code will be at least functional
and can be tested for any object type |
20:43.09 |
*** join/#brlcad merzo
(~merzo@194-13-133-95.pool.ukrtel.net) |
21:02.24 |
abhi2011 |
brlcad: yes, I will be building a
rt_comb_internal for finding the bb of both prims and
combs |
21:03.46 |
abhi2011 |
the only other thing I will be doing is adding
an extra paramter to rt_bound_internal() |
21:04.42 |
abhi2011 |
will make it like : rt_i
rt_bound_internal(struct rt_i *rtip, struct rt_db_internal *ip,
point_t rpp_min, point_t rpp_max) |
21:05.06 |
brlcad |
why? you shouldn't need to do that |
21:05.14 |
abhi2011 |
ah ha...:) |
21:05.20 |
abhi2011 |
so that is because |
21:05.39 |
abhi2011 |
the rtip that I pass to rt_gettree() should be
the original rtip |
21:05.53 |
abhi2011 |
not one created from an in-mem dbip |
21:07.19 |
brlcad |
it feels like we're talking in circles
:) |
21:07.53 |
abhi2011 |
the in-mem dbip has no geometry information
about the primtives in the model, and consequently neither does the
struct rt_i* made from it |
21:08.25 |
abhi2011 |
well, yeah I know it feels that way, and its
my fault really |
21:09.09 |
abhi2011 |
the rt_bound_tree(combp->tree, tree_min,
tree_max) method never worked before actually |
21:09.13 |
brlcad |
sure, that you found out last week -- you'd
have to add all of the comb's members (that's why you were
researching db_functree()) |
21:09.22 |
abhi2011 |
yes exactly |
21:09.35 |
abhi2011 |
and db_functree() runs against the same
problem see |
21:09.45 |
abhi2011 |
its unable to add the primtives |
21:10.03 |
brlcad |
because? |
21:10.04 |
abhi2011 |
because it uses db_lookup() on the in-mem
db_i |
21:10.24 |
abhi2011 |
the one I create and pass to it inside the
rt_bound_internal() function |
21:10.24 |
brlcad |
you don't run functree on the inmem |
21:11.11 |
brlcad |
youd run functree on the original dbi to add
them to the inmem |
21:11.11 |
abhi2011 |
yes, I should run it on the original struct
db_i |
21:11.31 |
abhi2011 |
yes, but the original db_i is not
passed |
21:11.34 |
abhi2011 |
to the function |
21:11.43 |
abhi2011 |
so I would need to pass it |
21:12.30 |
brlcad |
that would be better than passing an rtip, but
still seems unnecessary.. |
21:12.39 |
abhi2011 |
yes, umm why |
21:12.51 |
abhi2011 |
there is no other way to add the
primitives |
21:13.14 |
abhi2011 |
other than picking them form the original
struct db_i and putting them in the in-mem struct db_i |
21:16.27 |
brlcad |
the why would be because the rt_comb_internal
should already have a union tree * filled out |
21:16.46 |
brlcad |
the inmem one you were trying didn't, but
that's obvious why .. you only added the comb |
21:18.25 |
brlcad |
the caller will be passing you an
rt_db_internal that should be filled out, that tree should be
passable to rt_bound_tree() as-is .. no? |
21:18.42 |
brlcad |
if it's not, it sounds like a problem in the
caller code |
21:19.24 |
brlcad |
(like not calling dirbuild or gettrees or
something .. don't think it matters which) |
21:19.24 |
abhi2011 |
yes it should be passable to rt_bound_tree(),
however the structure of the tree is wrong |
21:20.09 |
abhi2011 |
the tree leads to the primtive node , but that
node has just the primtive name |
21:20.49 |
abhi2011 |
it does not have any geometry information and
the tr_op is not OP_SOLID |
21:20.55 |
abhi2011 |
its OP_DB_LEAF |
21:20.59 |
abhi2011 |
which is not correct |
21:21.18 |
brlcad |
so why is that, sounds like something not
getting set up right |
21:21.30 |
abhi2011 |
yes so let me explain :) |
21:21.39 |
brlcad |
like I said -- "it sounds like a problem in
the caller code" |
21:22.21 |
abhi2011 |
hmm yeah |
21:22.33 |
abhi2011 |
the rt_db_internal() should have a complete
tree |
21:23.56 |
abhi2011 |
but the caller code is very straight forward :
http://bin.cakephp.org/view/1978180787 |
21:24.36 |
brlcad |
rt_bound_tree() is clearly used by
src/libged/bb.c (via get_obj_bounds.c()) so if they can do the
setup, you should be able to too (even if it requires the caller to
do something first) |
21:25.23 |
abhi2011 |
ok |
21:25.28 |
brlcad |
so if that caller code isn't working right,
there's something else you need to have it do |
21:26.35 |
brlcad |
maybe see what rt_gettree() does since that's
what get_obj_bounds.c calls before calling librt |
21:26.45 |
abhi2011 |
ah! |
21:26.46 |
brlcad |
you may need to do some subportion of what
it's doing |
21:27.00 |
abhi2011 |
so its called before |
21:27.11 |
abhi2011 |
yes I ll check it |
21:27.13 |
brlcad |
there's no point in calling rt_gettree in the
caller code because you don't have an rtip |
21:27.33 |
brlcad |
but maybe there is some other rt function that
sets up and initializes the rt_comb_internal properly |
21:27.40 |
brlcad |
very likely :) |
21:27.44 |
abhi2011 |
ok |
21:28.00 |
brlcad |
something related to loading a union tree
* |
21:29.48 |
abhi2011 |
yeah the first thing get_obj_bounds() does it
/* Make a new rt_i instance from the existing db_i sructure */ and
finally calls rt_gettree() on it |
21:31.05 |
abhi2011 |
which I could do in my caller code too :P, but
lets see if there some other way |
21:34.47 |
brlcad |
yeah, if the caller had to do all of that, it
would defeat the simplicity we're going for |
21:35.13 |
brlcad |
if you find out that you have to add a dbip
parameter, that's fine -- but you should make sure first |
21:37.25 |
abhi2011 |
well yes, there is no way to intialize the
tree of an rt_comb_internal() for a regions without doing walk on
the database instance tree using the original db_i |
21:38.09 |
brlcad |
how do you know that? |
21:39.14 |
abhi2011 |
because only the original db_i would have the
information about the geometry of the primitives |
21:40.02 |
abhi2011 |
and that db_i would need to be used to look up
any primitive names that we encounter while traversing the tree for
a comb |
21:40.21 |
brlcad |
right, okay -- I misread what you were
saying |
21:40.50 |
brlcad |
the question is whether there is already a
routine or simple method that will initialize it for you |
21:41.02 |
brlcad |
other than rt_gettree() |
21:46.16 |
brlcad |
if something doesn't exist, that actually
might be a good case for adding a function that creates a non
op_db_leaf union tree suitable for your function (which calling
code would then be required to call beforehand) |
21:47.31 |
brlcad |
basically something like rt_gettree() but
specifically for combs, like maybe a new rt_comb_tree()
function |
21:48.15 |
abhi2011 |
ok |
21:48.58 |
abhi2011 |
i did come across |
21:48.59 |
abhi2011 |
db_comb_describe |
21:49.07 |
abhi2011 |
and rt_comb_describe() |
21:52.32 |
abhi2011 |
ok yeah, adding a function that creates a non
op_db_leaf union tree would still require passing the original db_i
to it, so all the geometry info about the model is
available |
21:53.00 |
brlcad |
yes, something like: union tree
*rt_comb_tree(const struct db_i *dbip, const struct rt_db_internal
*ip) |
21:55.41 |
abhi2011 |
ok |
21:55.45 |
brlcad |
I hate to say it, because that's probably the
way to go, but I think we're getting out of scope |
21:55.51 |
brlcad |
a bit at least |
21:56.27 |
brlcad |
figuring out how to implement that function
properly would probably take a few days at best, a couple weeks at
worst |
21:56.33 |
abhi2011 |
yeah I dont see any other function in
raytrace.h that could make a rt_comb_internal |
21:57.10 |
brlcad |
plus figuring out the important parts from
rt_gettree() is probably a little bit out of depth |
21:57.26 |
brlcad |
that's relatively complex code so it'd be a
challenge |
21:57.44 |
abhi2011 |
yah that would really go deep into 3D geometry
I think :P |
21:57.59 |
brlcad |
not really |
21:58.06 |
brlcad |
it gets deep into librt structures is
all |
21:58.13 |
abhi2011 |
ok |
21:58.15 |
brlcad |
at lot of recursion and complex data
structures |
21:58.41 |
brlcad |
doable, but not immediately relevant for the
goals of this project |
21:59.07 |
brlcad |
so pass the dbip, but add a FIXME note to the
comment header with the details we've talked about |
21:59.31 |
abhi2011 |
ok |
21:59.34 |
brlcad |
stating the need for something like
rt_comb_tree to get a portion of the rt_gettree()
initialization |
21:59.54 |
abhi2011 |
right |