zoukankan
html css js c++ java
用汇编语言写的光线追踪核心求交代码
__asm
{
//
dot_nd = - ( normal.x * ray_dir.x + normal.y * ray_dir.y + normal.z * ray_dir.z );
//
optimized version :
//
xmm0 <--------------------------- 0
//
xmm1
//
xmm2
//
xmm3 <--------------------------- ray->src
//
xmm4 <--------------------------- ray->dir
//
xmm5 <--------------------------- dot_nd
//
xmm6 <--------------------------- t
//
xmm7
xorps xmm0, xmm0 ;
mov ebx, dword ptr ray ;
mov edi, dword ptr state ;
mov esi, dword ptr
this
;
movaps xmm3, xmmword ptr [ebx]e_Ray.src ;
movaps xmm4, xmmword ptr [ebx]e_Ray.dir ;
movaps xmm5, xmmword ptr [esi]
this
.normal ;
movaps xmm6, xmm5 ;
prefetchnta
byte
ptr [esi
+
TYPE
this
] ;
movaps xmm7, xmm4 ;
mulps xmm5, xmm7 ;
movhlps xmm7, xmm5 ;
addss xmm7, xmm5 ;
shufps xmm5, xmm5,
1
;
addss xmm7, xmm5 ;
movaps xmm5, xmm0 ;
subss xmm5, xmm7 ;
//
if( dot_nd <= 0.0f )
comiss xmm0, xmm5 ;
movss dword ptr dot_nd, xmm5 ;
//
return false;
jae RETURN_FALSE ;
;
161
: t
=
ray_src.x
*
normal.x
+
ray_src.y
*
normal.y
+
ray_src.z
*
normal.z
+
normal.w;
movaps xmm7, xmm3 ;
mulps xmm7, xmm6 ;
movhlps xmm6, xmm7 ;
addss xmm6, xmm7 ;
shufps xmm7, xmm7,
253
;
addss xmm6, xmm7 ;
movhlps xmm7, xmm7 ;
addss xmm6, xmm7 ;
//
if( t <= t_near * dot_nd )
movss xmm7, dword ptr [ebx]e_Ray.t_near ;
mulss xmm7, xmm5 ;
comiss xmm7, xmm6 ;
movss dword ptr t, xmm6 ;
//
return false;
jae RETURN_FALSE ;
//
t_far = MIN( ray->t_far, state->t );
movss xmm7, dword ptr [edi]e_RayState.t ;
comiss xmm7, dword ptr [ebx]e_Ray.t_far ;
jbe CASE_BELOW ;
movss xmm7, dword ptr [ebx]e_Ray.t_far ;
CASE_BELOW:
//
if( t >= t_far * dot_nd )
mulss xmm7, xmm5 ;
comiss xmm6, xmm7 ;
//
return false;
jae RETURN_FALSE ;
//
hit.arr[ projX ] = ray_src.arr[ projX ] * dot_nd + ray_dir.arr[ projX ] * t;
movzx eax,
byte
ptr [esi]
this
.projX ;
add eax, eax ;
add eax, eax ;
movss xmm1, dword ptr [ebx
+
eax]e_Ray.src ;
movss xmm2, dword ptr [ebx
+
eax]e_Ray.dir ;
mulss xmm1, xmm5 ;
mulss xmm2, xmm6 ;
addss xmm1, xmm2 ;
movss dword ptr [hit
+
eax], xmm1 ;
//
hit.arr[ projY ] = ray_src.arr[ projY ] * dot_nd + ray_dir.arr[ projY ] * t;
movzx ecx,
byte
ptr [esi]
this
.projY ;
add ecx, ecx ;
add ecx, ecx ;
movss xmm1, dword ptr [ebx
+
ecx]e_Ray.src ;
movss xmm2, dword ptr [ebx
+
ecx]e_Ray.dir ;
mulss xmm1, xmm5 ;
mulss xmm2, xmm6 ;
addss xmm1, xmm2 ;
movss dword ptr [hit
+
ecx], xmm1 ;
//
bary.x = hit.arr[ projX ] * la.x + hit.arr[ projY ] * la.y + la.z * dot_nd;
movss xmm7, dword ptr [esi]
this
.la.x ;
mulss xmm7, dword ptr [hit
+
eax] ;
movss xmm1, dword ptr [esi]
this
.la.y ;
mulss xmm1, dword ptr [hit
+
ecx] ;
addss xmm7, xmm1 ;
movss xmm1, dword ptr [esi]
this
.la.z ;
mulss xmm1, xmm5 ;
addss xmm7, xmm1 ;
//
if( bary.x < 0.0f || bary.x > dot_nd )
comiss xmm0, xmm7 ;
ja RETURN_FALSE ;
comiss xmm7, xmm5 ;
ja RETURN_FALSE ;
//
bary.y = hit.arr[ projX ] * lb.x + hit.arr[ projY ] * lb.y + lb.z * dot_nd;
movss xmm2, dword ptr [esi]
this
.lb.x ;
mulss xmm2, dword ptr [hit
+
eax] ;
movss xmm1, dword ptr [esi]
this
.lb.y ;
mulss xmm1, dword ptr [hit
+
ecx] ;
addss xmm2, xmm1 ;
movss xmm1, dword ptr [esi]
this
.lb.z ;
mulss xmm1, xmm5 ;
addss xmm2, xmm1 ;
//
if( bary.y < 0.0f || bary.y > dot_nd )
comiss xmm0, xmm2 ;
ja RETURN_FALSE ;
comiss xmm2, xmm5 ;
ja RETURN_FALSE ;
//
bary.z = dot_nd - bary.x - bary.y;
movaps xmm1, xmm5 ;
subss xmm1, xmm7 ;
subss xmm1, xmm2 ;
//
if( bary.z < 0.0f || bary.z > dot_nd )
comiss xmm0, xmm1 ;
ja RETURN_FALSE ;
comiss xmm1, xmm5 ;
ja RETURN_FALSE ;
movss dword ptr bary.x, xmm7 ;
movss dword ptr bary.y, xmm2 ;
movss dword ptr bary.z, xmm1 ;
}
//
__asm
查看全文
相关阅读:
物联网需要自己的专有操作系统
基于visual Studio2013解决C语言竞赛题之0201温度转换
基于visual Studio2013解决C语言竞赛题之前言
物联网操作系统再思考:建设更加主动的网络,面向连接一切的时代
经典排序算法分析和代码-下篇
Windows XP硬盘安装Ubuntu 12.04双系统图文详解
Eclipse 编码区-保护色-快捷大全
Android最新源码4.3下载-教程 2013-11
Windows XP硬盘安装Ubuntu 12.04双系统图文详解
惠威的M200MK3的前级电子分频板
原文地址:https://www.cnblogs.com/len3d/p/818237.html
最新文章
【Java开发环境配置】安装Navicat for MySQL
MySQL8.0-INFORMATION_SCHEMA增强
MySQL8.0-INFORMATION_SCHEMA增强
Android/IOS 京东手机销售榜(前4名--品牌--型号--分辨率--操作系统--版本号)
Paper Pal:一个中英文论文及其代码大数据搜索平台
京东/淘宝的手机销售榜(前4名 -- 手机品牌 --手机型号*3 --手机分辨率 -- 手机操作系统 --安卓版本号)(android / IOS)
从1G到5G,移动通讯在路上
5G-NR mmW frame structure
示波器分析485波形图
Java Web整合开发(78) -- Struts 1
热门文章
9、ORM框架------SQLAlchemy(1)
Python3学习笔记(urllib模块的使用)
python----1
月份最后一天
谷歌请求头
curl 设置头部
curl post 用json方式
CURL post
cURL介绍
基于visual Studio2013解决C语言竞赛题之0202坐标转换
Copyright © 2011-2022 走看看