本文整理汇总了C#中pb_Object.SetColors方法的典型用法代码示例。如果您正苦于以下问题:C# pb_Object.SetColors方法的具体用法?C# pb_Object.SetColors怎么用?C# pb_Object.SetColors使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pb_Object
的用法示例。
在下文中一共展示了pb_Object.SetColors方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Start
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();
}
示例2: ResetPbObjectWithMeshFilter
//.........这里部分代码省略.........
int vertexCount = m.vertexCount;
Vector3[] m_vertices = m.vertices;
Color[] m_colors = m.colors != null && m.colors.Length == vertexCount ? m.colors : new Color[vertexCount];
Vector2[] m_uvs = m.uv;
List<Vector3> verts = preserveFaces ? new List<Vector3>(m.vertices) : new List<Vector3>();
List<Color> cols = preserveFaces ? new List<Color>(m.colors) : new List<Color>();
List<Vector2> uvs = preserveFaces ? new List<Vector2>(m.uv) : new List<Vector2>();
List<pb_Face> faces = new List<pb_Face>();
MeshRenderer mr = pb.gameObject.GetComponent<MeshRenderer>();
if(mr == null) mr = pb.gameObject.AddComponent<MeshRenderer>();
Material[] sharedMaterials = mr.sharedMaterials;
int mat_length = sharedMaterials.Length;
for(int n = 0; n < m.subMeshCount; n++)
{
int[] tris = m.GetTriangles(n);
for(int i = 0; i < tris.Length; i+=3)
{
int index = -1;
if(preserveFaces)
{
for(int j = 0; j < faces.Count; j++)
{
if( faces[j].distinctIndices.Contains(tris[i+0]) ||
faces[j].distinctIndices.Contains(tris[i+1]) ||
faces[j].distinctIndices.Contains(tris[i+2]))
{
index = j;
break;
}
}
}
if(index > -1 && preserveFaces)
{
int len = faces[index].indices.Length;
int[] arr = new int[len + 3];
System.Array.Copy(faces[index].indices, 0, arr, 0, len);
arr[len+0] = tris[i+0];
arr[len+1] = tris[i+1];
arr[len+2] = tris[i+2];
faces[index].SetIndices(arr);
faces[index].RebuildCaches();
}
else
{
int[] faceTris;
if(preserveFaces)
{
faceTris = new int[3]
{
tris[i+0],
tris[i+1],
tris[i+2]
};
}
else
{
verts.Add(m_vertices[tris[i+0]]);
verts.Add(m_vertices[tris[i+1]]);
verts.Add(m_vertices[tris[i+2]]);
cols.Add(m_colors != null && m_colors.Length == vertexCount ? m_colors[tris[i+0]] : Color.white);
cols.Add(m_colors != null && m_colors.Length == vertexCount ? m_colors[tris[i+1]] : Color.white);
cols.Add(m_colors != null && m_colors.Length == vertexCount ? m_colors[tris[i+2]] : Color.white);
uvs.Add(m_uvs[tris[i+0]]);
uvs.Add(m_uvs[tris[i+1]]);
uvs.Add(m_uvs[tris[i+2]]);
faceTris = new int[3] { i+0, i+1, i+2 };
}
faces.Add(
new pb_Face(
faceTris,
sharedMaterials[n >= mat_length ? mat_length - 1 : n],
new pb_UV(),
0, // smoothing group
-1, // texture group
-1, // element group
true // manualUV
));
}
}
}
pb.SetVertices(verts.ToArray());
pb.SetUV(uvs.ToArray());
pb.SetFaces(faces.ToArray());
pb.SetSharedIndices(pb_IntArrayUtility.ExtractSharedIndices(verts.ToArray()));
pb.SetColors(cols.ToArray());
return true;
}
示例3: Triangulate
/**
* Triangulate an entire pb_Object.
*/
public static void Triangulate(pb_Object pb)
{
Vector3[] v = pb.vertices;
Color[] c = pb.colors;
Vector2[] u = pb.uv;
int triangleCount = pb.TriangleCount();
// int triangleCount = pb_Face.AllTriangles(pb.faces).Length; // pb.msh.triangles.Length;
if(triangleCount == v.Length)
{
Debug.LogWarning("We can't pull over any further!\npb_Object: " + pb.name + " is already triangulated.");
}
int vertexCount = triangleCount;
int faceCount = vertexCount / 3;
Vector3[] tri_vertices = new Vector3[vertexCount];
Color[] tri_colors = new Color[vertexCount];
Vector2[] tri_uvs = new Vector2[vertexCount];
pb_Face[] tri_faces = new pb_Face[faceCount];
int n = 0, f = 0;
foreach(pb_Face face in pb.faces)
{
int[] indices = face.indices;
for(int i = 0; i < indices.Length; i+=3)
{
tri_vertices[n+0] = v[indices[i+0]];
tri_vertices[n+1] = v[indices[i+1]];
tri_vertices[n+2] = v[indices[i+2]];
tri_colors[n+0] = c[indices[i+0]];
tri_colors[n+1] = c[indices[i+1]];
tri_colors[n+2] = c[indices[i+2]];
tri_uvs[n+0] = u[indices[i+0]];
tri_uvs[n+1] = u[indices[i+1]];
tri_uvs[n+2] = u[indices[i+2]];
tri_faces[f++] = new pb_Face( new int[] { n+0, n+1, n+2 },
face.material,
face.uv,
face.smoothingGroup,
face.textureGroup, // textureGroup -> force to manual uv mode
face.elementGroup,
face.manualUV
);
n += 3;
}
}
pb.SetVertices(tri_vertices);
pb.SetColors(tri_colors);
pb.SetUV(tri_uvs);
pb.SetFaces(tri_faces);
pb.SetSharedIndices( pb_IntArrayUtility.ExtractSharedIndices(tri_vertices) );
pb.SetSharedIndicesUV( new pb_IntArray[0] );
}
示例4: CombineObjects
/**
* \brief Given an array of "donors", this method returns a merged #pb_Object.
*/
public static bool CombineObjects(pb_Object[] pbs, out pb_Object combined)
{
combined = null;
if(pbs.Length < 1) return false;
List<Vector3> v = new List<Vector3>();
List<Vector2> u = new List<Vector2>();
List<Color> c = new List<Color>();
List<pb_Face> f = new List<pb_Face>();
List<pb_IntArray> s = new List<pb_IntArray>();
List<pb_IntArray> suv = new List<pb_IntArray>();
foreach(pb_Object pb in pbs)
{
int vertexCount = v.Count;
// Vertices
v.AddRange(pb.VerticesInWorldSpace());
// UVs
u.AddRange(pb.uv);
// Colors
c.AddRange(pb.colors);
// Faces
pb_Face[] faces = new pb_Face[pb.faces.Length];
for(int i = 0; i < faces.Length; i++)
{
faces[i] = new pb_Face(pb.faces[i]);
faces[i].manualUV = true;
faces[i].ShiftIndices(vertexCount);
faces[i].RebuildCaches();
}
f.AddRange(faces);
// Shared Indices
pb_IntArray[] si = pb.GetSharedIndices();
for(int i = 0; i < si.Length; i++)
{
for(int n = 0; n < si[i].Length; n++)
si[i][n] += vertexCount;
}
s.AddRange(si);
// Shared Indices UV
{
pb_IntArray[] si_uv = pb.GetSharedIndicesUV();
for(int i = 0; i < si_uv.Length; i++)
{
for(int n = 0; n < si_uv[i].Length; n++)
si_uv[i][n] += vertexCount;
}
suv.AddRange(si_uv);
}
}
GameObject go = (GameObject)GameObject.Instantiate(pbs[0].gameObject);
go.transform.position = Vector3.zero;
go.transform.localRotation = Quaternion.identity;
go.transform.localScale = Vector3.one;
// Destroy the children
foreach(Transform t in go.transform)
GameObject.DestroyImmediate(t.gameObject);
if(go.GetComponent<pb_Object>()) GameObject.DestroyImmediate(go.GetComponent<pb_Object>());
if(go.GetComponent<pb_Entity>()) GameObject.DestroyImmediate(go.GetComponent<pb_Entity>());
combined = go.AddComponent<pb_Object>();
combined.SetVertices(v.ToArray());
combined.SetUV(u.ToArray());
combined.SetColors(c.ToArray());
combined.SetFaces(f.ToArray());
combined.SetSharedIndices( s.ToArray() ?? pb_IntArrayUtility.ExtractSharedIndices(v.ToArray()) );
combined.SetSharedIndicesUV( suv.ToArray() ?? new pb_IntArray[0] {});
combined.ToMesh();
combined.GetComponent<pb_Entity>().SetEntity( pbs[0].GetComponent<pb_Entity>().entityType );
combined.CenterPivot( pbs[0].transform.position );
combined.Refresh();
// refresh donors since deleting the children of the instantiated object could cause them to lose references
foreach(pb_Object pb in pbs)
pb.Verify();
return true;
}