用emacs玩转图形学的光线追踪

Python的灵活运用之——100 行代码教你实现光线追踪 ! “Ray Tracing is the Future and Ever Will Be” 英伟达的一位大佬曾经这么说过:「光线追踪是未来,而且将永远是未来。」 光线追踪的原理是非常直观而优雅的,其应用的核心难点在于性能优化。本文将基于光线追踪的基础原理,用 100 行 python 代码实现一个简单的光线追踪渲染器。 基础原理 我们看到的物体,是由来自各个方向发射光、反射光、折射光照亮的。而光线的起点,是各种发光源;光线的终点,则是我们的眼睛。一束光由光源出发,经过不同物体的反射、折射,最终射入 阅读详情


不久前因为在豆瓣的0bug围观,知道了Milo Yip这个牛人,他最近写了篇:用JavaScript玩转计算机图形学 ,图文并茂地介绍了离线渲染中最重要也是最基础的光线追踪算法。

编写光线追踪渲染器是图形程序员的一个仪式,所以区区编写了一个emacs版本 ,顺便把一直想写的ppm-gen功能完成。

这个渲染器速度是很慢的,所以要有心理准备。在区区的机器上,25x25渲染都要20秒。这可能是因为过量使用eieio的原因。不过,这在emacs lisp中也是没办法的事情。vector/sphere/ray的实现,从assoc list变为vector变为defstruct最后变为defclass,都是为了编写代码更清晰的,eieio的with-slots/oref/oset非常好用!

下面是几张效果图:
深度渲染

反射渲染

P.S: 用emacs lisp渲染是很慢的,如果你想了解自己机器的单线程速度,可以多一个度量了^_

【Ray Tracing】光线追踪基本概念与代码实现 Ref Ref 视觉技术的圣杯:光线追踪如何再现真实世界? : 超级棒的综述报道,一文入坑 用JavaScript玩转计算机图形学(一)光线追踪入门:Milo Yip 大神的经典之作,带JS交互 一个系列,按 Milo Yip 的思路编排,使用 C++ 实现,带源码 光线追踪(RayTracing)算法理论与实践(一)入门 光线追踪(RayTracing)算法理论与实践(二... 阅读详情

相关推荐

【python】手写光线追踪教程

本文未经允许禁止转载 B站:https://space.bilibili.com/455965619 作者:Heskey0 path tracer based on 《PBRT》 一.introduction to sampling theory 1. what is sampling? impulse train: sampling process corresponds to multiplying the function by a “impulse train” function, an

qq_51214471的博客 4065

opengl光线追踪的程序_光线追踪CPU->GPU

这个文章最早基于 @miccall 的那篇文章miccall:光线追踪太慢不想等?用 openGL重现采样过程​zhuanlan.zhihu.com真的,每次跑光线追踪即使很小的图都要等好几分钟,我甚至当渲染一张大图的时候要使用了腾讯云的便宜的学生机让它去跑,但是几次之后实在是忍不下去了,想着能不能用GPU帮助计算呢?所以我也想来自己follow做一个,但是我跟了的OpenGL教程主要是基于GLF...

weixin_39805883的博客 584

OpenGL 进阶系列10 - 光线跟踪实现简介(Ray Tracing)

OpenGL 实现光线跟踪(Ray Tracing)是一个相对复杂但有趣的挑战,通常用于生成高度逼真的图像效果,如反射、折射、阴影等。OpenGL 本身并不是为光线跟踪设计的,但可以通过结合计算着色器和现代 OpenGL 功能实现光线跟踪。光线跟踪的基本思路是从相机(或视点)出发,发射光线并计算这些光线与场景中物体的交点。光线与场景中物体相交的计算。计算交点的光照(基于表面法线、光源位置、材质等)。反射和折射的处理(如果物体是透明或反射的)。

GPU全栈博主 1534

【计算机图形学】OpenGL递归实现光线追踪

计算机图形学--OpenGL递归实现光线追踪

weixin_59008623的博客 7680

玩转Ubuntu(Emacs编辑器入门)

玩转Ubuntu(Emacs编辑器入门) 作者 CodeAllen ,转载请注明出处 安装 sudo apt install -y emacs 运行命令行模式 不加参数进入图形界面 emacs -nw 创建和编辑文件(基础方法) Ctrl + X , Ctrl + F //在底部回显区输入新建文件名,回车进入编辑模式 Ctrl + X , Ctrl + S //保...

CodeAllen嵌入式 2425

睿尔曼超轻量仿人机械臂--PLC控制

PLC通过以太网与机械臂创建socket连接,PLC发送JSON协议控制机械臂进行物料抓取。

weixin_61488836的博客 2464

剑英陪你玩转图形学 (三)归去来

今天的主题是数学,尤其是要把向量说一说 开篇废话 王全安又进去了,最近不太好引用岛国文化来开篇,来点民族的。 恰逢中秋,让我想起了一首脍炙人口的水调歌头。 明月几时有,把酒问群友。不知这次版本,今晚能出否。我欲推倒重构,又恐项目经理,深夜对我吼。增删改代码,好像没保存…..深呼吸,看屏幕,泪在流。不应有恨,谁没忘记存代码?人有悲欢离合,码有丢失冲突,此事古难全。但...

dianjupi9036的博客 2681

三维(点云)语义分割概述以及方法总结

语义分割 语义分割需要两部分 classification: 需要全局信息 segmentation:更加依赖全局信息和局部信息 一般的网络结构是: 提特征-特征映射-特征图压缩(降维)-全连接-分类,其实就是encoder-decoder的过程, 比如在二维的的pspnet,fcn等等 0. 三维表示的数据结构 Point cloud 无序性 点云实际上是无序的,比如有8个点云,你放到...

renhaofan的博客 3万+

PPM文件的正确打开方式

前言 某一天作比赛,碰到一道题答题,而且它的输入格式还是这样: PPM是个甚么东西?本蒟蒻表示听都没听说过╮(╯▽╰)╭ 某%d%a%l%a%o%告诉我们:https://blog.youkuaiyun.com/kinghzkingkkk/article/details/70226214 另一位%d%a%l%a%o%告诉我们:https://blog.youkuaiyun.com/gengshenghong/arti...

qq_36551189的博客 2万+

Qt 5.15.2静态编译避坑实录:MinGW 32位版从源码到Creator配置的全流程踩坑总结

本文详细介绍了Qt 5.15.2 MinGW 32位版本的静态编译全流程,包括环境准备、配置参数优化、编译过程监控及安装后配置。重点解决了静态编译中的常见问题,如参数顺序敏感、路径引号问题等,并提供了性能对比实测数据,帮助开发者高效完成静态编译。

weixin_26749245的博客 271

手把手教你用Deep Single-Image Portrait Relighting实现人像光影重塑(附GitHub代码)

本文提供了一份详细的实战指南,手把手教你利用Deep Single-Image Portrait Relighting技术实现人像光影重塑。文章从环境搭建、核心原理拆解出发,逐步指导构建简易重光照流程,并探讨了使用预训练模型进行效果优化的进阶方法,最后附上避坑指南与常见问题排查,帮助开发者快速上手这一AI图像处理技术。

weixin_29065015的博客 315

光线追踪

光追比较流行,其实很多公司也没用到,学习了下,就是反过来进行了,颜色从物体到像素,改为颜色从像素到物体了。碰撞检测就是射线和球之间的三角形关系,根据韦达定理可以判断,不相交,一个值或者两个值,即中学数学。 上图 ...

coder 653

DSI3协议介绍

分布式系统接口(DSI)是一种通用且功能强大的总线协议,旨在将多个遥感器和执行器设备互连到中央控制模块。该网络的主要目标应用是汽车安全系统。这种应用的一些特点是需要低成本、高鲁棒性、中速互连,仅限于两根导线。此外,它必须具有故障安全性、确定性和良好的EMC特性。即使具有所有级别的智能和可编程性的设备都可以连接到网络,远程设备也必须能够通过简单的状态机实现。由于模块尺寸非常重要,因此中央模块和远程单元中的最小组件至关重要。

汽车电子软件领域知识分享 1万+

光线跟踪(RayTracing)原理及c++实现

Chapt1. Why to write a RayTracing Render 提到Computer Graphics,众所周知的是如OpenGL、Direct3D这样非常流行的光栅化渲染器。事实上,这些大部分应用于游戏制作的API主要为实时渲染(Real-time Rendering)而设置,而它们所采用的光栅化(Rasterization)的渲染方式,通过渲染大量的三角形(或者其他的几

wozhengtao的博客 2万+

Plecs电力电子仿真专业教程-第一季 第一节 Plecs简介

Plces 电力电子仿真专业教程系列依托专业的电力电子仿真软件Plecs对各种电力电子常用的拓扑及实际设计的方案进行系统及仿真与软件代码仿真实践。通过对各种电路仿真原理的讲解及专业C语言代码程序的编写,提升学员的系统设计能力,软件编程能力与理论分析能力。

3637

opencode : 无法将“opencode“项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

opencode命令识别问题与openclawcodexgemini确保的路径在 PATH 中。这个知识对所有 npm 全局工具通用。

一键难忘的博客 4518

图形学基础 | 一个简单光线追踪渲染器

一个简单光线追踪渲染器 简单的介绍可以参考:图形学基础 | 光线追踪 单独看一个像素上的追踪过程的话: 从视线方向发射一条射线; 取得射线与场景最近的交点; 取得交点的材质颜色; 如果材质包含反射或折射,则改变光线的方向; 寻找下一个交点.并重复(2). 直到在场景内找不到交点.或者达到达到最大跟踪次数. 对于(2). 因为需要遍历场景. 开销随场景复杂度上升而上升. 对于一些简单的示例场景...

【黑键】 1471

【CANoe示例分析】0002_SOMEIPDemo

该工程由Vector官方提供,作为仿真SOME/IP节点的示例。Demo中介绍了两种仿真SOME/IP节点的方法,一种是基于arxml数据库的仿真,另一种是没有数据库(arxml、fibex)的仿真。无论是哪种形式的仿真,如果想要通过CAPL程序接收或者发送SOME/IP信息,都需要添加交互层的信息,这些信息可以通过添加DLL文件实现,DLL文件路径在CANoe安装目录下的Exec32文件中。

jasonj333 3514

再一次,写一个最简单的.emacs

新装一个特殊的linux开发机器,使用的是ubuntu。默认还是用emacs开发,这两天尝试做尽可能少的定制,最终的.emacs是我觉得非加不可的一些设置。 ;;;must key (global-set-key (kbd "M-h") (lambda () (interactive) (find-file "~/.emacs"))) (global-set-key (kbd "M-S...

Joyer的日志 5672

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

剑英陪你玩转图形学(一)打通任督二脉

这是一个尝试的系列,突发奇想觉得有声音可能会更有趣,这个系列Blog都会出视频有声版。 这个系列主要是为了玩一玩代码。 我觉得呢,写程序是一件很有意思的事情,没有必要搞得那么苦大仇深。但是,却总有那么一些人、那么一些资料,非要把写代码搞成一件高山仰止的事情,搞成是非精英屌丝不可完成的任务。搞成是非要你上辈子就注定是个屌丝,这辈子投胎转世还是个屌丝才能够从事的职业。 简单的事情复杂化...

dianjupi9036的博客 197

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

光线追踪(ray tracing)介绍与细节推导

背景 最近因为找到关于光线追踪相关不错的教程,所以边学习边做记录并希望将相关资料进行分享。 光线追踪作为计算机图形学中一种可以获得良好的效果的渲染算法,有着非常广泛的应用。历史背景相关的介绍可参考百度百科或者维基百科。本文中的参考资料来自于Peter Shirley分享的资料1,这个系列资料主要有三册,本文中主要介绍第一份资料相关的内容并且补充一些资料中缺少的细节内容。这份资料当中对于从基础知识开...

RMG的专栏 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

剑英陪你玩转图形学 (二)彩虹

今天的主题是颜色 开篇废话 今天看到蛮牛把干货区放上了主页,居然还能看到我的帖子,让我很不好意思。 各位同学对不起,我来晚了。 今天的李总是因为姓李,又总是迟到,所以叫做李总。 今天还是讲图形学,为人不识武藤....,骇骇,最近好像扫黄,不能说这个,大家都知道,关键是不搞软渲染,你就枉然了。软渲染我们上次已经玩过了,知道所以然,了解渲染是怎么一件事,目标就已经达到了。...

dianjupi9036的博客 247

光线追踪例子Ray tracing (webgl)

项目中用到了光线追踪,在耶稣,Jiarathanakul 和 Mozilla同事Jonas的帮助下,完成了我的项目。 归荣耀给上帝! Jiarathanakul的文章http://nopjia.blogspot.com/2011/10/i-have-ray-tracing.html Jonas的帮助样例地址:http://people.mozilla.com/~sicking/webgl/

华瞰Acangle 4408

计算机图形学——光线追踪(RayTracing)算法

前言最近临近毕设答辩前的空档期,没什么要紧的事情要做,于是空闲之余就随意看了下计算机图形学,学习了一个画3D图形的光线追踪算法,在此简单地跟大家分享一下~一、理论基础1、三维场景中创建图像第一步:透视投影。这是一个将三维物体的形状投影到图像表面上的几何过程,这一步只需要连接从对象特征到眼睛之间的线,然后在画布上绘制这些投影线与图像平面相交的轮廓。第二步:添加颜色。图像轮廓绘制好之后,给它的骨架添加...

单身优质程序猿小哥哥的博客 6万+

首席建筑师之光线追踪教程

光线追踪 概述 raytrace是一种 允许你在首席建筑师中创建的现实形象的技术. 架构师计划,呈现视图. 简单地把你的模型画在屏幕上,raytrace实际上是在你的相机上跟踪光线的光线,因为它们会反弹并反映在你的场景中。因此,射线跟踪比OpenGL渲染慢了一些,但可以用来实现更复杂的效果,如反射和超现实的照明模型。 创建一个Raytrace视图 Raytrace窗口 为raytrace创建材料 ...

sxyin123的博客 601

从零开始编写光线追踪渲染器 I

从零开始编写光线追踪渲染器 I 前言 In computer graphics, ray tracing is a rendering technique for generating an image by tracing the path of light as pixels in an image plane and simulat...

weixin_33835690的博客 597
上一篇: 在emacs中使用google map api?!
下一篇: 用emacs显示BMP文件
JoyerHuang_悦
博客等级 码龄23年 101粉丝 111原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值