Rasagar/Library/PackageCache/com.unity.probuilder/External/CSG/Classes/Vertex.cs
2024-08-26 23:07:20 +03:00

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;
}
}
}