OpenGLでコーンを描画する方法を示すオンラインが見つかった。これはhereである。これはC++で書かれているので、C#に変換した。OpenGLコーン関数が正しく描画されない
public void RenderCone(Vector3 d, Vector3 a, float h, float rd, int n)
{
Vector3 c = new Vector3(a + (-d * h));
Vector3 e0 = Perp(d);
Vector3 e1 = Vector3.Cross(e0, d);
float angInc = (float)(360.0/n * GrimoireMath.Pi/180);
// calculate points around directrix
List<Vector3> pts = new List<Vector3>();
for (int i = 0; i < n; ++i)
{
float rad = angInc * i;
Vector3 p = c + (((e0 * (float)Math.Cos((rad)) + (e1 * (float)Math.Sin(rad))) * rd));
pts.Add(p);
}
// draw cone top
GL.Begin(PrimitiveType.TriangleFan);
GL.Vertex3(a);
for (int i = 0; i < n; ++i)
{
GL.Vertex3(pts[i]);
}
GL.End();
// draw cone bottom
GL.Begin(PrimitiveType.TriangleFan);
GL.Vertex3(c);
for (int i = n - 1; i >= 0; --i)
{
GL.Vertex3(pts[i]);
}
GL.End();
}
public Vector3 Perp(Vector3 v)
{
float min = Math.Abs(v.X);
Vector3 cardinalAxis = new Vector3(1, 0, 0);
if (Math.Abs(v.Y) < min)
{
min = Math.Abs(v.Y);
cardinalAxis = new Vector3(0, 1, 0);
}
if (Math.Abs(v.Z) < min)
{
cardinalAxis = new Vector3(0, 0, 1);
}
return Vector3.Cross(v, cardinalAxis);
}
私は私が正しくパラメータを使用していますを考える(実際の関数の使用の点では正確にコヒーレントページイマイチ):ここでは、新しいコードです。ここでは、元の作成者が供給伝説です:
は、しかし、私は、パラメータとして以下に入力したとき:
RenderCone(new Vector3(0.0f, 1.0f, 0.0f), new Vector3(1.0f, 1.0f, 1.0f), 20.0f, 10.0f, 8);
私は(ワイヤーフレームが有効になって)これを受け取る:
ご覧のとおり、私はスライスを最初からやってのけています。誰もがこのメソッドの何が間違っているか知っていますか?それとも不完全な円錐の原因になると私が間違っていることができますか?
私は文字通りそのことに気付きました。 = P – Krythic
線の代わりに三角形を描きたい場合は、topにも同じ接続が必要です。 –
私はワイヤフレームでレンダリングしていましたが、私はまだそれを理解しようとしています。 – Krythic