本次作业完成的是通过正交相机投影+ray casting方式渲染,得到一个场景中有若干个球形的图片,并以深度测试后直接显示色彩和简单限制深度后显示两种方式来显示。

目录

原理

结果

github连接


原理

在不考虑二次反射和多次反射的情况下,Ray casting只需要从相机到当前画布的各个像素投射出一条光线,判断光线是否和场景中的各个物体相交,如果相交,比较出距离相机最近的那个物体予以显示即可;如果不相交,则不做任何其他处理。

首先给出场景中包含的各项数据,然后我再一一说明如何处理。

OrthographicCamera {
    center 0 0 10 
    direction 0 0 -1
    up 0.5 1 0
    size 5
}

Background { color 0.2 0.2 0.2 }

Materials {
    numMaterials 3
    PhongMaterial {
    diffuseColor 1 0 0 
    }
    PhongMaterial {
    diffuseColor 0 1 0 
    }
    PhongMaterial {
    diffuseColor 0 0 1
    }
}

Group {
    numObjects 5

MaterialIndex 0
    Sphere {
    center 0 0 0 
        radius 1 
    }

MaterialIndex 1
    Sphere {
    center 1 1 1 
        radius 0.75
    }
    Sphere {
    center -1 -1 1 
        radius 0.75
    }

MaterialIndex 2
    Sphere {
    center -1 1 -1 
        radius 0.75
    }
    Sphere {
    center 1 -1 -1 
        radius 0.75 
    }
}

按照伪代码的顺序,我们首先看如何创建一条从相机(或眼睛)出发的光线。

这里需要区分一个点,相机的size和最终显示图片的尺寸并不相等,二者之间的关系可以理解为原本相机的size经过等比放大可变为最终图片。“For every pixel”是针对照片而言的,但具体发射光线是从相机出发的,从照片的尺寸到相机的尺寸是需要压缩的,故先将此时的坐标(x0,y0)归一化得到(x,y)。又因为camera通过中心坐标以代表相机位置,而(x,y)坐标的起始点(0,0)并不是中心,如下图所示。故,要将归一化的(x,y)变为相机size的“成像面”上的某点,则需要进行下图公式所示的变换:

再来说明一下如何判断光线是否和场景中的物体有交点。这里需要说明一下,此次我仅完成了场景中只有球体的类型,如果要考虑其他几何体,只需根据各自几何体的特征,列出代数式子判断是否相交以及相交需要的时间即可,也可通过几何方式来计算。

这一步的任务其实就是求光线和物体是否能在有效时间相遇,这里只讲代数方法。相遇即代表光线的方程和物体的方程相等有解,那么需要先把这二者表示出来,如下:

令二者相等再求解即可,需要注意的是上图示意的球体的球心在坐标原点,实际上的球体可能在任意位置,则,在实际处理时,我直接将Ro减去了球体的球心。

最终求出来的时间,需大于tmin(tmin是由相机属性决定的,对于正交相机认为光线起源于无限远的地方,故tmin最开始为-inf),若有两个物体都相交,则要选择距离相机更近的,即t更小的那个。

对于深度图可以将其颜色按照灰度图来理解,颜色分布在[0,1],大于depth_max的深度限制为depth_max,小于depth_min的限制为depth_min,最终深度为

结果

github连接

Graphics-6.837/assignment 1 at main · A-pril/Graphics-6.837 · GitHub

Ray Casting:光线投射相关推荐

  1. Ray Tracing,Ray Casting,Path Tracing,Ray Marching 的区别?

    作者:洛城 链接:https://www.zhihu.com/question/29863225/answer/70728387 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  2. 3.2.1 体渲染之Ray Casting

    基本概念 光线投射方法是基于图像序列的直接体绘制算法.从图像的每一个像素,沿固定方向(通常是视线方向)发射一条光线,光线穿越整个图像序列,并在这个过程中,对图像序列进行采样获取颜色信息,同时依据光线吸 ...

  3. 体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...

    转自:http://blog.csdn.net/liu_lin_xm/article/details/4850630 摘抄"GPU Programming And Cg Language P ...

  4. 论文中看到的光线投影法(ray casting)是什么?

    首先,这东西是干嘛用的? 答:如下所示. 输入3D的TSDF模型-->光线投影法-->输出2D图像. 当机器人站在某个视角下"看"TSDF模型(3D),如何从TSDF模 ...

  5. VTK实现电影级渲染效果(CVR)

    目前vtk9.2.2版本中已经集成了ray marching(光线步进)算法实现的体渲染功能,官方博客中已经介绍为电影级体渲染了,如图: 此效果是在3d显示器上的显示效果,就此效果来看说是电影级渲染效 ...

  6. GAMES101-现代计算机图形学入门09(光线追踪)

    基本光线跟踪算法 光线定义 首先先要对光线定义 ●光沿直线传播: ●不发生碰撞: ●是从光源到人眼的--对于第三个性质,我们在根据光路可逆性,会采取从人眼到光源的方法 光线追踪是从人的眼睛(摄像机)出 ...

  7. 光线投射与光线跟踪算法归纳

    目录 前言 三维可视化与体绘制 Ray Tracing vs. Ray Casting 体绘制的加速技术 基于CUDA实现Ray-Casting 后话 参考文献 1.       前言 在读了大牛们的 ...

  8. 图形学笔记(十一)光线追踪——Shadow Mapping、光线追踪、光线投射、软硬阴影、光线与物体交点、AABB包围盒

    图形学笔记(十)几何2 -- 曲面细分(Loop细分.Catmull-Clark细分).曲面简化(边坍缩.二次度量误差).曲面正则化 图形学笔记(十二)光线追踪2--使用AABB包围盒加速光线追踪.空 ...

  9. Ray Tracing in One Weekend 读书笔记

    目录 第0章 概述 第1章 输出照片 第2章 vec3类 第3章 光线.一个简单的相机和背景 第4章 增加一个球 第5章 表面法向量和多物体 第6章 抗锯齿 第7章 漫反射材质 第8章 金属 第9章 ...

最新文章

  1. vue仿今日头条_vue2.0仿今日头条开源项目
  2. 利用单臂路由实现VLAN间路由
  3. 3.7.4 - Indexing and Slicing Strings
  4. 南山科技园的IDC机房怎么样?
  5. ZigBee-CC2530单片机 - LED呼吸灯
  6. Emmagee源码学习
  7. visio中的公式在转换pdf后公式糊掉;word导出pdf时visio丢失模块字体
  8. 文件夹自动生成目录树(批处理)
  9. QCC3040---Log module
  10. 谷歌发布深度学习Efficient Net新架构,各方面表现全面碾压卷积神经网络
  11. WiFi、GNSS定位服务实战-OneOS位置服务组件(文末有礼品)
  12. idea导入项目后简体字变繁体字
  13. 【好书推荐】芯片产业科普书籍:《芯事》
  14. 拿到FaceBook注册用户的手机号有多简单?看这篇文章就够了。
  15. C语言 经典例题 无重复三位数
  16. 为你的项目搭建sentry并且通过企微推送
  17. vue canvas手绘签名
  18. Office Excel VBA遇到的坑
  19. 笔记本重新启动计算机,重装笔记本win7系统提示"计算机意外的重新启动或遇到错误"怎么办...
  20. SPI硬件电路设计,SPI协议

热门文章

  1. CSS cascading style sheet
  2. 山东师范大学计算机专硕考研人数,考研高校就业和薪酬数据统计:山东师范大学...
  3. linux 下 任务管理器,Linux/Unix下的任务管理器-top命令
  4. GhostNet代码解析
  5. npm install安装时卡在sill idealTree buildDeps,npm安装速度慢,npm安装卡在一个地方不动,npm遇到ssl问题,An unknown git error occu
  6. Android am与pm命令详解
  7. STM32学习笔记(9)——(I2C续)读写EEPROM
  8. K-means算法分析,案例(大数据的用户分组召回)
  9. MapReduce框架
  10. 百度ApolloScape Dataset 用于目标检测任务