我有一个在Java中实现光线跟踪的任务。 我不是要求太多,只是为了获得一些关于如何通过给定x和y的像素来构建来自相机的光线的信息。我在互联网上找到了许多解释这一点的资料,但在2D中,我需要如何在3D中做到这一点。
提前致谢
答案 0 :(得分:0)
问题是如何找到屏幕上一个点的空间坐标,其位置由屏幕坐标中的(x,y)给出。
我不知道你在屏幕上使用的坐标系统,所以我会做一些有根据的猜测,你可以相应调整。
屏幕中心在空间中已知位置[X,Y,Z] center 。我假设屏幕坐标系的原点在那里。我们有一个方向"向量 d ,它与屏幕正常(垂直),并且"向上" vector u 。我假设屏幕上的+ y方向是 u 。我们可以得到这些向量的交叉积, r = d x u ,我将把它作为+ x方向屏幕。因此,屏幕上坐标为(x,y)的点的位置将为[X,Y,Z] center + x r + y 你,我们已经完成了。
答案 1 :(得分:0)
基本思想是这样的:你有一个给定分辨率的给定位置(x,y,z)的相机。你有一套光源。你有一个摄影机的方向(一个角度,想想你如何倾斜/旋转你的头部向上/向下看等...)。现在你想要做的主要是每个相机像素,“延伸”垂线(光线),直到它们触摸几何。然后你知道“要渲染什么”(即你刚刚找到的几何体)。接下来是确定对象是否被遮蔽,您可以通过将光线“延伸”到光源直到它们触摸几何体(对于给定的光源,您的斑点被几何体的另一部分遮蔽)或直到它们到达光源(你的光点被给定的光源点亮)。
这是基础知识,当你考虑反射,光的扩散等等时,它会变得更加困难。