自定义三角形类,调用值

本文关键字:调用 三角形 自定义 | 更新日期: 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;

在这种特殊情况下,您可能希望也可能不希望类外的其他人更改顶点。如果你不想让他们改变它,你可以指定属性的setterprivate,这样你只能在类中改变Vertex1的值。

你可以这样使用:

TriXYZ myTriangle = new TriXYZ(pos1, pos2, pos3, depth);
Vector3 vertex1 = myTriangle.Vertex1;

试着看看这个c#源文件。它在做你想做的事情