Discussion:
[osg-users] Load an obj file and mapping a given vertex to its Texture coordinates
Mike Blakefiled
2018-08-06 14:27:39 UTC
Permalink
Hi everyone, I'm new here.

I load an obj file with osgDB::readNodeFile("my.obj") and add it to my scene.
now, given a vertex Id, I'd like to be able to get its UV/Texture coordinate.

I can see that osg::Geometry has a getTexCoordArray() method, but dynamically casting my node to org::Geometry crashes the program.
moreover, according to the docs, getTexCoordArray() simply returns a pointer to osg::Array, and it's unclear what type the elements of that array is (osg::Vec2?)
...

Thank you!

Cheers,
mike

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=74473#74473
Werner Modenbach
2018-08-08 12:42:53 UTC
Permalink
Hi Mike,

the loaded node isn't just a single node but a treelike structure where
your actual geode(s) is/are located somewhere in the structure.
What you mean by vertex Id? Each geode contains 1 or more drawables and
each drawable contains a vertex array and eventually texCoordArray(s).

So you have to identify the geode your vertex is in. Then you can try to
dynamic_cast. Anyway you need to check if your cast returned 0.

The next problem is the osg::Array. I didn't find a solution for that so
far. If you kno
Post by Mike Blakefiled
Hi everyone, I'm new here.
I load an obj file with osgDB::readNodeFile("my.obj") and add it to my scene.
now, given a vertex Id, I'd like to be able to get its UV/Texture coordinate.
I can see that osg::Geometry has a getTexCoordArray() method, but dynamically casting my node to org::Geometry crashes the program.
moreover, according to the docs, getTexCoordArray() simply returns a pointer to osg::Array, and it's unclear what type the elements of that array is (osg::Vec2?)
...
Thank you!
Cheers,
mike
------------------
http://forum.openscenegraph.org/viewtopic.php?p=74473#74473
_______________________________________________
osg-users mailing list
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
michael kapelko
2018-08-09 10:39:26 UTC
Permalink
Here's how I change texture coordinates:
https://github.com/OGStudio/ogs-mahjong-components/blob/0308cd2ed97b001cf5aecea1b5aada839707c5cf/02.Theme/desktop/src/render.h#L184
Note that the function gets osg::Geode that has already been extracted
from osg::Node.

Here's a sample class to print whole osg::Node structure (replace
log::logprintf with printf):
https://github.com/OGStudio/openscenegraph-cross-platform-examples/blob/f692fd8b0886dbdba1d4e99087998e87827056db/features/scene/PrintGraphVisitor.cpp
You need to create this class instance and call
'yourNode.accept(instance);' to have the structure printed.
On Wed, 8 Aug 2018 at 15:43, Werner Modenbach
Post by Werner Modenbach
Hi Mike,
the loaded node isn't just a single node but a treelike structure where
your actual geode(s) is/are located somewhere in the structure.
What you mean by vertex Id? Each geode contains 1 or more drawables and
each drawable contains a vertex array and eventually texCoordArray(s).
So you have to identify the geode your vertex is in. Then you can try to
dynamic_cast. Anyway you need to check if your cast returned 0.
The next problem is the osg::Array. I didn't find a solution for that so
far. If you kno
Post by Mike Blakefiled
Hi everyone, I'm new here.
I load an obj file with osgDB::readNodeFile("my.obj") and add it to my scene.
now, given a vertex Id, I'd like to be able to get its UV/Texture coordinate.
I can see that osg::Geometry has a getTexCoordArray() method, but dynamically casting my node to org::Geometry crashes the program.
moreover, according to the docs, getTexCoordArray() simply returns a pointer to osg::Array, and it's unclear what type the elements of that array is (osg::Vec2?)
...
Thank you!
Cheers,
mike
------------------
http://forum.openscenegraph.org/viewtopic.php?p=74473#74473
_______________________________________________
osg-users mailing list
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Werner Modenbach
2018-08-09 15:06:42 UTC
Permalink
Hi Mike,

I suggest checking the results of "geom" and "coords" before using them.
If they are nullptr it will crash your program.

- Werner -
Post by michael kapelko
https://github.com/OGStudio/ogs-mahjong-components/blob/0308cd2ed97b001cf5aecea1b5aada839707c5cf/02.Theme/desktop/src/render.h#L184
Note that the function gets osg::Geode that has already been extracted
from osg::Node.
Here's a sample class to print whole osg::Node structure (replace
https://github.com/OGStudio/openscenegraph-cross-platform-examples/blob/f692fd8b0886dbdba1d4e99087998e87827056db/features/scene/PrintGraphVisitor.cpp
You need to create this class instance and call
'yourNode.accept(instance);' to have the structure printed.
On Wed, 8 Aug 2018 at 15:43, Werner Modenbach
Post by Werner Modenbach
Hi Mike,
the loaded node isn't just a single node but a treelike structure where
your actual geode(s) is/are located somewhere in the structure.
What you mean by vertex Id? Each geode contains 1 or more drawables and
each drawable contains a vertex array and eventually texCoordArray(s).
So you have to identify the geode your vertex is in. Then you can try to
dynamic_cast. Anyway you need to check if your cast returned 0.
The next problem is the osg::Array. I didn't find a solution for that so
far. If you kno
Post by Mike Blakefiled
Hi everyone, I'm new here.
I load an obj file with osgDB::readNodeFile("my.obj") and add it to my scene.
now, given a vertex Id, I'd like to be able to get its UV/Texture coordinate.
I can see that osg::Geometry has a getTexCoordArray() method, but dynamically casting my node to org::Geometry crashes the program.
moreover, according to the docs, getTexCoordArray() simply returns a pointer to osg::Array, and it's unclear what type the elements of that array is (osg::Vec2?)
...
Thank you!
Cheers,
mike
------------------
http://forum.openscenegraph.org/viewtopic.php?p=74473#74473
_______________________________________________
osg-users mailing list
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
--
*TEXION Software Solutions, Rotter Bruch 26a, D-52068 Aachen*
Phone: +49 241 475757-0
Fax: +49 241 475757-29
Web: http://texion.eu
eMail: ***@texion.eu
Loading...