SharpGL (OpenGL ライブラリを使用できる Visual Studio 2013 の拡張機能) で 3D ビジュアライゼーションを作成しています。四面体を可視化したい。多くのポイントから作成する必要があります。アプリケーションの開始時にユーザーがベクトルの合計を定義します。各頂点の座標を含む辞書があり、これらの 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 は 1 次元をカットし、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