forked from BilalY/Rasagar
194 lines
5.6 KiB
C#
194 lines
5.6 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEngine.ProBuilder.Csg
|
|
{
|
|
/// <summary>
|
|
/// Holds information about a single vertex, and provides methods for averaging between many.
|
|
/// <remarks>All values are optional. Where not present a default value will be substituted if necessary.</remarks>
|
|
/// </summary>
|
|
struct Vertex
|
|
{
|
|
Vector3 m_Position;
|
|
Color m_Color;
|
|
Vector3 m_Normal;
|
|
Vector4 m_Tangent;
|
|
Vector2 m_UV0;
|
|
Vector2 m_UV2;
|
|
Vector4 m_UV3;
|
|
Vector4 m_UV4;
|
|
VertexAttributes m_Attributes;
|
|
|
|
/// <value>
|
|
/// The position in model space.
|
|
/// </value>
|
|
public Vector3 position
|
|
{
|
|
get { return m_Position; }
|
|
set
|
|
{
|
|
hasPosition = true;
|
|
m_Position = value;
|
|
}
|
|
}
|
|
|
|
/// <value>
|
|
/// Vertex color.
|
|
/// </value>
|
|
public Color color
|
|
{
|
|
get { return m_Color; }
|
|
set
|
|
{
|
|
hasColor = true;
|
|
m_Color = value;
|
|
}
|
|
}
|
|
|
|
/// <value>
|
|
/// Unit vector normal.
|
|
/// </value>
|
|
public Vector3 normal
|
|
{
|
|
get { return m_Normal; }
|
|
set
|
|
{
|
|
hasNormal = true;
|
|
m_Normal = value;
|
|
}
|
|
}
|
|
|
|
/// <value>
|
|
/// Vertex tangent (sometimes called binormal).
|
|
/// </value>
|
|
public Vector4 tangent
|
|
{
|
|
get { return m_Tangent; }
|
|
set
|
|
{
|
|
hasTangent = true;
|
|
m_Tangent = value;
|
|
}
|
|
}
|
|
|
|
/// <value>
|
|
/// UV 0 channel. Also called textures.
|
|
/// </value>
|
|
public Vector2 uv0
|
|
{
|
|
get { return m_UV0; }
|
|
set
|
|
{
|
|
hasUV0 = true;
|
|
m_UV0 = value;
|
|
}
|
|
}
|
|
|
|
/// <value>
|
|
/// UV 2 channel.
|
|
/// </value>
|
|
public Vector2 uv2
|
|
{
|
|
get { return m_UV2; }
|
|
set
|
|
{
|
|
hasUV2 = true;
|
|
m_UV2 = value;
|
|
}
|
|
}
|
|
|
|
/// <value>
|
|
/// UV 3 channel.
|
|
/// </value>
|
|
public Vector4 uv3
|
|
{
|
|
get { return m_UV3; }
|
|
set
|
|
{
|
|
hasUV3 = true;
|
|
m_UV3 = value;
|
|
}
|
|
}
|
|
|
|
/// <value>
|
|
/// UV 4 channel.
|
|
/// </value>
|
|
public Vector4 uv4
|
|
{
|
|
get { return m_UV4; }
|
|
set
|
|
{
|
|
hasUV4 = true;
|
|
m_UV4 = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Find if a vertex attribute has been set.
|
|
/// </summary>
|
|
/// <param name="attribute">The attribute or attributes to test for.</param>
|
|
/// <returns>True if this vertex has the specified attributes set, false if they are default values.</returns>
|
|
public bool HasArrays(VertexAttributes attribute)
|
|
{
|
|
return (m_Attributes & attribute) == attribute;
|
|
}
|
|
|
|
public bool hasPosition
|
|
{
|
|
get { return (m_Attributes & VertexAttributes.Position) == VertexAttributes.Position; }
|
|
private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Position) : (m_Attributes & ~(VertexAttributes.Position)); }
|
|
}
|
|
|
|
public bool hasColor
|
|
{
|
|
get { return (m_Attributes & VertexAttributes.Color) == VertexAttributes.Color; }
|
|
private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Color) : (m_Attributes & ~(VertexAttributes.Color)); }
|
|
}
|
|
|
|
public bool hasNormal
|
|
{
|
|
get { return (m_Attributes & VertexAttributes.Normal) == VertexAttributes.Normal; }
|
|
private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Normal) : (m_Attributes & ~(VertexAttributes.Normal)); }
|
|
}
|
|
|
|
public bool hasTangent
|
|
{
|
|
get { return (m_Attributes & VertexAttributes.Tangent) == VertexAttributes.Tangent; }
|
|
private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Tangent) : (m_Attributes & ~(VertexAttributes.Tangent)); }
|
|
}
|
|
|
|
public bool hasUV0
|
|
{
|
|
get { return (m_Attributes & VertexAttributes.Texture0) == VertexAttributes.Texture0; }
|
|
private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Texture0) : (m_Attributes & ~(VertexAttributes.Texture0)); }
|
|
}
|
|
|
|
public bool hasUV2
|
|
{
|
|
get { return (m_Attributes & VertexAttributes.Texture1) == VertexAttributes.Texture1; }
|
|
private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Texture1) : (m_Attributes & ~(VertexAttributes.Texture1)); }
|
|
}
|
|
|
|
public bool hasUV3
|
|
{
|
|
get { return (m_Attributes & VertexAttributes.Texture2) == VertexAttributes.Texture2; }
|
|
private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Texture2) : (m_Attributes & ~(VertexAttributes.Texture2)); }
|
|
}
|
|
|
|
public bool hasUV4
|
|
{
|
|
get { return (m_Attributes & VertexAttributes.Texture3) == VertexAttributes.Texture3; }
|
|
private set { m_Attributes = value ? (m_Attributes | VertexAttributes.Texture3) : (m_Attributes & ~(VertexAttributes.Texture3)); }
|
|
}
|
|
|
|
public void Flip()
|
|
{
|
|
if(hasNormal)
|
|
m_Normal *= -1f;
|
|
|
|
if (hasTangent)
|
|
m_Tangent *= -1f;
|
|
}
|
|
}
|
|
}
|