java – 2D光线跟踪器的算法
我想用
Java编写一个程序化的RayTracer用于演示目的,同时给出一般的Ray Tracing演示文稿(也提到3D,这个2D模型应该只是为了更容易理解,并培养我的一般Java知识).
我的问题是,我不知道从哪里开始这整个事情. 我要尝试的第一件事是使用矢量来跟踪给定坐标(例如我的鼠标光标的位置)的屏幕上的每个像素.然后我会计算向量是否与多边形相交,然后我会在那里停止向量并将其绘制到这个特定点. 也许我甚至可以通过计算法线来绘制一些阴影,并以较低的强度反射另一个方向的矢量. 那么从A = {everypixelonthescreen}绘制一个向量到特定的点P并计算交叉点是一个好主意吗? 完成的版本应该看起来像这样: 解决方法
我担心你提出的这种光线跟踪应用程序会比使用真正的3D光线跟踪器更具误导性.
> 2D射线追踪器的使用方式略有不同 我会尝试选择更多本机2D光线跟踪用法,如: >光学模拟 这用于模拟镜头和镜子光学器件.这里来自我的古代2D射线追踪模拟之一的图像: >存储你的世界 你有透镜以折线衍射指数和镜子的形式作为折线.你有世界衍射指数 仅投出重要的或全部.使用Snell定律来模拟光学 如您所见,色度误差是可见的(每种颜色都有自己的波长,因此衍射指数不同).你也可以使用MultiBand rendering. 如果你添加了光学实验室的drag&drop功能,我用它来调整自定义光学系统 这个伪3D游戏使用2D射线投射引擎见Wiki: Wolfenstein_3D_engine.这张图片来自这个链接: >首先绘制地板和天花板/天空为2半屏幕(屏幕除以地平线) 因此,从所有可见方向的当前位置投射光线(类似于您的图像,但通常使用60度视图).光线必须以亚像素(单元)精度完成.光线撞击墙壁(在地图上)获取子像素(单元格)位置.它表示墙壁纹理的哪个部分被击中 它的大小和比例由射线原点的距离决定.如果我的记忆服务是通过仅使用垂直距离(乘以cos(ray_angle-player_angle))来完成鱼眼校正. 这里是我刚才玩得很开心的例子: 它使用纯GDI在C中完成(仅使用位图扫描线),根本没有其他第三方库.它使用单一纹理,漫射环境照明,2D光线投射.有2个位图(屏幕,纹理图集)和单个2D地图.代码少于9 KB,包括rems.它仅由键盘控制(鼠标用于编辑地图子窗口中的迷宫). 这里有动画GIF示例: 如果您有兴趣,请参阅相关的质量保证: > Wolfenstein with variable height of cells (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |