一个判断射线和三角形相交的函数
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. 概述 2. 常规算法 2.1. 理论推导 2.2. 具体实现 3. 优化算法 3.1. 理论推导 3.2. 具体实现 4. 参考 1. 概述 任何复杂的三维模型都可以视作空间三角面片的 ...
- 【收藏好文】一文读懂射线与三角形相交算法Moller-Trumbore算法
编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多
- 射线和三角形的相交检测(ray triangle intersection test)
http://www.cnblogs.com/graphics/archive/2010/08/09/1795348.html 本文以Fast, Minimum Storage Ray Triangl ...
- 射线与三角形求交,并判断是否在三角形内的完整代码(带测试)
// Det.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...
- Möller-Trumbore算法-射线三角形相交算法
Möller-Trumbore算法 一.概述 二.准备知识 三.Möller-Trumbore 算法推导 推导过程 四.代码实现 一.概述 Möller-Trumbore 射线三角相交算法是一种快速计 ...
- C语言编程>第二十五周 ③ 下列给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成……
例题:下列给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形:构成的是等边三角形,还是等腰三角形.若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成三角 ...
- 射线和立方体相交的判断
本文主要介绍如何判定一条线和一个立方体相交 1.Slabs的使用(2D的介绍) 2.将Slabs推广到3D 其中只介绍数学相关,代码实现可自行实现 检测物体碰撞的时候,我们通常在物体表面添加包围盒,其 ...
- php计算属相,一个判断干支、属相和星座的php函数
一个判断干支.生肖和星座的php函数 /** * 判断干支.生肖和星座 * @param string $type 返回类型: array. * @param date $birth = 时间戳,其它 ...
- ACMNO.23 C语言-素数判定 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime
题目描述 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息. 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime 样例输入 97 样例输出 prime 来源/ ...
最新文章
- Unknown CMake command add_compile_definitions
- java stack empty_java.util.Stack.empty()方法实例
- 悬浮框_纯HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末有源码)
- Oracle优化01-引起数据库性能问题的因素
- 《响应式web设计》读书笔记(三)拥抱流式布局
- MongoDB的安装与使用
- jtoken判断是否包含键_Redis 数据库、键过期的实现
- 抽象线程之Parallel类
- tp中 M和 D的区别
- .NET导入导出Excel
- python mysql到处excel
- DPDK QOS1 -- Linux HQOS的框架
- VBA 如何多条件查询汇总
- 漫谈程序员系列 薪资 你是我不能言说的伤
- php touppercase strtoupper,php大小写转换函数(strtolower、strtoupper)用法介绍
- 根据需求设计并实现数据库
- No input file specified
- 2.语法特性(组合数据类型)
- 2021泰安市地区高考成绩排名查询,泰安高中学校实力排名,2021年泰安所有的高中分数线排名...
- Linux文件系统从磁盘读页面
热门文章
- 一位资深Java的阿里系公司实战面试经验,套路还是面试官的多
- Redis是如何写代码注释的?
- 入职三天,公司给了100块钱叫我走人
- JVM:堆与栈的比较
- c-nominated = ((rcheck-use_candidate) || c-nominated);
- 【Scratch】青少年蓝桥杯_每日一题_2.17_城堡
- python入门程序异常_Python入门基础(10)_异常_1
- c语言删除s字符串中所有子串t,从串s中删除所有和串t相同的子串的算法
- 数据中心怎么建更科学
- jodd忽略ssl证书_Jodd - Java界的瑞士军刀,无法想象的轻量级工具包