On 26/05/2015 at 09:36, xxxxxxxx wrote:
Hello,
the bake functions are relatively old functions, BaseArray is a relatively new class so these two things have nothing to do with each other. But it seems that indeed these two can be combined. Here is some code I came up with:
// let's use the same UVW tag for all texture tags
UVWTag* uvwTag = (UVWTag* )obj->GetTag(Tuvw);
if(uvwTag == nullptr)
return true;
BaseTag* tag = obj->GetFirstTag();
// prepare arrays for texture tag ptr and uvw tag ptr
maxon::BaseArray<TextureTag*> textureTagArray;
maxon::BaseArray<UVWTag*> uvwTags;
// save ptr of all texture tags; fill uvw array
while(tag)
{
if(tag->GetType() == Ttexture)
{
textureTagArray.Append((TextureTag* )tag);
uvwTags.Append((UVWTag* )uvwTag);
}
tag = tag->GetNext();
}
// check if there is something to do
if(textureTagArray.GetCount() == 0)
return true;
// setup bake settings
BaseContainer settings;
settings.SetInt32(BAKE_TEX_WIDTH,400);
settings.SetInt32(BAKE_TEX_HEIGHT, 400);
settings.SetInt32(BAKE_TEX_PIXELBORDER, 2);
settings.SetBool(BAKE_TEX_CONTINUE_UV, true);
settings.SetBool(BAKE_TEX_USE_PHONG_TAG, true);
settings.SetVector(BAKE_TEX_FILL_COLOR, Vector(0.0));
settings.SetBool(BAKE_TEX_COLOR, true);
settings.SetBool(BAKE_TEX_COLOR_ILLUM, false);
settings.SetBool(BAKE_TEX_COLOR_SHADOWS, false);
settings.SetBool(BAKE_TEX_COLOR_LUMINANCE, false);
settings.SetBool(BAKE_TEX_COLOR_DIFFUSION, false);
// InitBakeTexure
BAKE_TEX_ERR err;
BaseDocument* bakeDoc = InitBakeTexture(doc,textureTagArray.GetFirst(),uvwTags.GetFirst(),nullptr,textureTagArray.GetCount(),settings,&err,nullptr);
// if success, do bake
if(err == BAKE_TEX_ERR_NONE)
{
// prepare multipass bitmap
MultipassBitmap* bitmap = MultipassBitmap::Alloc(400,400,COLORMODE_RGB);
// bake
BakeTexture(bakeDoc,settings,bitmap,nullptr,nullptr,nullptr);
// show result
ShowBitmap(bitmap);
// clear result
MultipassBitmap::Free(bitmap);
}
// clear bake document
BaseDocument::Free(bakeDoc);
best wishes,
Sebastian