自定义三角形类,调用值
本文关键字:调用 三角形 自定义 | 更新日期: 2023-09-27 18:02:41
我试图创建一个自定义类来保存三个顶点位置,定义一个三角形来绘制和细分。我遇到的问题是如何确保我返回正确的值。
这是我目前得到的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Icosahedron_Test
{
class TriXYZ
{
Vector3 vertex1;
Vector3 vertex2;
Vector3 vertex3;
int depth;
float material; // float because the material can be part grass / part dirt or part sand / part rock, etc... for blending
public TriXYZ(Vector3 pos1, Vector3 pos2, Vector3 pos3, int tDepth)
{
vertex1 = pos1;
vertex2 = pos2;
vertex3 = pos3;
depth = tDepth;
}
public TriXYZ(Vector3 pos1, Vector3 pos2, Vector3 pos3, int tDepth, float tMaterial)
{
vertex1 = pos1;
vertex2 = pos2;
vertex3 = pos3;
depth = tDepth;
material = tMaterial;
}
public Vector3 Vertex1(TriXYZ triangle)
{
return vertex1;
}
public Vector3 Vertex2(TriXYZ triangle)
{
return vertex2;
}
public Vector3 Vertex3(TriXYZ triangle)
{
return vertex3;
}
public int Depth(TriXYZ triangle)
{
return depth;
}
public Vector3 Midpoint(Vector3 pos1, Vector3 pos2, int tDepth)
{
Vector3 midpoint; // returned midpoint between the two inputted vectors
//PLACEHOLDER
return midpoint;
}
}
}
我创建一个新的三角形元素,像这样:
new TriXYZ(pos1, pos2, pos3, depth); // the depth will deal with LOD later on
因此,为了获得顶点位置的值,我这样调用类:
vertex1 = TriXYZ.Vertex1(verticiesList[listPos]);
我的问题是,我不确定它是否工作,我不完全确定如何在这一点上检查它,因为这里没有足够的实际使程序运行。这背后的理论似乎行得通吗?
另外,作为旁注,我是一个业余程序员,所以如果有任何明显的问题,违反编码标准,请随时指出给我^^
我假设你想要的是这些顶点变量的getter。
这是因为您不应该尝试使这些函数静态(从您试图调用它们的方式来看),而是执行以下操作:
public Vector3 Vertex1()
{
return vertex1;
}
public Vector3 Vertex2()
{
return vertex2;
}
public Vector3 Vertex3()
{
return vertex3;
}
如果你真正想要的是getter,那么我建议使用一个更明确的名称,比如GetVertex1
,或者更好的是,把它作为属性,像这样:
public Vector3 Vertex1 { get; private set; }
那么,属性到底是什么?它只是一种更好的获取或设置数据的方式。
这里,我们指定public
为顶点的访问级别,这样Vertex1
就可以被公开访问(你可以获取类外顶点的值)。像这样:
Vector3 vertex = triangle.Vertex1;
在这种特殊情况下,您可能希望也可能不希望类外的其他人更改顶点。如果你不想让他们改变它,你可以指定属性的setter为private
,这样你只能在类中改变Vertex1
的值。
你可以这样使用:
TriXYZ myTriangle = new TriXYZ(pos1, pos2, pos3, depth);
Vector3 vertex1 = myTriangle.Vertex1;
试着看看这个c#源文件。它在做你想做的事情