zoukankan
html css js c++ java
光线与球的求交代码
//
-------------------------------------------------------------------------
eiBool eiSphere::intersect(eiRay
*
ray, eiObject
*
po, eiFloat
&
oldt,
eiPrimitive
* &
ret_pri, eiFloat
*
cust_data,
HitParam
*
hparam)
{
if
( oldt
==
0.0f
||
ray_box( ray
->
src, hparam
->
hitPoint )
{
//
compute intersecting point
eiVector oc
=
add( ray
->
src,
-
center );
eiFloat oc_len
=
dist( oc );
if
( oc_len
>
radius
||
po
->
material
->
doubleSide )
{
eiFloat a
=
dot( ray
->
dir, ray
->
dir );
eiFloat b
=
2.0f
*
dot( oc, ray
->
dir);
eiFloat c
=
dot( oc, oc )
-
RR;
eiFloat dt
=
b
*
b
-
4.0f
*
a
*
c;
eiFloat t;
if
(a
==
0.0f
||
dt
<
0.0f
)
return
false
;
else
if
(dt
==
0.0f
)
{
t
=
-
b
/
a
*
0.5f
;
if
(t
<
0.0f
)
return
false
;
}
else
{
a
=
0.5f
/
a;
eiFloat t1
=
(
-
b
+
sqrtf( dt ))
*
a;
eiFloat t2
=
(
-
b
-
sqrtf( dt ))
*
a;
if
(t1
>
0.0f
&&
t2
<
0.0f
)
t
=
t1;
else
if
(t1
<
0.0f
&&
t2
>
0.0f
)
t
=
t2;
else
if
(t1
>
0.0f
&&
t2
>
0.0f
)
t
=
(t1
<
t2)
?
t1 : t2;
else
return
false
;
}
eiVector tmpIntersection
=
add(ray
->
src, mulvf(ray
->
dir,t));
//
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
return
true
;
}
}
}
return
false
;
}
查看全文
相关阅读:
wx-charts 微信小程序图表 -- radarChart C# .net .ashx 测试
C# dev SearchLookUpEdit 和 RepositoryItemSearchLookUpEdit 测试
C# Dev XtraReport 简单测试
SQL查询,关联查询的区别 (LEFT JOIN 、LEFT OUTER JOIN、INNER JOIN)
NPOI 读取Excel文件
C# 截屏
C# 程序运行进度显示Lable
gridcontrol 添加行删除行
C# 任务 数据加载不影响其他操作
ChartControl ViewType.Pie3D 用法测试
原文地址:https://www.cnblogs.com/len3d/p/202305.html
最新文章
【javascript】javascript常见正则表达式实例
linux命令-每天一点进步
asp.net core 2.0 cookie的使用
asp.net core session的使用
手把手教你搭建Docker私有仓库
使用docker部署Asp.net core web应用程序
centos7 docker安装和使用_入门教程
asp.net core服务的生命周期
asp.net core 内置DI容器的一点小理解
c# 对字符串反序列成匿名对象
热门文章
asp.net 判断日期是否为空
多态(1)—— 多态的定义、多态的三个必要条件、静态联编和动态联编、虚析构函数、重载重写重定义
继承和派生 —— 类与类之间的关系、继承的基本概念、继承的方式、继承中的构造和析构
类和对象(17)—— 操作符重载
类和对象(16)—— 友元
类和对象(15)——强化练习(2)自定义的数组类
类和对象(13)—— 全局函数与成员函数
类和对象(12)—— this指针
类和对象(11)—— 编译器对属性和方法的处理机制
类和对象(10)—— 静态成员变量和静态成员函数
Copyright © 2011-2022 走看看