I'm creating a 3d visualization in SharpGL (extension for Visual Studio 2013 where we can use OpenGL library). I want to visualize tetrahedron. It needs to be created from many points - user at the start of application defines the sum of vectors. I have a dictionary with coordinates for each vertex, which I calculate in those 2 classes:
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; }
}
}
Class Matrix3 cuts one dimension and I have vectors with 3 coordinates:
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; }
}
}
After that I want to create points/spheres from my dictionary, which I keep in Matrix3 class:
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);
}
Unfortunately, it doesn't work, I don't see anything on the screen. Any suggestions would be very appreciated. After creating every point/sphere i need to rotate them and attach to each one different color based on measures which I will calculate in other classes (but that's the next step, first of all I want to display those points/spheres and rotate them).
I'm completely new to OpenGl, that's why I'm looking for any samples.
Link to whole project and screen what I want to obtain: https://drive.google.com/file/d/1IDwl46rdRa9IYxq7w8ZkF4LCeAsUH0mU/view?usp=sharing