计算机图形学
林杪
小舟从此逝 江海寄余生
展开
-
计算机视觉、计算机图形学、图像处理的区别和联系
搞了CV一段时间,仍时不时因为概念问题而困惑,搞不清楚计算机视觉(Computer Vision),计算机图形学(Computer Graphics)和图像处理(Image Processing)的区别和联系。在知乎上看到了一个帖子,觉得解释的很好,结合自己的理解,形成此文存档。1.基本概念从定义理解概念是最严谨的。所以首先搞清楚维基百科中这些概念的定义。计算机视觉(CV):Co...转载 2018-09-02 16:18:26 · 906 阅读 · 0 评论 -
Ray tracing in a weekend (十一)
Defocus Blur(散焦模糊)在之前渲染所得的图像中所有物体都是“清晰”的,现在要让图像更趋近于真实的camera相片,即“有实有虚”。camera.h#define M_PI 3.1415926#include"ray.h"#include"random.h"//ray的出发点限制在一个圆里,而非集中于一点//先求出在z=0平面,以(0,0,0)为圆...原创 2018-10-08 17:29:20 · 518 阅读 · 0 评论 -
Ray tracing in a weekend (九)
New material:Dielectrics(介质)概念:具有一定透明度,如玻璃、水、空气等。原理:当光线从光密介质进入光疏介质,并且入射角超过临界角,那么发生全反射,类似mirror reflection;否则光线分成两束,一束进入新介质发生折射,另一束返回原介质发生反射。介质的折射率(ref_idx)是其自身的属性,而反射率/强度(reflect_prob)则与角度有关。当没有发生...原创 2018-09-29 10:21:51 · 582 阅读 · 0 评论 -
Ray tracing in a weekend (十)
Positionable Camera#ifndef CAMERAH#define CAMERAH#define M_PI 3.1415926#include"ray.h"//之前关于image plain的信息和viewing ray的生成//都直接写在main里,现在要将它们封装进camera//类里,毕竟image plain本来就是camera的可视范围//而v...原创 2018-10-07 14:44:05 · 351 阅读 · 0 评论 -
Ray tracing in a weekend (八)
将lambertian(diffuse)和metal(reflection)封装进material类里,通过成员函数scatter生成反射线,前者的反射线方向随机生成,故为漫反射,而后者几乎为镜面反射(也有一定随机性,但将偏差限制在了一个单位球里)。在hit_record和sphere里添加指向material的指针成员,同时改写sphere的hit函数,使得ray在接触到sphere后可以将...原创 2018-09-27 19:41:34 · 349 阅读 · 0 评论 -
Ray tracing in a weekend (二)
ray.h#ifndef RAYH#define RAYH#include"vector.h"class ray//只存储原点和方向信息,线上具体一点用函数来表示{public: ray() {} ray(const vec3 &a, const vec3 &b):A(a),B(b){} vec3 origin() const { return A; }...原创 2018-09-22 16:11:36 · 373 阅读 · 0 评论 -
Ray tracing in a weekend (七)
Diffuse materials(漫反射材质)实现原理(还没有引入light)首先要将object的shape和material分开来理解。一个具有diffuse materials的object实际就是说与其surface相交的光线会以随机的方向反射(也可能被完全吸收,阴影的来源),从视线(viewing ray)的角度来说,也就是接触到其surface的viewing ray会以随机...原创 2018-09-26 17:46:22 · 335 阅读 · 0 评论 -
Ray tracing in a weekend(一)
#include<iostream>#include<fstream>using namespace std;int main(){ int nx = 200;//200列 int ny = 100;//100行 ofstream out("d:\\theFirstPpm.txt"); out << "P3\n" << nx &原创 2018-09-20 20:29:17 · 559 阅读 · 1 评论 -
Ray tracing in a weekend (六)
将image plain的信息以及viewing ray的生成封装进camera class里camera.h#ifndef CAMERAH#define CAMERAH#include"ray.h"//之前关于image plain的信息和viewing ray的生成//都直接写在main里,现在要将它们封装进camera//类里,毕竟image plain本来就是cam...原创 2018-09-25 19:52:34 · 311 阅读 · 0 评论 -
Ray tracing in a weekend (五)
之前在计算color时是直接在源文件中定义ray与sphere的hit监测函数,也没有创建sphere类。现在我们要将object创建成类,将hit函数封装起来,用的时候作为接口调用。当前的场景中只存在球体,我们将先创建一个只有纯虚hit函数的抽象基类,再由其派生出sphere类和hitable_list类。后者可以视为将场景中所有object整合为一个对象。hitable.h#ifnd...原创 2018-09-24 15:59:09 · 382 阅读 · 0 评论 -
Ray tracing in a weekend (四)
visualize normal vector因为在之后的shading操作中会用到normal vector来计算不同intersection处pixel的RGB颜色,而现在因为没有light,所以先在normal vector和RGB颜色之间构造一个简单的映射。viewing ray以不同的方向与sphere相交,在这些交点处都存在法向量,其计算相当简单在本次操作中将不能仅仅考虑r...原创 2018-09-23 17:40:58 · 256 阅读 · 0 评论 -
Ray tracing in a weekend (三)
判断viewing ray和sphere的相交联立viewing ray和sphere的向量形式方程可得: 将该式进行转化,把t提出来,可得: 此即为一个关于t的一元二次方程,由该方程的判别式可以得知ray与sphere的相交情况:(PS:此处仅仅根据判别式大于零便确定相交,相当于将viewing ray视为了直线而非射线,当球体置于origin后面时也会得到与最终结果相...原创 2018-09-23 16:45:32 · 387 阅读 · 0 评论 -
Texture(纹理贴图)和Material(材质)概念上的区别
我的理解是:纹理更偏向于“图”,而材质更偏向于“属性”。打个比方说,对同一个立方体模型进行处理:加纹理信息,可以认为是贴上图,比如木头的纹理图,大理石的纹理图。加材质信息,可以认为是为这个立方体加上属性(这些属性主要是指反射系数、折射系数等),比如木头的属性或大理石的属性。从另一个角度来看,加了纹理的模型是静态的和表面的,不会因为外界环境变化而变化(比如光照)。但是加了材质的模型是动态的和...原创 2018-09-17 21:16:36 · 11604 阅读 · 0 评论 -
渲染(render)和着色(shading)
Shader和renderer:shader中文为着色器,进行shading(着色);renderer为渲染器进行render(渲染)。渲染是指以软件由模型生成图像的过程。模型是用计算机语言或者数据结构严格定义的三维物体或虚拟场景的描述。在渲染的过程中有一项重要的工作便是为图像着色,即根据物体相对于光线的角度及其与光源的距离来计算图像中各像素的值,这个值决定了最终图像中显示出哪些图形(一些图形可能...原创 2018-09-17 21:14:39 · 6157 阅读 · 0 评论 -
Shadow Ray
Shadow ray is the last segment on the light path traveling through the scene (from camera to light source). It is just a technical term, only a label. In nutshell it marks anything that goes to light....原创 2018-09-03 22:08:17 · 844 阅读 · 0 评论 -
关于齐次坐标
齐次坐标(Homogeneous Coordinate)在空间直角坐标系中,任意一点可用一个三维坐标矩阵[x y z]表示。如果将该点用一个四维坐标的矩阵[Hx Hy Hz H]表示时,则称为齐次坐标表示方法。在齐次坐标中,最后一维坐标H称为比例因子。在OpenGL中,二维坐标点全看作三维坐标点,所有的点都用齐次坐标来描述,统一作为三维齐次点来处理。每个齐次点用一个向量(x, y, z, w)...原创 2018-09-02 22:18:06 · 1570 阅读 · 0 评论 -
Ray tracing in a weekend (十二)
#include"vector.h"#include"ray.h"#include"sphere.h"#include"hitable_list.h"#include"camera.h"#include"material.h"#include"random.h"#include<random>#include<原创 2018-10-08 19:26:02 · 408 阅读 · 0 评论