assign material multiple groups in mesh

You are an experienced programmer and have a problem with the engine, shaders, or advanced effects? Here you'll get answers.
No questions about C++ programming or topics which are answered in the tutorials!
Post Reply
peteym5
Posts: 21
Joined: Wed Sep 12, 2012 3:56 pm

assign material multiple groups in mesh

Post by peteym5 »

I am attempting to load 3DS file of a human head that has groups for skin, eyes, iris, lips, and hair so these can get set to different colors. But I when I set the material, the whole mesh is set to that material. Is there a way to set the material for each group or do I need to save each part of the head in different files so it can have different materials for each group?

I am porting some of my VB.NET games that used the Truevision3D engine to Irrlicht Lime

Code: Select all

 
        device = IrrlichtDevice.CreateDevice(driverType, New Dimension2Di(1280, 1024), 32, True, False, False)
        device.SetWindowCaption("Irrlicht Project!")
 
        Dim driver As VideoDriver = device.VideoDriver
        Dim smgr As SceneManager = device.SceneManager
        Dim gui As GUIEnvironment = device.GUIEnvironment
 
        Dim CharSegMesh(16, 24) As Mesh
        Dim  CharSegNode(16, 24) As MeshSceneNode
        Dim NumBuffers As Integer
        Dim k As Integer
        Dim tempbuffer As MeshBuffer
:
:
        CharSegMesh(0, 0) = smgr.GetMesh("Torso_Male.3ds")
        CharSegMesh(0, 1) = smgr.GetMesh("Torso_Female.3ds")
        CharSegMesh(0, 2) = smgr.GetMesh("Torso_Creature.3ds")
        CharSegMesh(0, 3) = smgr.GetMesh("Torso_Long.3ds")
        CharSegMesh(0, 4) = smgr.GetMesh("Torso_Insect.3ds")
        CharSegMesh(0, 5) = smgr.GetMesh("Torso_Round.3ds")
        CharSegMesh(0, 6) = smgr.GetMesh("Torso_Robot.3ds")
        CharSegMesh(0, 7) = smgr.GetMesh("Torso_Skeleton.3ds")
 
        CharSegMesh(1, 0) = smgr.GetMesh("pelvic_Male.3ds")
        CharSegMesh(1, 1) = smgr.GetMesh("pelvic_Female.3ds")
        CharSegMesh(1, 2) = smgr.GetMesh("pelvic_Creature.3ds")
        CharSegMesh(1, 3) = smgr.GetMesh("pelvic_Long.3ds")
        CharSegMesh(1, 4) = smgr.GetMesh("pelvic_Insect.3ds")
        CharSegMesh(1, 5) = smgr.GetMesh("pelvic_Round.3ds")
        CharSegMesh(1, 6) = smgr.GetMesh("pelvic_Robot.3ds")
        CharSegMesh(1, 7) = smgr.GetMesh("pelvic_Skeleton.3ds")
 
        CharSegMesh(2, 0) = smgr.GetMesh("Head00.3ds")
        CharSegMesh(2, 1) = smgr.GetMesh("Head01.3ds")
        CharSegMesh(2, 2) = smgr.GetMesh("Head02.3ds")
        CharSegMesh(2, 3) = smgr.GetMesh("Head03.3ds")
        CharSegMesh(2, 4) = smgr.GetMesh("Head04.3ds")
        CharSegMesh(2, 5) = smgr.GetMesh("Head05.3ds")
        CharSegMesh(2, 6) = smgr.GetMesh("Head06.3ds")
        CharSegMesh(2, 7) = smgr.GetMesh("Head07.3ds")
        CharSegMesh(2, 8) = smgr.GetMesh("Head08.3ds")
        CharSegMesh(2, 9) = smgr.GetMesh("Head09.3ds")
        CharSegMesh(2, 10) = smgr.GetMesh("Head10.3ds")
        CharSegMesh(2, 11) = smgr.GetMesh("Head11.3ds")
        CharSegMesh(2, 12) = smgr.GetMesh("Head12.3ds")
        CharSegMesh(2, 13) = smgr.GetMesh("Head13.3ds")
        CharSegMesh(2, 14) = smgr.GetMesh("Head14.3ds")
        CharSegMesh(2, 15) = smgr.GetMesh("Head15.3ds")
 
        CharSegMesh(3, 0) = smgr.GetMesh("hair00.3ds")
        CharSegMesh(3, 1) = smgr.GetMesh("hair01.3ds")
        CharSegMesh(3, 2) = smgr.GetMesh("hair02.3ds")
        CharSegMesh(3, 3) = smgr.GetMesh("hair03.3ds")
        CharSegMesh(3, 4) = smgr.GetMesh("hair04.3ds")
        CharSegMesh(3, 5) = smgr.GetMesh("hair05.3ds")
        CharSegMesh(3, 6) = smgr.GetMesh("hair06.3ds")
        CharSegMesh(3, 7) = smgr.GetMesh("hair07.3ds")
        CharSegMesh(3, 8) = smgr.GetMesh("hair08.3ds")
        CharSegMesh(3, 9) = smgr.GetMesh("hair09.3ds")
        CharSegMesh(3, 10) = smgr.GetMesh("hair10.3ds")
        CharSegMesh(3, 11) = smgr.GetMesh("hair11.3ds")
        CharSegMesh(3, 12) = smgr.GetMesh("hair12.3ds")
        CharSegMesh(3, 13) = smgr.GetMesh("hair13.3ds")
 
        CharSegMesh(4, 1) = smgr.GetMesh("arm01.3ds")
        CharSegMesh(4, 2) = smgr.GetMesh("arm02.3ds")
        CharSegMesh(4, 3) = smgr.GetMesh("arm03.3ds")
        CharSegMesh(4, 4) = smgr.GetMesh("arm04.3ds")
        CharSegMesh(4, 5) = smgr.GetMesh("arm05.3ds")
        CharSegMesh(4, 6) = smgr.GetMesh("arm06.3ds")
        CharSegMesh(4, 7) = smgr.GetMesh("arm07.3ds")
 
        CharSegMesh(5, 1) = smgr.GetMesh("rightfore1.3ds")
        CharSegMesh(5, 2) = smgr.GetMesh("rightfore2.3ds")
        CharSegMesh(5, 3) = smgr.GetMesh("rightfore3.3ds")
        CharSegMesh(5, 4) = smgr.GetMesh("rightfore4.3ds")
        CharSegMesh(5, 5) = smgr.GetMesh("rightfore5.3ds")
        CharSegMesh(5, 6) = smgr.GetMesh("rightfore6.3ds")
        CharSegMesh(5, 7) = smgr.GetMesh("rightfore7.3ds")
 
        CharSegMesh(6, 1) = smgr.GetMesh("leftfore1.3ds")
        CharSegMesh(6, 2) = smgr.GetMesh("leftfore2.3ds")
        CharSegMesh(6, 3) = smgr.GetMesh("leftfore3.3ds")
        CharSegMesh(6, 4) = smgr.GetMesh("leftfore4.3ds")
        CharSegMesh(6, 5) = smgr.GetMesh("leftfore5.3ds")
        CharSegMesh(6, 6) = smgr.GetMesh("leftfore6.3ds")
        CharSegMesh(6, 7) = smgr.GetMesh("leftfore7.3ds")
 
        CharSegMesh(7, 1) = smgr.GetMesh("thigh01.3ds")
        CharSegMesh(7, 2) = smgr.GetMesh("thigh02.3ds")
        CharSegMesh(7, 3) = smgr.GetMesh("thigh03.3ds")
        CharSegMesh(7, 4) = smgr.GetMesh("thigh04.3ds")
        CharSegMesh(7, 5) = smgr.GetMesh("thigh05.3ds")
        CharSegMesh(7, 6) = smgr.GetMesh("thigh06.3ds")
        CharSegMesh(7, 7) = smgr.GetMesh("thigh07.3ds")
 
        CharSegMesh(8, 1) = smgr.GetMesh("foot01.3ds")
        CharSegMesh(8, 2) = smgr.GetMesh("foot02.3ds")
        CharSegMesh(8, 3) = smgr.GetMesh("foot03.3ds")
        CharSegMesh(8, 4) = smgr.GetMesh("foot04.3ds")
        CharSegMesh(8, 5) = smgr.GetMesh("foot05.3ds")
        CharSegMesh(8, 6) = smgr.GetMesh("foot06.3ds")
        CharSegMesh(8, 7) = smgr.GetMesh("foot07.3ds")
 
 
        For j = 0 To 8
            For i = 0 To 15
                If CharSegMesh(j, i) IsNot Nothing Then
                    NumBuffers = CharSegMesh(j, i).MeshBufferCount                    
                    For k = 0 To NumBuffers-1
                        tempbuffer = CharSegMesh(j, i).GetMeshBuffer(k)
                        tempbuffer.SetMaterial(MaterialLib(k))
                    Next
                    CharSegNode(j, i) = smgr.AddMeshSceneNode(CharSegMesh(j, i))
                    CharSegNode(j, i).Position = New Vector3Df(i * 192, 2560, -800 - j * 192)
                    CharSegNode(j, i).Scale = New Vector3Df(80, 80, 80)
                End If
            Next
        Next j
 
 
CuteAlien
Admin
Posts: 9628
Joined: Mon Mar 06, 2006 2:25 pm
Location: Tübingen, Germany
Contact:

Re: assign material multiple groups in mesh

Post by CuteAlien »

Usually you have one meshbuffer (not mesh) per material. How to export that depends on your tools. But usually if you create for example several materials in Blender you automatically get different meshbuffers in your mesh on export.
IRC: #irrlicht on irc.libera.chat
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
peteym5
Posts: 21
Joined: Wed Sep 12, 2012 3:56 pm

Re: assign material multiple groups in mesh

Post by peteym5 »

Actually there may be something going on with Milkshape3D exporting to 3DS files or Irrlicht Lime has an issue loading them in properly. I exported a few files to different formats like .x and .obj and it worked. I was able to set the material for each group.
Post Reply