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