zoukankan
html css js c++ java
光线与三角的求交代码
eiBool eiTriangle::intersect(eiRay
*
ray, eiObject
*
po, eiFloat
&
oldt,
eiPrimitive
*
&
ret_pri, eiFloat
*
cust_data, HitParam
*
hparam)
{
if
( clip
==
EI_BSP_PRIMITIVE
&&
( oldt
==
0.0f
||
ray_box( ray
->
src, hparam
->
hitPoint ) )
)
{
//
compute intersecting point
eiFloat vnd
=
dot(normal , ray
->
dir);
if
(ray
->
type
==
RAY_SHADOW)
vnd
=
-
vnd;
if
( vnd
<
0.0f
||
po
->
material
->
doubleSide )
{
eiFloat t,td1,td2,td3;
eiVector tmpIntersection;
if
(ray
->
type
==
RAY_SHADOW)
t
=
( dot( normal , ray
->
src)
+
d )
/
vnd;
else
t
=
-
( dot( normal , ray
->
src)
+
d )
/
vnd;
if
(t
<
0.0f
)
return
false
;
tmpIntersection
=
add(ray
->
src, mulvf(ray
->
dir,t));
//
make sure intersection in bound box
if
(
!
is_pos_in_box(tmpIntersection, box))
return
false
;
//
near and far clipping
if
(ray
->
type
==
RAY_EYE
&&
!
near_far_clip(tmpIntersection))
return
false
;
//
is in triangular area
td1
=
dot(tmpIntersection , la)
+
d1;
if
(td1
<
0.0f
||
td1
>
1.0f
)
return
false
;
td2
=
dot(tmpIntersection , lb)
+
d2;
if
(td2
<
0.0f
||
td2
>
1.0f
)
return
false
;
td3
=
dot(tmpIntersection , lc)
+
d3;
if
(td3
<
0.0f
||
td3
>
1.0f
)
return
false
;
//
affect shadow factor
if
(ray
->
type
==
RAY_SHADOW)
hparam
->
shadow_factor
*=
1.0f
-
po
->
material
->
opacity;
//
find nearest hit point
if
(oldt
==
0.0f
||
t
<
oldt)
{
hparam
->
hitPoint
=
tmpIntersection;
hparam
->
hitObj
=
po;
ret_pri
=
this
;
oldt
=
t;
//
fill custom data
cust_data[
0
]
=
td1;
cust_data[
1
]
=
td2;
cust_data[
2
]
=
td3;
return
true
;
}
}
}
return
false
;
}
查看全文
相关阅读:
SAMBA服务和FTP服务讲解(week3_day1)--技术流ken
Linux网络技术管理及进程管理(week2_day4)--技术流ken
RAID磁盘阵列及CentOS7系统启动流程(week2_day3)--技术流ken
Linux磁盘管理及LVM讲解(week2_day2)--技术流ken
Linux计划任务及压缩归档(week2_day1)--技术流ken
Linux权限管理(week1_day5)--技术流ken
Linux高级命令进阶(week1_day2)--技术流ken
k8s集群监控(十一)--技术流ken
k8s部署使用Dashboard(十)--技术流ken
k8s应用机密信息与配置管理(九)--技术流ken
原文地址:https://www.cnblogs.com/len3d/p/229157.html
最新文章
利用合成数据进行时间序列分类的数据扩充方法
跨领域活动识别的深度迁移学习
基于深度迁移学习进行时间序列分类
Windows下Python 3.6 + VS2017 + Anaconda 解决Unable to find vcvarsall.bat问题
机器学习之逻辑回归(二)
使用YOLOv2进行图像检测
2017回顾
机器学习之逻辑回归
机器学习之决策树算法
网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken
热门文章
MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken
MySQL/MariaDB数据库忘掉密码解决办法--技术流ken
MariaDB Galera集群部署--技术流ken
KVM虚拟化使用详解--技术流ken
进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken
基于CentOS7系统部署cobbler批量安装系统(week3_day5_part1)-技术流ken
云计算OpenStack:云计算介绍及组件安装(一)--技术流ken
Apache web服务器(LAMP架构)(week3_day4)--技术流ken
NTP服务和DNS服务(week3_day3)--技术流ken
NFS服务和DHCP服务讲解(week3_day2)--技术流ken
Copyright © 2011-2022 走看看