Tutorials about mesh and materials?

On 18/02/2016 at 11:05, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   r17 
Platform:   Windows  ;   
Language(s) :     C++  ;

I'm creating a kind of importer but I need to create the meshes (done), need to create the materials... that is only partially done since I managed to create the material but put the textures (nothing too sexy just diffuse, spec etc), and apply to meshes.

Obviously I feel a bit unconfortable comming here and spend your time replying questions and questions to me.

I've downloaded the .chm that is ok since documents the sdk but I didn't found more examples than the sdk ones that only cover some parts, are there tutorials about something similar?

Also a tip about creating materials and apply then to sub-meshes (sorry I came from other 3d package and it calls like that to parts of a mesh) is welcome.

On 19/02/2016 at 01:35, xxxxxxxx wrote:


you don't need to feel uncomfortable about asking questions here. After all this is the sole purpose of this forum.
Regarding tutorials, have a look at this thread.
The SDK documentation can also be accessed online, no need to download the .chm.

In order to create materials, you will need to check a few things:

  1. You need a TextureTag on your object in order to link the object to the material.
  2. If you want to apply a material to parts of a mesh, you need to create a SelectionTag (see also BaseSelect) and set it in the TextureTag
  3. Assigning textures to a material is a matter of creating BitmapShader (Xbitmap) and assigning it to the respective channel of your material.

I hope, this helps.

On 21/02/2016 at 11:34, xxxxxxxx wrote:

I like the examples in the sdk.
A very good start to begin your journey.

Another tip I can give you:
Start in python and port it to c++.
Python is easier and very good for prototyping.


On 22/02/2016 at 04:52, xxxxxxxx wrote:

I've managed to create sub parts etc, unfortunatly I cannot assign materials to it.

Let's explaint a bit more:

- My object is a OBJECT_GENERATOR but it contains a PolygonObject that has all this data (further known as mObj)
- Obviously I cannot see mOb properties until I make it editable, after that I see my Polygon Selection Tags, one UVW Tag, and each Texture Tag per Polygon Selection Tag, but no material assigned.

I tried to assign the material by:

texTag = (TextureTag* )mObject->MakeTag(Ttexture);
texTag->SetParameter(DescLevel(TEXTURETAG_PROJECTION), gdata, DESCFLAGS_SET_0);
texTag->SetParameter(DescLevel(TEXTURETAG_RESTRICTION), gdata, DESCFLAGS_SET_0);

But it didn't work, by the way doc->SearchMaterial(matname) is already tested and working.

Any idea?

On 26/02/2016 at 01:40, xxxxxxxx wrote:


what exactly are you using as "name" value for TEXTURETAG_RESTRICTION? This should be the name of the polygon selection tag.

Best wishes,

On 29/02/2016 at 00:58, xxxxxxxx wrote:

Yes restriction seems to be ok, let me share an image where you can see the problem:

  1. Object just imported
  2. Make editable
  3. Texture tag seems to be ok
  4. Polygon Selection tag seems to be ok

The problem seems that Material is not applied on Texture Tag (I checked and it exists in the document at apply time), but if I make the object editable and apply the material manually it looks fine.

Regards, Víctor

On 29/02/2016 at 01:45, xxxxxxxx wrote:


I'm using this code in GetVirtualObjects() and it works fine here:

BaseObject* cube = BaseObject::Alloc(Ocube);  
if (!cube)  
 return nullptr;  
TextureTag* ttag = static_cast<TextureTag*>(cube->MakeTag(Ttexture));  
 BaseMaterial* material = hh->GetDocument()->SearchMaterial("green material");  
return cube;  

Does this code work for you?

Best wishes,

On 29/02/2016 at 09:43, xxxxxxxx wrote:

It worked but I was creating my poly object in other part of the code and just return it at getvirtualobjects.

Fortunatly I think we are near to the end since I did this fast test:

BaseMaterial* bmat = doc- >SearchMaterial(mats[submesh->mMaterialIndex]->GetName());
texTag- >SetMaterial(bmat);
texTag- >SetName(mats[submesh->mMaterialIndex]->GetName());

but the material was not applied, using your example I tried this hack and it worked

int actTags = 0;
while (m_actual_obj- >GetTag(Ttexture, actTags) != nullptr)
_ TextureTag* tTag = static_cast<TextureTag*>(m_actual_obj->GetTag(Ttexture, actTags));_
_ BaseMaterial *basemat=tTag->GetMaterial();_
_ if (basemat == nullptr)_
_ tTag->SetMaterial(hh->GetDocument()->SearchMaterial(tTag->GetName()));_
_ actTags++;_

So the problem was not the way to apply mats but when should I apply mats.

Obviously this works but not sure if it is the best way to work with this kind of issues.

On 01/03/2016 at 01:18, xxxxxxxx wrote:


why do you create the polygon object in "other part" and not in GetVirtualObjects()? Please notice that Cinema will take the ownership of the objects returned by GetVirtualObjects(). So be sure to handle the ownership correctly.

Best wishes,

On 01/03/2016 at 04:02, xxxxxxxx wrote:

It is somethink like scatter a custom mesh.

I have a rootgenerator that makes some PolyObj* that are cloned into its children, is has no sense to generate that PolyObj for each children since it takes much more time.