0

私はA*アルゴリズムに取り組んでおり、パスファインディンググラフのノード、特に出口につながるノードの間に線を引くことができるようにしたいと考えています。私が働いている環境は3Dです。コードに行が表示されない理由がわからなかったので、1行だけをレンダリングするように簡略化しました。今、私は線を見ることができますが、それは世界空間ではなく画面空間にあります。XNAで世界座標に線を引く簡単な方法はありますか?

コードは次のとおりです。

        _lineVtxList = new VertexPositionColor[2];
        _lineListIndices = new short[2];

        _lineListIndices[0] = 0;
        _lineListIndices[1] = 1;
        _lineVtxList[0] = new VertexPositionColor(new Vector3(0, 0, 0), Color.MediumPurple);
        _lineVtxList[1] = new VertexPositionColor(new Vector3(100, 0, 0), Color.MediumPurple);
        numLines = 1;
....
            BasicEffect basicEffect = new BasicEffect(g);
            basicEffect.VertexColorEnabled = true;
            basicEffect.CurrentTechnique.Passes[0].Apply();
            basicEffect.World = Matrix.CreateTranslation(new Vector3(0, 0, 0));
            basicEffect.Projection = projMat;
            basicEffect.View = viewMat;
            if (_lineListIndices != null && _lineVtxList != null)
            {

            //    g.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.LineList, _lineVtxList, 0, 1);

                g.DrawUserIndexedPrimitives<VertexPositionColor>(
                        PrimitiveType.LineList,
                        _lineVtxList,
                        0,  // vertex buffer offset to add to each element of the index buffer
                        _lineVtxList.Length,  // number of vertices in pointList
                        _lineListIndices,  // the index buffer
                        0,          // first index element to read
                        numLines   // number of primitives to draw
                        );
            }

行列projMatとviewMatは、シーン内の他のすべてをレンダリングするために使用するのと同じビューおよび投影行列です。それらをbasicEffectに割り当てるかどうかは問題ではないようです。シーンは次のようになります。

ここに画像の説明を入力してください

4

1 に答える 1

1

開始または終了していないBasicEffectため、プロジェクションとビューのマトリックスはに適用されませんDrawUserIndexedPrimitivesDrawUserIndexedPrimitivesこれであなたの呼び出しを包括してみてください:

if (_lineListIndices != null && _lineVtxList != null)
{
    basicEffect.Begin();
    foreach (EffectPass pass in basicEffect.CurrentTechnique.Passses)
    {
        pass.Begin();
        g.DrawUserIndexedPrimitives<VertexPositionColor>(...); // The way you have it
        pass.End();
    }
    basicEffect.End();
}
于 2013-03-03T23:40:28.373 に答える