PolygonMesh.AddVertexColor
 
 
 

PolygonMesh.AddVertexColor

Introduced

v3.0

Description

Adds a new vertex color property to this polygon mesh object.

C# Syntax

ClusterProperty PolygonMesh.AddVertexColor( String Name );

Scripting Syntax

oReturn = PolygonMesh.AddVertexColor( [Name] );

Return Value

ClusterProperty

Parameters

Parameter Type Description
Name String Name of new vertex color property

Default Value: Vertex_Color

Examples

JScript Example

// create scene with sphere
NewScene( null, false );
CreatePrim("Sphere", "MeshSurface", null, null);
// get selected elements from scene
if ( Selection.count == 0 ) {
         LogMessage( "Nothing selected", siError );
} else {
         var objs = Selection;
        // get selected meshes from selection list
        var meshes = SIFilter( objs, "polygon_mesh", true, siQuickSearch );
        if ( !meshes ) {
                LogMessage( "No polygon meshes selected", siError );
        }
        // process selected models
        freezeNormalColors( meshes );
}
function freezeNormalColors( objs )
{
        // process all meshes
        for ( var i = 0; i < objs.count; i++ ) {
                // get current mesh (type : "polyMsh")
                var obj = objs( i );
                // get obj material
                var mat = obj.Material;
                // if material is not local add one
                if ( mat.IsA(siSharedPSet) ) {
                        mat = obj.AddMaterial();
                }         
                // get polygon mesh geometry
                var polymesh = obj.ActivePrimitive.Geometry;
                // get current vertex color property
                var vc = polymesh.CurrentVertexColor;
                // current vertex color property not set yet
                if ( vc == null ) {
                        // no vertex color properties installed, add one. 
                        vc = polymesh.AddVertexColor();
                        // set the vertex color to be used by the polgon obj's 
                        // material.
                        polymesh.CurrentVertexColor = vc;
                }
                // set vertex colours from shading normal vectors
                // the parent of the vertex color is
                // a cluster. This maintains the relationship
                // between the actual node index and the corresponding
                // cluster index.
                var vcClsElems = vc.parent.elements;
                var nodes2 = new VBArray( vc.Elements.Array ); 
                var nodes = nodes2.toArray();
                var clsElemIndex = 0;
                // visit all polygons
                for ( var j = 0; j < polymesh.Polygons.Count; j++ ) {
                        // get pointer on polygon
                        poly = polymesh.Polygons( j );
                        // visit all polynodes
                        var polynodes = poly.Nodes
                        for ( var k = 0; k < polynodes.Count; k++ ) {
                                var node = polynodes( k );
                                // get polynode normal
                                var normal = node.normal;
                                // lookup node index for vertex color
                                clsElemIndex = vcClsElems.FindIndex( node.Index ) * 4;
                                // compute corresponding color channels
                                nodes[ clsElemIndex ]    = ( normal.x + 1.0 ) * 0.5;
                                nodes[ clsElemIndex + 1 ] = ( normal.y + 1.0 ) * 0.5;
                                nodes[ clsElemIndex + 2 ] = ( normal.z + 1.0 ) * 0.5;
                                nodes[ clsElemIndex + 3 ] = 1.0;
                        }
                }
                // put the new colors back into the vertex colour 
                vc.Elements.Array = nodes;
        }
        return;
}

See Also

PolygonMesh.CurrentVertexColor PolygonMesh.VertexColors ClusterProperty CreateVertexColorSupport