私は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に割り当てるかどうかは問題ではないようです。シーンは次のようになります。