Dirk Reiners wrote:
> Hi Josef,
>
> Carsten Neumann wrote:
>> from the TriangleIterator you should be able to get the texture
>> coordinates and positions of the three triangle vertices and then
>> interpolate those to find the tex coords for the intersection point.
>
> In other words: no, there is no way to get it out of OpenSG right now. ;)
>
> The Line::intersect functions calculates them to test for intersection, but
> it
> doesn't return them. If you need it you can just copy the code out of it.
>
> Hope it helps
Here's our code that does this, we added it a few weeks ago:
void ControlPanel::onTriangleHit(OSG::Node* node, OSG::Pnt3f pnt,
OSG::Vec3f normal, OSG::Int32 triangle)
{
OSG::GeometryRefPtr geom =
dynamic_cast<OSG::Geometry*>(node->getCore());
// get the triangle that was hit
OSG::TriangleIterator iter = geom->beginTriangles();
iter.seek(triangle);
///// calculate the texture coordinates at the hit point /////
// local hit point
OSG::Matrix m;
node->getToWorld().inverse(m);
OSG::Pnt3f local_pnt;
m.mult(pnt, local_pnt);
// get useful data
OSG::Pnt3f p0 = iter.getPosition(0);
OSG::Pnt3f p1 = iter.getPosition(1);
OSG::Pnt3f p2 = iter.getPosition(2);
// compute normal
OSG::Vec3f v1 = p1 - p0;
OSG::Vec3f v2 = p2 - p0;
OSG::Vec3f n = v1.cross(v2);
n.normalize();
// Compute barycentric coordinates a,b,c
float areaABC = n.dot(v1.cross(v2));
float areaPBC = n.dot((p1 - local_pnt).cross(p2 - local_pnt));
float a = areaPBC / areaABC;
float areaPCA = n.dot((p2 - local_pnt).cross(p0 - local_pnt));
float b = areaPCA / areaABC;
float c = 1.0f - a - b;
// check for correctness
//OSG::Vec3f pp = OSG::Vec3f(a*p0) + OSG::Vec3f(b*p1) +
OSG::Vec3f(c*p2);
//OSG::Vec3f zero = pp - OSG::Vec3f(local_pnt);
//ORZ_RUNTIME_ASSERT(zero.length() < 1e-4);
// compute texture coordinate
OSG::Vec2f tc = iter.getTexCoords(0) * a + iter.getTexCoords(1)
* b + iter.getTexCoords(2) * c;
dostuff(tc);
}
Hope it helps.
------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises
looking to deploy the next generation of Solaris that includes the latest
innovations from Sun and the OpenSource community. Download a copy and
enjoy capabilities such as Networking, Storage and Virtualization.
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users