Я создаю 3d визуализацию в SharpGL (расширение для Visual Studio 2013, где мы можем использовать библиотеку OpenGL).Я хочу визуализировать тетраэдр.Его нужно создавать из множества точек - пользователь при запуске приложения определяет сумму векторов.У меня есть словарь с координатами для каждой вершины, который я вычисляю в этих 2 классах:
public class Matrix4
{
private List<Tuple<int, int, int, int>> set = new List<Tuple<int, int, int, int>>();
public Matrix4()
{
}
public Matrix4(int vectorSum)
{
set = GiveMatrix4(vectorSum);
}
public List<Tuple<int, int, int, int>> GiveMatrix4(int vectorSum)
{
List<Tuple<int, int, int, int>> set1 = new List<Tuple<int, int, int, int>>();
for (int i = 0; i <= vectorSum; i++)
{
for (int j = 0; j <= vectorSum; j++)
{
for (int k = 0; k <= vectorSum; k++)
{
for (int l = 0; l <= vectorSum; l++)
{
Tuple<int, int, int, int> vector = new Tuple<int, int, int, int>(i, j, k, l);
if (AddValuesFromVector4(vector) == vectorSum)
{
set1.Add(vector);
continue;
}
}
}
}
}
return set1;
}
public int AddValuesFromVector4(Tuple<int,int,int,int> vector)
{
int sum = 0;
sum = vector.Item1 + vector.Item2 + vector.Item3 + vector.Item4;
return sum;
}
public List<Tuple<int, int, int, int>> Matrix4Set
{
get { return set; }
}
}
Класс Matrix3 отсекает одно измерение, и у меня есть векторы с 3 координатами:
public class Matrix3
{
private Matrix4 matrix4;
private Dictionary<Tuple<int, int, int, int>, Tuple<int, int, int>> pairs = new Dictionary<Tuple<int, int, int, int>, Tuple<int, int, int>>();
private int vectorSum;
public Matrix3()
{
}
public Matrix3(int vectorSum)
{
this.vectorSum = vectorSum;
matrix4 = new Matrix4(vectorSum);
pairs = CreateMatrix3(matrix4.Matrix4Set);
}
public int VectorSum
{
get { return vectorSum; }
}
public Dictionary<Tuple<int, int, int, int>, Tuple<int, int, int>> CreateMatrix3(List<Tuple<int, int, int, int>> set)
{
Tuple<int, int, int> vector;
Dictionary<Tuple<int, int, int, int>, Tuple<int, int, int>> pair = new Dictionary<Tuple<int, int, int, int>, Tuple<int, int, int>>();
foreach (var item in set)
{
vector = new Tuple<int, int, int>(item.Item1 - item.Item2 - item.Item3 + item.Item4, item.Item1 + item.Item2 - item.Item3 - item.Item4, item.Item1 - item.Item2 + item.Item3 - item.Item4);
pair.Add(item, vector);
}
return pair;
}
public int Sum(Tuple<int, int, int> vector)
{
int suma = 0;
suma = (int)(vector.Item1 + vector.Item2 + vector.Item3);
return suma;
}
public Dictionary<Tuple<int, int, int, int>, Tuple<int, int, int>> Pairs
{
get { return pairs; }
}
public Matrix4 Matrix4
{
get { return matrix4; }
}
}
Послечто я хочу создать точки / сферы из своего словаря, который я храню в классе Matrix3:
gl.Begin(OpenGL.GL_POINTS);
gl.PointSize(10.0f);
foreach (var item in matrix3.Pairs.Values)
{
gl.Vertex((float)item.Item1, (float)item.Item2, (float)item.Item3);
}
К сожалению, это не работает, я ничего не вижу на экране.Любые предложения будут очень признательны.После создания каждой точки / сферы мне нужно повернуть их и прикрепить к каждому отдельному цвету на основе мер, которые я вычислю в других классах (но это следующий шаг, прежде всего я хочу отобразить эти точки / сферы и повернуть их).
Я совершенно новичок в OpenGl, поэтому я ищу любые образцы.
Ссылка на весь проект и экран, который я хочу получить: https://drive.google.com/file/d/1IDwl46rdRa9IYxq7w8ZkF4LCeAsUH0mU/view?usp=sharing