计算机图形学——光线追踪

计算机图形学——光线追踪

实验内容: 使用光线追踪进行场景渲染。
实验效果:
     

1、简介

     光线跟踪(ray tracing)是一个在二维(2D)屏幕上呈现三维(3D)图像的方法。 从摄影机的位置,通过影像平面上的像素位置(比较正确的说法是取样(sampling)位置),发射一束光线到场景,求光线和几何图形间最近的交点,再求该交点的著色。如果该交点的材质是反射性的,可以在该交点向反射方向继续追踪。光线追踪除了容易支持一些全局光照效果外,亦不局限于三角形作为几何图形的单位。任何几何图形,能与一束光线计算交点(intersection point),就能支持。
     要计算一点是否在阴影之内,也只须发射一束光线到光源,检测中间有没有障碍物而已。不过光源和阴影留待下回分解,如下图:

2、光线

所谓光线(ray),从一点向某方向发射也。数学上可用参数函数(parametric function)表示:

当中,o即发谢起点(origin),d为方向。

在C++中定义光线struct

#ifndef _Ray3_h_
#define _Ray3_h_

#include "Vector3.h"

struct Ray3 {
	Vector3 origin;
	Vector3 direction;

	inline Ray3(const Ray3& r):origin(r.origin),direction(r.direction){}
	inline Ray3(const Vector3& _origin,const Vector3& _direction):origin(_origin),direction(_direction){}
	inline Vector3 getPoint(float t)const{ return origin.add(direction.multiply(t)); }
};

#endif

3、球体

       球体(sphere)是其中一个最简单的立体几何图形。这里只考虑球体的表面(surface),中心点为c、半径为r的球体表面可用等式(equation)表示:

       如前文所述,需要计算光线和球体的最近交点。只要把光线x = r(t)代入球体等式,把该等式求解就是交点。为简化方程,设v=o - c,则:

      因为d为

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄鸭and小黑鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值