我正在用纯Python构建一个简单的Python光线追踪器(仅仅是为了它),但我遇到了障碍。

我的场景的设置目前是这样的:

相机位于沿Y轴指向的0, -10, 0。

半径为1的球体位于0, 0, 0。

成像平面物距1远离相机,其宽度和高度均为0.5。

我通过成像平面以均匀随机分布的方式拍摄光子,并且如果光子碰巧与物体相交,我会在图像画布上绘制一个红色圆点,对应光线通过的图像平面上的点。

我的交集码(我只有球体):

def intersection(self, ray):

cp = self.pos - ray.origin

v = cp.dot(ray.direction)

discriminant = self.radius**2 - cp.dot(cp) + v * v

if discriminant < 0:

return False

else:

return ray.position(v - sqrt(discriminant)) # Position of ray at time t而我的渲染代码(它渲染了一定数量的光子,而不是像素):

def bake(self, rays):

self.image = Image.new('RGB', [int(self.camera.focalplane.width * 800), int(self.camera.focalplane.height * 800)])

canvas = ImageDraw.Draw(self.image)

for i in xrange(rays):

x = random.uniform(-camera.focalplane.width / 2.0, camera.focalplane.width / 2.0)

z = random.uniform(-camera.focalplane.height / 2.0, camera.focalplane.height / 2.0)

ray = Ray(camera.pos, Vector(x, 1, z))

for name in scene.objects.keys():

result = scene.objects[name].intersection(ray)

if result:

n = Vector(0, 1, 0)

d = ((ray.origin - Point(self.camera.pos.x, self.camera.pos.y + self.camera.focalplane.offset, self.camera.pos.z)).dot(n)) / (ray.direction.dot(n))

pos = ray.position(d)

x = pos.x

y = pos.y

canvas.point([int(self.camera.focalplane.width * 800) * (self.camera.focalplane.width / 2 + x) / self.camera.focalplane.width,

int(self.camera.focalplane.height * 800) * (self.camera.focalplane.height / 2 + z) / self.camera.focalplane.height],

fill = 128)它应该正常工作,但是当我渲染测试图像时,我没有看到任何看起来像球体轮廓的东西:

我期待着这样的事情:

有人知道我的代码为什么不能正常工作吗?我一直在调整和重写这一部分的时间太长了......

python渲染光线_Python光线追踪相关推荐

  1. python渲染光线_python模板渲染配置文件

    python的mako.jinja2模板库,确实好用!这里做个笔记,好记性不如烂笔头. #!/usr/bin/env python #encoding=utf-8 import sys,yaml    ...

  2. python渲染光线_在python中为图像添加光照效果

    所以,坏消息是PIL无法做到这一点.我特别提出了几个想法,不幸的是,这些想法都不是直截了当的. GIMP(GNU Image Manipulation Program)确实有一个很棒的"li ...

  3. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

  4. python数据分析实况_Python数据分析实战:降雨量统计分析报告分析

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于菜J学Python ,作者小小明 最近遇到一个有点烧脑的需求,其实也不算烧脑,主要是 ...

  5. 虚幻4渲染编程(光线追踪篇)【第一卷:光线追踪篇开篇综述】

    MY BLOG DIRECTORY: 小IVan:专题概述及目录​zhuanlan.zhihu.com INTRODUCTION: 什么都不说了先上个效果: 光线追踪云 电子游戏的光线追踪时代即将到来 ...

  6. 视频教程-快速入门Python基础教程_Python基础知识大全-Python

    快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...

  7. Python学习教程(Python学习视频_Python学习路线):Day04循环结构

    Python学习教程(Python学习视频_Python学习路线):循环结构 循环结构的应用场景 如果在程序中我们需要重复的执行某条或某些指令,例如用程序控制机器人踢足球,如果机器人持球而且还没有进入 ...

  8. 视频教程-快速入门Python基础教程_Python基础进阶视频-Python

    快速入门Python基础教程_Python基础进阶视频 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥199.00 立 ...

  9. Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python

    Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python? 人生苦短,我用Python!!!短短几个字,现在在各大学习类平台随处 ...

最新文章

  1. Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码
  2. 关于“数据可视化思考者”的8条军规
  3. pytorch笔记:Dataloader
  4. Windows Azure Pack 安装部署
  5. delphi控件切图界面闪烁_一份最详尽全面的UI界面切图命名规范
  6. C#枚举类型的常用操作总结
  7. 中文编程语言Z语言开源正式开源!!!
  8. tu-ctf-2016:re-for-50-plz-50
  9. matlab复数向极坐标转换_Matlab 图像转极坐标系
  10. C# 笔记1 - 操作目录
  11. linux系统上的图形化远程管理,Linux操作系统远程图形化管理的几种途径
  12. 微信开发者工具的下载以及项目的创建
  13. 静态分析软件(QAC、Klocwork,Coverity等),单元测试软件集成测试软件 (VectorCAST、testbed、tessy、c++test等)下载安装使用试用
  14. Jquery项目练习-狂拍灰太狼
  15. 模拟信号高速数据采集回放设备
  16. 【转】对Android开发者有益的40条优化建议
  17. android 中获取logcat缓冲区信息
  18. matlab单容建模仿真,大学毕业论文-—基于matlab的过程控制系统仿真研究
  19. handler中的handler.removecallbacks和handler.removemessages的用法
  20. Mybatis-Cause:无效的主机/绑定变量名 The error may involve -Inline

热门文章

  1. android高仿微信表情输入与键盘输入(详细实现分析)
  2. 自定义 iPhone 铃声
  3. mac系统升级导致VirtualBox报Kernel driver not installed (rc=-1908)
  4. LeetCode07整数反转(JAVA)
  5. IntelliJ IDEA 最新注册码(截止到2019年12月12日)
  6. JAVA有percentile函数吗_Python numpy.percentile函数方法的使用
  7. xy坐标正负方向_xy坐标分别代表什么
  8. 某软件公司绩效考核绩效考核_我们(认为我们)对绩效考核所了解的
  9. Probability|Given UVA - 11181
  10. 【星座】十二星座会因为什么变穷