本文整理匯總了C#中TgcViewer.Utils.TgcSceneLoader.TgcMesh.getVertexPositions方法的典型用法代碼示例。如果您正苦於以下問題:C# TgcMesh.getVertexPositions方法的具體用法?C# TgcMesh.getVertexPositions怎麽用?C# TgcMesh.getVertexPositions使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類TgcViewer.Utils.TgcSceneLoader.TgcMesh
的用法示例。
在下文中一共展示了TgcMesh.getVertexPositions方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: fromMesh
/// <summary>
/// Crear a partir de un mesh
/// </summary>
public static TgcTriangleArray fromMesh(TgcMesh mesh)
{
TgcTriangleArray triangleArray = new TgcTriangleArray();
Vector3[] vertices = mesh.getVertexPositions();
int triCount = vertices.Length / 3;
List<TgcTriangle> triangles = new List<TgcTriangle>(triCount);
for (int i = 0; i < triCount; i++)
{
Vector3 v1 = vertices[i * 3];
Vector3 v2 = vertices[i * 3 + 1];
Vector3 v3 = vertices[i * 3 + 2];
TgcTriangle t = new TgcTriangle();
t.A = v1;
t.B = v2;
t.C = v3;
t.Color = Color.Red;
t.updateValues();
triangles.Add(t);
}
triangleArray.triangles.AddRange(triangles);
return triangleArray;
}
示例2: fromMesh
/// <summary>
/// Crear Collider a partir de TgcMesh.
/// Los triangulos se calculan CounterClock-Wise.
/// Crea el BoundingSphere del Collider.
/// </summary>
/// <param name="mesh">TgcMesh</param>
/// <returns>Collider creado</returns>
public static TriangleMeshCollider fromMesh(TgcMesh mesh)
{
TriangleMeshCollider collider = new TriangleMeshCollider();
//Cargar triangulos
Vector3[] vertices = mesh.getVertexPositions();
int triangleCount = vertices.Length / 3;
collider.triangles = new Triangle[triangleCount];
for (int i = 0; i < triangleCount; i++)
{
//Invertir orden de vertices para que la normal quede CounterClock-Wise
collider.triangles[i] = new Triangle(
vertices[i * 3 + 2],
vertices[i * 3 + 1],
vertices[i * 3]
);
}
//Crear BoundingSphere
collider.BoundingSphere = TgcBoundingSphere.computeFromMesh(mesh);
return collider;
}
示例3: init
public override void init()
{
Device d3dDevice = GuiController.Instance.D3dDevice;
//Cargar un mesh
TgcSceneLoader loader = new TgcSceneLoader();
TgcScene scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Cimientos\\PilarEgipcio\\PilarEgipcio-TgcScene.xml");
mesh = scene.Meshes[0];
//Obtener los vértices del mesh (esta operacion es lenta, copia de la GPU a la CPU, no hacer a cada rato)
Vector3[] vertices = mesh.getVertexPositions();
//Iterar sobre todos los vertices y construir triangulos, normales y planos
int triCount = vertices.Length / 3;
triangles = new List<TgcTriangle>(triCount);
normals = new List<TgcArrow>();
planes = new List<TgcQuad>();
for (int i = 0; i < triCount; i++)
{
//Obtenemos los 3 vertices del triangulo
Vector3 a = vertices[i * 3];
Vector3 b = vertices[i * 3 + 1];
Vector3 c = vertices[i * 3 + 2];
//Obtener normal del triangulo. El orden influye en si obtenemos el vector normal hacia adentro o hacia afuera del mesh
Vector3 normal = Vector3.Cross(c - a, b - a);
normal.Normalize();
//Crear plano que contiene el triangulo a partir un vertice y la normal
Plane plane = Plane.FromPointNormal(a, normal);
//Calcular el centro del triangulo. Hay muchos tipos de centros para un triangulo (http://www.mathopenref.com/trianglecenters.html)
//Aca calculamos el mas simple
Vector3 center = Vector3.Scale(a + b + c, 1 / 3f);
///////////// Creacion de elementos para poder dibujar a pantalla (propios de este ejemplo) ///////////////
//Crear un quad (pequeño plano) con la clase TgcQuad para poder dibujar el plano que contiene al triangulo
TgcQuad quad = new TgcQuad();
quad.Center = center;
quad.Normal = normal;
quad.Color = adaptColorRandom(Color.DarkGreen);
quad.Size = new Vector2(10, 10);
quad.updateValues();
planes.Add(quad);
//Creamos una flecha con la clase TgcArrow para poder dibujar la normal (la normal la estiramos un poco para que se pueda ver)
normals.Add(TgcArrow.fromDirection(center, Vector3.Scale(normal, 10f)));
//Creamos la clase TgcTriangle que es un helper para dibujar triangulos sueltos
TgcTriangle t = new TgcTriangle();
t.A = a;
t.B = b;
t.C = c;
t.Color = adaptColorRandom(Color.Red);
t.updateValues();
triangles.Add(t);
}
//Modifiers
GuiController.Instance.Modifiers.addBoolean("mesh", "mesh", true);
GuiController.Instance.Modifiers.addBoolean("triangles", "triangles", true);
GuiController.Instance.Modifiers.addBoolean("normals", "normals", true);
GuiController.Instance.Modifiers.addBoolean("planes", "planes", false);
//Camera
GuiController.Instance.RotCamera.Enable = true;
GuiController.Instance.RotCamera.targetObject(mesh.BoundingBox);
}
示例4: computeFromMesh
/// <summary>
/// Crea un BoundingSphere a partir de los vertices de un Mesh, utilizando el algoritmo de Ritter
/// </summary>
/// <param name="mesh">Mesh a partir del cual crear el BoundingSphere</param>
/// <returns>BoundingSphere creado</returns>
public static TgcBoundingSphere computeFromMesh(TgcMesh mesh)
{
Vector3[] vertices = mesh.getVertexPositions();
SphereStruct s = TgcBoundingSphere.computeFromPoints(vertices);
return s.toClass();
}