D3DXPlaneIntersectLine()函数的使用说明没看懂

千分散尽还复来 2013-05-15 06:29:51
这个函数的说明是这样的:
D3DXPlaneIntersectLine
Finds the intersection between a plane and a line.
D3DXVECTOR3 * D3DXPlaneIntersectLine(
D3DXVECTOR3 * pOut,
CONST D3DXPLANE * pP,
CONST D3DXVECTOR3 * pV1,
CONST D3DXVECTOR3 * pV2
);
Parameters
pOut
[in, out] Pointer to a D3DXVECTOR3 structure, identifying the intersection between the specified plane and line.
pP
[in] Pointer to the source D3DXPLANE structure.
pV1
[in] Pointer to a source D3DXVECTOR3 structure, defining a line starting point.
pV2
[in] Pointer to a source D3DXVECTOR3 structure, defining a line ending point.
Return Values
Pointer to a D3DXVECTOR3 structure that is the intersection between the specified plane and line.
Remarks
If the line is parallel to the plane, NULL is returned.

这个函数是寻找一条线段(从参数上看,“line”应当理解成“线段”才对吧)和一个平面的交点的,它的返回值是一个指针,它的第一个参数是输出值的指针。
我的问题在最后一行:它说“如果线段与平面平行,函数将返回NULL”,这种情况下输出值是什么?
如果线段与平面不平行,又不相交,输出值pOut又是什么?
我不知道线段是否和平面平行,我该怎样写代码找到如果有交点时交点的坐标?
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2013-05-15
  • 打赏
  • 举报
回复
其实有了说明,有了解释,自己再试试不就都知道了么。
ForestDB 2013-05-15
  • 打赏
  • 举报
回复
注意,这个指针是你传进去的,必须要有所指的(不能是野指针),这个函数负责修改指针指向的内容,而不是指针本身; 所以不存在你所说的,如果D3DXPlaneIntersectLine返回值是NULL,那么函数会将指针置NULL; 而是如果返回值是NULL,out的内容就是错的,没有任何参考意义,那么就不应该去看out的内容。 以上是关于指针的基本知识,所以补补基本。 至于这里的line,个人看的上下文,觉得是“线”而不是“线段”,那两个point,并非“端点”,只是“两点定一线”的两个点而已。
  • 打赏
  • 举报
回复
引用 1 楼 ForestDB 的回复:
我的问题在最后一行:它说“如果线段与平面平行,函数将返回NULL”,这种情况下输出值是什么? // 既然平行,自然没有交点,能有什么输出呢? 如果线段与平面不平行,又不相交,输出值pOut又是什么? // 线段和平面不平行,那么一定相交。
前两行,我是想问,这时的输出值的指针也是NULL吗? 后两行,如果是直线,那么不平行,一定相交,是线段就不一样了。但参数上看应当是线段 。 谢谢回复!
ForestDB 2013-05-15
  • 打赏
  • 举报
回复
pOut [in, out] Pointer to a D3DXVECTOR3 pOut既是入参,也是出参(函数返回值)。 我的问题在最后一行:它说“如果线段与平面平行,函数将返回NULL”,这种情况下输出值是什么? // 既然平行,自然没有交点,能有什么输出呢? 如果线段与平面不平行,又不相交,输出值pOut又是什么? // 线段和平面不平行,那么一定相交。 D3DXPlaneIntersectLine( D3DXVECTOR3 * pOut, CONST D3DXPLANE * pP, CONST D3DXVECTOR3 * pV1, CONST D3DXVECTOR3 * pV2 ); D3DXVECTOR3 out; D3DXPLANE P; D3DXVECTOR3 V1, V2; if (D3DXPlaneIntersectLine(&out, &P, &V1, &V2)) // 有交点 { // out就是交点,对其进行处理 } else // 没有交点 { // 做没有交点的处理 }
  • 打赏
  • 举报
回复
刚刚明白,谢谢!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧