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
;
}
查看全文
相关阅读:
eclipse maven Errors while generating javadoc on java8
log4j升级到logback
httpclient新旧版本分割点4.3
javadoc中{@link}与@see的简单使用以及区别
maven-shade-plugin插件
jar中META-INF
dubbo环境搭建与tomcat集成、DEMO示例、常见问题(最完整版本、带管理控制台、监控中心、zookeeper)
叶亚明:合格CTO的六要素(转)
rocketmq安装与基本操作
当我们在谈论技术时,技术的本质和价值究竟是什么?
原文地址:https://www.cnblogs.com/len3d/p/202305.html
最新文章
Dive into python 实例学python (1) —— 函数和测试
有关开发效率和协作的几点
Building a RESTful Web Service Using Spring Boot In Eclipse
使用javap反编译class文件
jackson/fastjson、mybatis、mysql date/datatime/timestamp、java Date/Timestamp关系详解
Lyft高管的技术团队管理实战
dubbo rpc调用抛出的Exception处理
spring @Value注解#和$区别
mybatis generator 生成中文注释
dell win 10笔记本关闭多媒体键,启用功能键的快捷方式
热门文章
eclispe设置workspace text file encoding
dubbo spring pom文件报错:提示no declaration can be found for element 'dubbo:service'.
maven单元测试报java.lang.IllegalStateException: Failed to load ApplicationContext
hibernate validator自定义校验注解以及基于服务(服务组)的校验
比beanutil更加灵活的dto转换工具dozer
java泛型中<?>和<T>区别
真正优秀的领导者,无非是做好这2件事
rocketmq消息重复推送的问题
Kafka、RabbitMQ、RocketMQ、ActiveMQ消息中间件的对比--多年生产经验实践总结
rocketmq连接报connect to ip:10909 failed
Copyright © 2011-2022 走看看