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