【发布时间】:2011-08-22 02:16:04
【问题描述】:
我正在写一个光线追踪器(主要是为了好玩),虽然我过去写过一个,并且花了相当多的时间搜索,但似乎没有教程能阐明计算眼睛光线的方法透视投影,不使用矩阵。
我相信我最后一次这样做是(可能)使用Quaternion 类从相机方向向量中低效地旋转眼睛向量x/y 度数。这是用 C++ 编写的,我正在用 C# 编写这个,尽管这并不重要。
伪代码(假设 V * Q = 变换操作)
yDiv = fovy / height
xDiv = fovx / width
for x = 0 to width
for y = 0 to height
xAng = (x / 2 - width) * xDiv
yAng = (y / 2 - height) * yDiv
Q1 = up vector, xAng
Q2 = camera right vector, yAng
Q3 = mult(Q1, Q2)
pixelRay = transform(Q3, camera direction)
raytrace pixelRay
next
next
我认为实际问题在于它模拟的是球形屏幕表面,而不是平面屏幕表面。
请注意,虽然我知道如何以及为什么要使用叉积、点积、矩阵等,但我实际的 3D 数学问题解决能力并不出色。
所以给定:
- 相机位置、方向和向上矢量
- 视野
- 屏幕像素和/或子采样分区
为光线追踪器生成 x/y 像素坐标的眼睛光线的实际方法是什么?
澄清一下:我正是我要计算的内容,我只是不擅长提出 3D 数学来计算它,而且我发现似乎没有光线追踪器代码我需要计算单个像素的眼睛光线的代码。
【问题讨论】:
标签: 3d raytracing