Code
 1 //-----------------------------------------------
 2 //-----------检测三角形和射线的相交性---------
 3 bool CDirectXApp::Intersect(const D3DXVECTOR3& v0, const D3DXVECTOR3& v1, const D3DXVECTOR3& v2,
 4                const D3DXVECTOR3& orgin, const D3DXVECTOR3& vec, float& u, float& v, float& t)
 5 {
 6     //判断是否为三角形并且方向向量
 7     assert(vec != D3DXVECTOR3(0,0,0) &&
 8         v0  != v1 && v1 != v2 && v0 != v2);
 9     D3DXVECTOR3 m = v0 - v2;
10     D3DXVECTOR3 n = v1 - v2;
11     D3DXVECTOR3 negativeVec  = -vec;
12     D3DXVECTOR3 tempVec;
13     D3DXVec3Cross(&tempVec, &n, &negativeVec);
14     //det 为克莱姆法则求未知数的分母
15     float det = D3DXVec3Dot(&tempVec, &m);
16 
17     if (det < 1e-6f)
18     {
19         return false;
20     }
21 
22     D3DXVECTOR3 VtoOrigin = orgin - v2;
23     float uB = D3DXVec3Dot(&tempVec, &VtoOrigin);
24     u = uB / det;
25     if (u<0 || u>1 )
26     {
27         return false;
28     }
29 
30     D3DXVec3Cross(&tempVec, &VtoOrigin, &negativeVec);
31     float vB = D3DXVec3Dot(&m, &tempVec);
32     v = vB / det;
33     if (v<0 || u+v>1)
34     {
35         return false;
36     }
37 
38     D3DXVec3Cross(&tempVec, &n, &VtoOrigin);
39     float tB = D3DXVec3Dot(&m, &tempVec);
40     t = tB / det;
41     return true;

转载于:https://www.cnblogs.com/ttthink/archive/2009/09/23/1572936.html

一个判断射线和三角形相交的函数相关推荐

  1. 空间射线与三角形相交算法的两种实现

    文章目录 1. 概述 2. 常规算法 2.1. 理论推导 2.2. 具体实现 3. 优化算法 3.1. 理论推导 3.2. 具体实现 4. 参考 1. 概述 任何复杂的三维模型都可以视作空间三角面片的 ...

  2. 【收藏好文】一文读懂射线与三角形相交算法Moller-Trumbore算法

    编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多

  3. 射线和三角形的相交检测(ray triangle intersection test)

    http://www.cnblogs.com/graphics/archive/2010/08/09/1795348.html 本文以Fast, Minimum Storage Ray Triangl ...

  4. 射线与三角形求交,并判断是否在三角形内的完整代码(带测试)

    // Det.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...

  5. Möller-Trumbore算法-射线三角形相交算法

    Möller-Trumbore算法 一.概述 二.准备知识 三.Möller-Trumbore 算法推导 推导过程 四.代码实现 一.概述 Möller-Trumbore 射线三角相交算法是一种快速计 ...

  6. C语言编程>第二十五周 ③ 下列给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成……

    例题:下列给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形:构成的是等边三角形,还是等腰三角形.若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成三角 ...

  7. 射线和立方体相交的判断

    本文主要介绍如何判定一条线和一个立方体相交 1.Slabs的使用(2D的介绍) 2.将Slabs推广到3D 其中只介绍数学相关,代码实现可自行实现 检测物体碰撞的时候,我们通常在物体表面添加包围盒,其 ...

  8. php计算属相,一个判断干支、属相和星座的php函数

    一个判断干支.生肖和星座的php函数 /** * 判断干支.生肖和星座 * @param string $type 返回类型: array. * @param date $birth = 时间戳,其它 ...

  9. ACMNO.23 C语言-素数判定 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime

    题目描述 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息. 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime 样例输入 97 样例输出 prime 来源/ ...

最新文章

  1. Unknown CMake command add_compile_definitions
  2. java stack empty_java.util.Stack.empty()方法实例
  3. 悬浮框_纯HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末有源码)
  4. Oracle优化01-引起数据库性能问题的因素
  5. 《响应式web设计》读书笔记(三)拥抱流式布局
  6. MongoDB的安装与使用
  7. jtoken判断是否包含键_Redis 数据库、键过期的实现
  8. 抽象线程之Parallel类
  9. tp中  M和 D的区别
  10. .NET导入导出Excel
  11. python mysql到处excel
  12. DPDK QOS1 -- Linux HQOS的框架
  13. VBA 如何多条件查询汇总
  14. 漫谈程序员系列 薪资 你是我不能言说的伤
  15. php touppercase strtoupper,php大小写转换函数(strtolower、strtoupper)用法介绍
  16. 根据需求设计并实现数据库
  17. No input file specified
  18. 2.语法特性(组合数据类型)
  19. 2021泰安市地区高考成绩排名查询,泰安高中学校实力排名,2021年泰安所有的高中分数线排名...
  20. Linux文件系统从磁盘读页面

热门文章

  1. 一位资深Java的阿里系公司实战面试经验,套路还是面试官的多
  2. Redis是如何写代码注释的?
  3. 入职三天,公司给了100块钱叫我走人
  4. JVM:堆与栈的比较
  5. c-nominated = ((rcheck-use_candidate) || c-nominated);
  6. 【Scratch】青少年蓝桥杯_每日一题_2.17_城堡
  7. python入门程序异常_Python入门基础(10)_异常_1
  8. c语言删除s字符串中所有子串t,从串s中删除所有和串t相同的子串的算法
  9. 数据中心怎么建更科学
  10. jodd忽略ssl证书_Jodd - Java界的瑞士军刀,无法想象的轻量级工具包