0

我有一个任务是在 Java 中实现光线追踪。我并没有要求太多,只是想了解一些关于如何通过给定 x 和 y 的像素构造来自相机的光线的信息。我在互联网上找到了很多解释这一点的资源,但都是 2D 的,我需要如何在 3D 中做到这一点。

提前致谢

4

2 回答 2

0

基本思想是这样的:您在给定位置(x,y,z)有一个具有给定分辨率的相机。你有一组光源。您有相机的方向(一个角度,想想您如何倾斜/旋转头部以向上/向下看等......)。现在您要做的基本上是针对每个相机像素,“延伸”垂直线(射线)直到它们接触几何体。然后你知道“要渲染什么”(即你刚刚找到的几何图形)。接下来是确定对象是否被阴影,您可以通过将光线“延伸”到光源直到它们接触几何体(对于给定的光源,您的点被几何体的另一位阴影)或直到它们到达光源(您的位置被给定的光源照亮)。

这是基础知识,当你考虑反射、光的漫射等问题时,它会变得更加困难。

于 2012-04-08T00:49:50.547 回答
0

问题是如何找到屏幕上某个点的空间坐标,该点的位置由屏幕坐标中的 (x,y) 给出。

我不知道您在屏幕上使用的是什么坐标系,所以我会做出一些有根据的猜测,您可以进行相应的调整。

屏幕中心在空间中具有已知位置 [X,Y,Z]中心。我假设屏幕坐标系的原点在那里。我们有一个垂直于屏幕的“方向”向量d和一个“向上”向量u。我假设屏幕上的 +y 方向是u。我们可以取这些向量的叉积r = d x u,我将其作为屏幕上的 +x 方向。所以屏幕坐标为 (x, y) 的点的位置将是 [X, Y, Z] center + x r + y u,我们就完成了。

于 2012-04-07T23:20:43.367 回答