我们来整理一下项目的代码 目录 ----include --hit --texture --material ----RTdef.hpp ----ray.hpp ----camera.hpp ----main.cpp 3D泛型数学库中的randomfunc.hpp增加了新内容 #pragma once #include <lvgm\type_vec\type_vec.h> #include <random> namespace lvgm { //@brief: create a r…
Chapter 6:Rectangles and Lights 今天,我们来学习长方形区域光照  先看效果 light 首先我们需要设计一个发光的材质 /// light.hpp // ----------------------------------------------------- // [author] lv // [begin ] 2019.1 // [brief ] the areaLight-class for the ray-tracing project // from t…
我们上一篇写了Chapter5 的第一个部分表面法线,那么我们来学剩下的部分,以及Chapter6. Chapter5:Surface normals and multiple objects. 我们这一节主要向场景中添加对象. 依据代码重用原则,此时应该抽象出对象创.绘制的公共部分 All what we do are followed by object-oriented !  我们先来抽象并定义一些基本的类型 1>.ray. 这个不用说了,但是我们发现,在后面涉及到的所有的向量和精度类型均…
上一篇比较简单,很久才发是因为做了一些好玩的场景,后来发现这一章是专门写场景例子的,所以就安排到了这一篇 Preface 这一篇要介绍的内容有: 1. 自己做的光照例子 2. Cornell box画质问题及优化方案 3. 新的场景几何体——长方体 轴平行长方体 任意长方体 我们这一篇重实践轻理论阐述 ready 1. 需要上一章的知识 但是,上一章的Cornell box画质优化仅限于盒子本身,如果作为场景和其他物体放在一起就不能那么优化画质 即,Cornell box像素计算失败应该返回黑色…
 Preface 今天有两个东东,一个是体积烟雾,一个是封面图 下一篇我们总结项目代码 Chapter 8:Volumes 我们需要为我们的光线追踪器添加新的物体——烟.雾,也称为participating media. 我们还需要补充一个材质——次表面散射材质,它有点像物体内的浓雾. 体渲染通常的做法是,在体的内部有很多随机表面,来实现散射的效果.比如一束烟可以表示为,在这束烟的内部任意位置,都可以存在一个面,以此来实现烟.雾 对于一个恒定密度体,一条光线通过其中的时候,在烟雾体中传播的时候也…
Chapter 5:Image Texture Mapping 先看效果: 我们之前的纹理是利用的是撞击点p处的位置信息,比如大理石纹理 而我们今天的图片映射纹理采用2D(u,v)纹理坐标来进行. 在图像中使用缩放(u,v)的直接方法是将u和v四舍五入为整数,并将其作用于(i,j)像素.而,我们的纹理和物体的尺寸并不一致,所以我们需要将其规格化,然后再放大适应至物体尺寸.即,我们采用某个点在当前图像中的比例,而不是具体的位置,例如,对于nx乘ny图像中的像素(i,j),图像纹理位置为: u =…
今天,我们来学习如何设计自定义位置的相机 ready 我们只需要了解我们之前的坐标体系,或者说是相机位置 先看效果   Chapter10:Positionable camera 这一章我们直接用概念贯穿整章 1.fov: field of view 它是一个角度 它分为两种:垂直方向岔开的角度(vfov)和水平方向岔开的角度(hfov) vfov即相机在垂直方向上从屏幕顶端扫描到底部所岔开的视角角度 hfov即相机在水平方向上从屏幕左端扫描到右端所岔开的视角角度 2.aspect:屏幕宽高比…
 Preface 为了得到更好的纹理,很多人采用各种形式的柏林噪声(该命名来自于发明人 Ken Perlin) 柏林噪声是一种比较模糊的白噪声的东西:(引用书中一张图) 柏林噪声是用来生成一些看似杂乱无章其实有些变换规律的图形(更加贴近自然),比如海水.地形.雾等 当然这里面的原理涉及分形几何等相关的知识 例如,2D柏林噪声可以生成 以及一些网上的总结: 还有一些其他的图 是不是看起来自然多了 那么今天,我们就来领略一下随机技术带来的自然之美~  Chapter 4:Perlin Noise 柏…
 Preface 终于到了激动人心的纹理章节了 然鹅,看了下,并不激动 因为我们之前就接触过 当初有一个 attenuation 吗? 对了,这就是我们的rgb分量过滤器,我们画出的红色.蓝色.绿色等等,都是通过它来控制的 专业点的词语叫做rgb衰减比例,比如rtvec(1.,0.,0.),最后呈现出来的是红色,因为r保留了100% 它是怎么控制的呢,我们来回顾一下这个过程 首先,我们创建一个材质球 后面那个rtvec(0.4,0.2,0.1)就是衰减比例(衰减到原来的百分之..) 之后 进入数…
Chapter 2:Bounding Volume Hierarchies 今天我们来讲层次包围盒,乍一看比较难,篇幅也多,但是咱们一步一步来,相信大家应该都能听懂 BVH 和 Perlin textures是这本书中最难的两章,为什么把BVH放在第二章讲呢,据说,层次包围盒的渲染效率是比较高的,考虑到大家的渲染时间开销,所以先讲这个 光线 - 物体相交是光线跟踪器中的主要时间瓶颈,运行时间与物体数量成线性关系.但它是对同一模型的重复搜索,所以我们可以采用二分搜索的速度进行对数级复杂度搜索.因为…
 Preface 博主刚放假回家就进了医院,今天刚完事儿,来续写第二本书  Ready 我们来总结一下上一本书的笔记中我们的一些规定 1. 数学表达式 我们采用小写粗黑体代表向量,大写粗黑体代表矩阵,其他代表标量 2.我们将eye(or camera)发出的光线称为视线(sight) 3.我们目前将所有的非特定(不专属于任何一个类)的通用物理数学运算函数封装到泛型库中,并以lvgm命名空间限定,暂时不准备划分子命名空间 4.我们写库,拟采用全hpp书写,因.h和.cpp之间关于父类纯虚函数的子类…
<Ray Tracing in One Weekend>完结篇 最近课程上机实验,封面图渲染时间也超长,所以写东西就落下了,见谅 这篇之后,我会继续<Ray Tracing The Next Week>,还请多多关注 这几天我在渲染这本书的封面图,封面图还没出,不算结束,刚好安排了10节 今天呢,有两件事: 1.阐述整个工程的文件组织即内容 2.阐述封面,完结 12.1工程文件组织 试过很多方法,问过很多老师,无奈,子类继承实现的父类纯虚函数实在无法和类声明分成两个文件(即声明放于…
今天我们来学最后一章 Chapter11:Defocus Blur Preface 散焦模糊 也称 景深 首先,我们来了解一下散焦模糊,我们在真实相机中散焦模糊的原因是因为它们需要一个大圈(而不仅仅是一个针孔)来聚光.这会使所有东西都散焦,但是如果用小孔的话,那么通过前后调整相机镜头,就会使得一切景色都会聚焦到相机镜头中,也就是会汇聚到那个孔内.物体聚焦的那个平面的距离由镜头和胶片/传感器之间的距离控制.这就是为什么当你改变焦点时可以看到镜头相对于相机移动的原因. 光圈是一个可以有效控制镜头大小…
新的一年,前来打卡 Preface 回顾上一篇,我们讲述了漫反射材质,也就是平时的磨砂表面. 它一种将入射光经表面随机散射形成的材质,是一种非常普遍的表面形式. 这一篇,我们将来学习镜面反射,或者说是金属材质 镜面在生活中见得也很多,它是一种将入射光经表面按照物理反射规律形成的材质. 先看效果 Ready 之前我们就写好的 ray.h intersect.h intersection.h sphere.h camera.h Chapter8: Metal 之前我们已经写过一个漫反射的材质,可以发…
今天我们开始进入正篇 Chapter 3: Rays, a simple camera, and background 对于所有的光线追踪器,基本都有一个光线类,计算沿光线看到的颜色. 我们的光线是一个矢量运算: p(t) = a + t * b. 书中的向量用大写粗体字表示,但这里我遵循一般表示法:矩阵为粗体大写字母,向量为粗体小写字母,而标量为正常字体 P是光线指向的目标位置,a是光线的起点,b是光线指向的方向,t则是光线步长. 如图: 我们如下定义ray-class /// ray.h /…
学完了插值,我们来学习在场景里面添加一个立体彩色球(三维插值) 按照惯例,先看效果: Chapter4: Adding a sphere 我们又一次面临图形学的主要任务. 我们需要再次回顾coord1.1的坐标系统,如果有一个球,在眼睛和屏幕中间,那么如何将其绘制到屏幕上 假设我们沿着y负方向垂直往下看: diagram 4-1 扫描屏幕位置的视线(有眼睛发出指向屏幕特定位置)的生成在上一节讲述完毕. 我们的方法是通过逐行扫描屏幕的每一个位置,然后发出对应的视线,检测视线是否与其他物体相交进而确…
一天一篇,今天来学习第7章 (散射)漫反射材质 Chapter7: Diffuse Materials Preface 从这一章开始,我们将通过光线追踪制作一些逼真的材质. 我们将从漫射(磨砂)材料开始. 先看效果: 正文 不发光的漫射物体仅仅呈现其周围的颜色,但是它们用它们自己的固有颜色来调和这些色彩. 从漫反射表面反射的光方向是随机的,比如:如果我们将三条光线发送到一个漫反射表面,它们将各自具有不同的随机行为: 引用书上的图: diagram 7-1 它们也可能被吸收而不是被反射. 表面越暗…
今天讲这本书最后一种材质 Preface 水,玻璃和钻石等透明材料是电介质.当光线照射它们时,它会分裂成反射光线和折射(透射)光线. 处理方案:在反射或折射之间随机选择并且每次交互仅产生一条散射光线 (实施方法:随机取样,具体见后文) 调试最困难的部分是折射光线.如果有折射光线的话,我通常首先让所有的光折射.对于这个项目,我试图在我们的场景中放置两个玻璃球,我得到了这个:   上述图片是对的吗?显然,在实际生活中,那两个玻璃球看起来怪怪的,实际情况下,里面的内容应该将现在的进行上下颠倒,且没有黑…
Preface 从这一篇起,我们开始学光线追踪这门牛逼的技术.读了几天,一个字:强! 这一篇我们主要讲述技术入门和一些简单的案例. 我们先学这本: Ready 这本书需要ppmview这个软件帮忙看效果图,不过下载也非常快. 其次,需要你会C/C++读写文件 最后需要你具备三维空间想象能力以及我对书中公式的讲述 Chapter1: Output an image 先看一张图,秒懂一下它如何设置像素 话说,有这么一个文件,叫做.ppm文件.它以水平向右为x正方向,以垂直向下为y正方向. 它的文件存…
html5的float属性超详解(display,position, float)(文本流) 一.总结 1.文本流: 2.float和绝对定位都不占文本流的位置 3.普通流是默认定位方式,就是依次按照文本流的位置顺序布局. 4.相对定位可以看作特殊的普通流定位.相对定位的元素是相对自己本身的位置(在普通流中)进行定位. 5.position的absolute属性绝对定位:生成绝对定位的元素,相对于 static 定位以外的第一个祖先元素进行定位. 6.position中的fix属性是相对浏览器窗…
HTML中DOM核心知识有哪些(带实例超详解) 一.总结: 1.先取html元素,然后再对他进行操作,取的话可以getElementById等 2.操作的话,可以是innerHtml,value等等 二.基本概念 每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问. Document 对象是 Window 对象的一部分 当浏览器打开一个HTML文档时,浏览器解析HTML文档的标记,并创建表示这些标记的…
Mysql超详解 一.命令框基本操作及连接Mysql 找到Mysql安装路径,查看版本 同时按快捷键win+R会弹出一个框,在框中输入cmd 点击确定后会出现一个黑框,这是命令框,我们的操作要在这命令框中进行. 现在查看你的Mysql服务是否启动,如若未启动,有两种启动方式: 第一种:同时按Ctrl+Shift+Esc快捷键,然后按下图中提示的部分操作,最后看到MySQL服务状态未正在运行即可 第二种:输入net start mysql80(80是对应的MySQL版本如果是其他版本则输入对应的版…
Mybatis案例超详解(上) 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟点理解再透彻点之后再详细更新,如果仅仅是为了更新博客而忽视质量的话,有违我的初心,所以我决定,暂时转移路线,整合一些案例,为了以后更新更好的博客而准备. 此篇我会由浅入深进行整理,适合新手练习,希望能对一些有需求的朋友有所帮助. 案例准备 开发工具:IDEA 前端页面: 在Bootstrap官网ht…
Python3调用C程序(超详解) Python为什么要调用C? 1.要提高代码的运算速度,C比Python快50倍以上 2.对于C语言里很多传统类库,不想用Python重写,想对从内存到文件接口这样的底层资源进行访问 Python调用C的方法: Python调用C的方法通常有3种: 1.SWIG,编写一个额外的接口文件来作为SWIG(终端工具)的入口 2.通过CTypes调用 3.使用Python/C API方法 第一种方法大多数情况下会带来不必要的麻烦,我并没有试验,本文只针对2,3方法作详…
摘要:当你使用java实现一个线程同步的对象时,一定会包含一个问题:你该如何保证多个线程访问该对象时,正确地进行阻塞等待,正确地被唤醒? 本文分享自华为云社区<JUC中的AQS底层详细超详解,剖析AQS设计中所需要考虑的各种问题!>,作者: breakDawn . java中AQS究竟是做什么的? 当你使用java实现一个线程同步的对象时,一定会包含一个问题: 你该如何保证多个线程访问该对象时,正确地进行阻塞等待,正确地被唤醒? 关于这个问题,java的设计者认为应该是一套通用的机制 因此将一…
 Preface 往后看了几章,对这本书有了新的理解 上一篇,我们第一次尝试把MC积分运用到了Lambertian材质中,当然,第一次尝试是失败的,作者发现它的渲染效果和现实有些出入,所以结尾处声明要通过实践,改进当前的效果 于是乎,就有了后面的章节,几乎整本书都在讲,如何一步一步地改进上一篇的画质,使其更加符合现实,上一篇其实是抛砖引玉 这本书的小标题名为the rest of your life 通过前面几章,我们可以更好地理解这句话:我们通过MC积分优化效果,采用的是pdf函数,之前说过,…
 Preface 注:鉴于很多网站随意爬取数据,可能导致内容残缺以及引用失效等问题,影响阅读,请认准原创网址: https://www.cnblogs.com/lv-anchoret/category/1368696.html 我们这节主要讲把之前的概率密度做混合,以得到更好的效果 我们上一篇以前经常用关于cos函数的pdf,上一节用的是与光源采样相关的pdf,那么,我们把两者结合到一起,协调它们之间的比例,我们就可以得到一个有着两种概率密度模型的pdf,这往往是更贴近生活的,那么我们今天就来学…
 Preface 我们今天来把第三本书从开局到现在讲的一大堆理论运用到我们的框架中,那么今天我们首先将原始的材质改为基于重要性采样原理的材质 这一篇是代码工程中进行MC理论应用的初步尝试篇  Ready 我们需要这几个重要的文件,我担心大家手上的文件可能不太对,所以再贴一下 /// rectangle.hpp // ----------------------------------------------------- // [author] lv // [begin ] 2019.1 //…
上周,我们正式发布了 DBPack SQL Tracing 功能和数据加密功能,现对这两个功能做如下说明. SQL Tracing 通过 DBPack 代理开启的全局事务,会自动在 http header 中注入 traceparent,traceparent 的值如下: 00-85d85c3112590a76d0723eed4326dbd8-81e51018180f4913-01 该值的格式是: fmt.Sprintf("%.2x-%s-%s-%s", supportedVersio…
SVG是一种矢量图格式,是Scalable Vector Graphics三个单词的首字母缩写.在xml文件中的标签是<vector>,画出的图形可以像一般的图片资源使用,例子如下: <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewpo…