1

3D デバイス

上の写真では、私のアプリケーションの一部を見ることができます。さまざまな値でファイルをロードし、その後それらを解析します。次に、Lab 色空間を示す 3D 座標系を描画します。各球を描画するには、Mesh - 関数を使用します。

/// <summary>
/// Vertex für die Kugel
/// </summary>
struct Vertex
{
    public float x, y, z; // Position of vertex in 3D space
    public int color;     // Diffuse color of vertex

    /// <summary>
    /// Konstruktor der Vertex
    /// </summary>
    /// <param name="_x">X(A) - Position</param>
    /// <param name="_y">Y(L) - Position</param>
    /// <param name="_z">Z(B) - Position</param>
    /// <param name="_color">Die Farbe</param>
    public Vertex(float _x, float _y, float _z, int _color)
    {
        x = _x; y = _y; z = _z;
        color = _color;
    }

    // Das Format des Vertex
    public static readonly VertexFormats FVF_Flags = VertexFormats.Position | VertexFormats.Diffuse;
}

/// <summary>
/// Erstellt das Mesh
/// </summary>
/// <param name="device">Das 3D Device</param>
/// <param name="color">Die Farbe der Kugel</param>
/// <param name="labValues">Die Lab Werte der Kugel</param>
public void createMesh(Device device, Color color, params float[] labValues)
{
    // Erstellt die Kugel mit der Anbindung an das Device
    mesh = Mesh.Sphere(device, radius, slices, stacks);
    // Kopiert das Mesh zum Erstellen des VertexArrays
    Mesh tempMesh = mesh.Clone(mesh.Options.Value, Vertex.FVF_Flags, device);
    // Erstellt den VertexArray
    Vertex[] vertData = (Vertex[])tempMesh.VertexBuffer.Lock(0, typeof(Vertex), LockFlags.None, tempMesh.NumberVertices);

    // Weist jedem Vertex die Farbe und die Position zu
    for (int i = 0; i < vertData.Length; ++i)
    {
        vertData[i].color = color.ToArgb();
        vertData[i].x += labValues[1];
        vertData[i].y += labValues[0] - 50f;
        vertData[i].z += labValues[2];
    }

    // Gibt den VertexBuffer in der Kopie frei
    tempMesh.VertexBuffer.Unlock();
    // Löscht den Mesh aus dem Speicher
    mesh.Dispose();
    // Legt die Kopie in der Meshinstanz ab
    mesh = tempMesh;
}

機能の 1 つは、デバイスをズームすることです。ここで、球体ごとにクリック イベントを追加して、情報を表示したいと考えています。しかし、このイベントを実装する方法がわかりません。球体オブジェクトはイベントをサポートしていません。

ご協力ありがとうございました!!

4

2 に答える 2

1

クリックのハンドラーがない場合は可能だとは思いませんが、代わりに、ある種の透明なオーバーレイパネルを使用してクリックイベントをトリガーし、クリック時にマウスの x 位置と y 位置を取得し、下にあるパネルから球体を見つけようとすると、その球体から情報を読み込んで表示できます。

単なる提案であり、代替ソリューションの会話を開始する

于 2013-03-05T12:05:37.173 に答える
0

ソリューション:

ピッキングチュートリアル

于 2013-03-05T13:41:54.227 に答える