123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #if UNITY_EDITOR || UNITY_STANDALONE
- using UnityEngine;
- using System.Collections;
- using ProBuilder2.Common;
- using System.Collections.Generic;
-
- namespace ProBuilder2.Examples
- {
- /**
- * Creates a cube on start and colors it's vertices programmitically.
- */
- public class HueCube : MonoBehaviour
- {
- pb_Object pb;
-
- void Start()
- {
- // Create a new ProBuilder cube to work with.
- pb = pb_ShapeGenerator.CubeGenerator(Vector3.one);
-
- // Cycle through each unique vertex in the cube (8 total), and assign a color
- // to the index in the sharedIndices array.
- int si_len = pb.sharedIndices.Length;
- Color[] vertexColors = new Color[si_len];
- for(int i = 0; i < si_len; i++)
- {
- vertexColors[i] = HSVtoRGB( (i/(float)si_len) * 360f, 1f, 1f);
- }
-
- // Now go through each face (vertex colors are stored the pb_Face class) and
- // assign the pre-calculated index color to each index in the triangles array.
- Color[] colors = pb.colors;
-
- for(int CurSharedIndex = 0; CurSharedIndex < pb.sharedIndices.Length; CurSharedIndex++)
- {
- foreach(int CurIndex in pb.sharedIndices[CurSharedIndex].array)
- {
- colors[CurIndex] = vertexColors[CurSharedIndex];
- }
- }
-
- pb.SetColors(colors);
-
- // In order for these changes to take effect, you must refresh the mesh
- // object.
- pb.Refresh();
- }
-
- /**
- * Convert HSV to RGB.
- * http://www.cs.rit.edu/~ncs/color/t_convert.html
- * r,g,b values are from 0 to 1
- * h = [0,360], s = [0,1], v = [0,1]
- * if s == 0, then h = -1 (undefined)
- */
- static Color HSVtoRGB(float h, float s, float v )
- {
- float r, g, b;
- int i;
- float f, p, q, t;
- if( s == 0 ) {
- // achromatic (grey)
- return new Color(v, v, v, 1f);
- }
- h /= 60; // sector 0 to 5
- i = (int)Mathf.Floor( h );
- f = h - i; // factorial part of h
- p = v * ( 1 - s );
- q = v * ( 1 - s * f );
- t = v * ( 1 - s * ( 1 - f ) );
-
- switch( i )
- {
- case 0:
- r = v;
- g = t;
- b = p;
- break;
- case 1:
- r = q;
- g = v;
- b = p;
- break;
- case 2:
- r = p;
- g = v;
- b = t;
- break;
- case 3:
- r = p;
- g = q;
- b = v;
- break;
- case 4:
- r = t;
- g = p;
- b = v;
- break;
- default: // case 5:
- r = v;
- g = p;
- b = q;
- break;
- }
-
- return new Color(r, g, b, 1f);
- }
- }
- }
- #endif
|