刚开始学托管DirectX不久,在拾取问题上被难住了。查了下资料,基本原理还是比较清楚了,但是我怎么定义一个射线呢,又使用什么方法来判断Mesh与射线相交呢?

解决方案 »

  1.   

    问题基本已经解决,这个程序是根据微软的例子改出来的,和网上一些相关的代码基本都是一样。但是出现了拾取不精确乃至错误的问题,跟踪调试后发现Unproject以后点的坐标偏小,可能是矩阵计算的问题,大家有什么建议就说说哈,再过两天就散分,回贴就散       private void DoPicking(int mouseX, int mouseY)
            {
                // 将鼠标坐标转换成Vector3,定义拾取所用的射线
                Vector3 near = new Vector3((float)mouseX, (float)mouseY, 0);
                Vector3 far = new Vector3((float)mouseX, (float)mouseY, 1);            // 将射线坐标转换至世界坐标系
                near.Unproject(device.Viewport, device.Transform.Projection, device.Transform.View, device.Transform.World);
                far.Unproject(device.Viewport, device.Transform.Projection, device.Transform.View, device.Transform.World);            // 判断射线与Mesh是否相交
                if (mesh.Intersect(near, far))
                {
                    messageBox.Show("已选中");
                }
            }