Getting Material in Video Post ExecutePixel
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 24/03/2010 at 04:50, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 11.5
Platform: Windows ;
Language(s) : C++ ;---------
I want to find the name of a material a pixel is being rendered in from a Video Post plugin. I have got code that works in some cases, but if there are different materials applied to selected faces of a cube I can't see how to get the right material.Here's what I'm doing
if (pp->frag[0]->id.Content())
{
RayObject *obj=pp->frag[0]->id.GetObject(pp->vd);
if (obj->texcnt)
{
GeListNode* mp=pp->vd->GetTexData(obj, 0)->mp;
if (mp && mp->IsInstanceOf(Tbaselist2d))
{
BaseList2D *bmp=static_cast<BaseList2D*>(mp);
name=bmp->GetName();but in the example I'm currently working on, obj->texcnt is 3 and the names I actually want are those from GetTexData(obj, 0), GetTexData(obj, 1) and GetTexData(obj, 2). Unfortunately I can't see any way to work out which index I need for a given pixel!
I can get polygon index numbers, which are different on the 3 faces I can see, but can't see any way to map them to textures.
Thanks,
Arvan
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 24/03/2010 at 06:59, xxxxxxxx wrote:
You can access the current texture through BaseVolumeData::tex.
Have a look at the example below.
void VisualizePostData::ExecutePixel(PluginVideoPost *node, PixelPost *pp, LONG x, LONG subx, LONG suby) { if (pp->vd) { TexData *tex = NULL; tex = pp->vd->tex; //the texture data of the current pixel if (tex) { //render red if a texture has been found, just as example pp->col[0] = 1.0; pp->col[1] = 0.0; pp->col[2] = 0.0; } } }
cheers,
Matthias