自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 问答 (1)
  • 收藏
  • 关注

原创 《Ray Tracing in one weekend》翻译、复盘及基于cuda加速

《Ray Tracing in one weekend》翻译、思路复盘及基于cuda加速前言:研一开学已经两个月了,研究方向是图形学三维可视化真实感渲染。最近阅读了这本书,期间遇到了一些疑问,写这篇博客的目的仅是用于思路复盘,加深对这个项目的理解。项目完成后用cuda加速了一下,渲染的时间缩减了很多。因为第一次写博客,还不是很熟悉,有问题还请多多指教。...

2021-11-11 22:25:14 2903

原创 Qt教程:QFile

#include "widget.h"#include "ui_widget.h"#include <QFileDialog>#include <QFile>#include <QTextCodec>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); this->resize(1200,8

2021-11-20 20:04:36 284

原创 Qt教程:绘图设备

#include "widget.h"#include "ui_widget.h"#include <QPixmap>#include <QPainter>#include <QImage>#include <QPicture>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this);//

2021-11-20 19:35:07 98

原创 Qt教程:高级绘图设置

 添加了抗锯齿 和 画家状态保存#include "widget.h"#include "ui_widget.h"#include <QPainter> //画家类Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); this->resize(1400,1000); this->setWindowTi

2021-11-20 17:28:11 409

原创 Qt教程:绘图事件

   widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget(); //绘图事件 void paintEvent(QPaintEv

2021-11-20 17:16:45 369

原创 Qt教程:事件过滤器

#include "widget.h"#include "ui_widget.h"#include <QTimer>#include <QDebug>#include <QMouseEvent>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); //启动定时器 this->id1

2021-11-20 16:46:07 148

原创 Qt教程:事件分发 event事件

#include "mylabel.h"#include <QDebug>#include <QMouseEvent>myLabel::myLabel(QWidget *parent) : QLabel(parent){ //设置鼠标追踪 setMouseTracking(true);}//鼠标进入void myLabel::enterEvent(QEvent *event){ //qDebug() << "鼠标进入了";}

2021-11-20 16:28:43 146

原创 Qt教程:定时器

#include "widget.h"#include "ui_widget.h"#include <QTimer>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); //启动定时器 this->id1 = startTimer(1000); //参数1 间隔 单位:毫秒 this->id2

2021-11-20 16:11:10 254

原创 Qt教程:鼠标事件

#include "mylabel.h"#include <QDebug>#include <QMouseEvent>myLabel::myLabel(QWidget *parent) : QLabel(parent){ //设置鼠标追踪 setMouseTracking(true);}//鼠标进入void myLabel::enterEvent(QEvent *event){ //qDebug() << "鼠标进入了";}

2021-11-20 15:45:41 537

原创 Qt教程:TableWidget

#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); this->resize(800,600); //TableWidget控件 //设置列数 ui->tableWidget->setColumnCount(3

2021-11-20 10:11:17 272

原创 Qt教程:TreeWidget

#include "mainwindow.h"#include "ui_mainwindow.h"#MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); //treeWidget树控件使用 //设置水平头 ui->treeWidget->setHeaderLabels(QS

2021-11-20 09:58:19 403

原创 Qt教程:对话框

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDialog>#include <QDebug>#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);

2021-11-19 21:09:43 228

原创 Qt教程:mainwindow菜单,状态,工具栏

  mainwindow.cpp#include "mainwindow.h"#include <QMenuBar>#include <QAction>#include <QMenu>#include <QToolBar>#include <QPushButton>#include <QStatusBar>#include <QLabel>#include <QDockWidget>#incl

2021-11-19 19:58:53 1695

原创 Ray Tracing The Next Week:chapter 1:运动模糊

Ray Tracing The Next Week:chapter 1:运动模糊文章翻译  当你决定光线追踪时,你觉得程序运行时,视觉质量更有价值。在你的镜面模糊反射和离焦模糊中,每个像素你需要多个样本。一旦你走下了这条路,好消息是几乎所有影响都是强制性的,运动模糊当然是其中之一。在真实的相机中,遮光器打开并在一个时间间隔里保持打开状态,相机和物体可能在那段时间内移动了。相机在那段间隔里所看到的是一个平均值,这是我们想要的。在遮光器开启时,我们可以通过在一段随机时间内发送几束光线来得到随机估计。只要这些

2021-11-18 15:43:41 130

原创 Ray Tracing The Next Week:chapter 0:概述

Ray Tracing The Next Week:chapter 0:概述文章翻译  在《周末学完光线追踪》这本书中,你创建了一个简单暴力的路径追踪器。在这一部分,我们将添加纹理,薄雾,矩形,实例,光线并使用 BVH 支持很多的物体,当这些都完成了,你将有一个真正的光线追踪器。  很多人(包括我在内)在光线追踪中都有一个启发,大多数优化会使代码复杂,而不会带来太多的加速。在这本小册子中,我将在每次做出的设计决定中都用最简单的方法。你可以浏览网站来阅读和参考更复杂的方法,然而,我强烈鼓励你不要过早的进

2021-11-18 14:26:00 89

原创 Ray Tracing in one weekend:chapter 12:Where next

chapter 12:Where next文章翻译  首先,让我们制作一下这本书的封面图片 —— 很多随机球体:  我们得到:  你可以注意到的有趣的事是,事实上玻璃球没有阴影,这使得他们看起来好像是浮空的,这不是一个错误(在现实中,你看不到真正的玻璃球,在多云的天气,他们看起来有点奇怪,确实好像浮在空中),在玻璃球下的大球上,有很多光线击中在这某一点上,因为天空是运动多变的,而不是阻塞不动的。...

2021-11-13 12:03:54 342

原创 Ray Tracing in one weekend:chapter 11:离焦模糊

chapter 11:离焦模糊文章翻译  现在我们来实现最后一个功能:离焦模糊,请注意,很多摄影爱好者都称之为"景深",所以"离焦模糊"仅在朋友之间使用。  在真实相机中,离焦模糊产生的原因是这需要一个大孔(而非仅是一个小孔)来收集光线。这将会对任何事物散焦,但是如果我们坚持使用小孔的镜头,那么在一个确定的距离下,任何事物都在焦点内。到物体聚焦的平面距离是由镜头和胶片/传感器之间的距离来控制,这就是为什么当你改变在什么事物在焦点内时,你看到镜头相对相机移动了(这也会在你的相机相机内发现,只不过是传感器

2021-11-13 11:50:44 1788

原创 Ray Tracing in one weekend:chapter 10:可定位相机

chapter 10:可定位相机文章翻译  相机和电解质一样,都很难解决出现的错误,因此我总是逐渐的开发我的代码。首先,让我们允许一个可调整的视角( fov ),这是你从观察点所看到的角度。因为我们的图片不是正方形,因此水平和垂直的视角是不一样的,我总是使用垂直视角。我也经常用度数来定义它,并在构造函数中改变弧度 —— 这是个人风格问题。  我首先让光线保持从原点出发射向z轴-1位置的屏幕,我们也可以让屏幕在z轴-2位置或者其它地方,只要我们让 h 和这个距离成正比,下面是我们的步骤:  这表明

2021-11-13 10:58:44 1537

原创 Ray Tracing in one weekend:chapter 9:电解质

chapter 9:电解质文章翻译  清晰的材料,如水、玻璃和钻石都是电解质,当一束明亮的光线击中他们,光线会分裂成反射光线和折射(透射)光线。我们会随机的在反射和透射中选择,并且每次光线与电解质交互只会产生其中一种。  最难解决的是透射光线,如果有透射光线,我通常让所有光线透射。对于这个项目来说,我尝试放置两个玻璃球在我们的视野中,然后我得到这张图片(我还没有告诉你怎么做对或做错,一会说):  这是对的吗?在现实生活中,这个玻璃球看起来很奇怪,然而这是错误的,世界应该颠倒且没有奇怪黑色的东西。我

2021-11-12 23:09:02 385

原创 Ray Tracing in one weekend:chapter 8:金属

chapter 8:金属文章翻译  如果我们想让不同的物体有不同的材质,我们有一个设计的决策。我们可以有一个带有很多参数的通用材料,不同的材料类型仅取消其中的一些参数。这不是一个坏的方法,或许我们可以有一个抽象的材料类把行为封装起来,我喜欢后一种方法。在我们程序中,材料类需要做两件事情:   1.产生一束散射光线(或者说它吸入了入射线)   2.如果散射,表明光线需要衰减多少  这是之前建议使用的抽象类:  使用 hit_record 可以避免很多参数,因此我们可以在这里提供我们想要的任何信

2021-11-12 20:41:10 82

原创 Ray Tracing in one weekend:chapter 7:漫反射材料

chapter 7:漫反射材料文章翻译  现在我们有多个物体和基于每个像素的多束光线,我们可以制作一些看起来逼真的材料了,我们即将开始漫反射材料。有一个问题是我们是否可以混合和匹配形状和材料(因此我们可以给一个球体一种材料)或者如果把二者放在一起,几何形状和材料就紧密结合在一起(对于把几何和材料连在一起的程序对象来讲这是有用的).我将其分离——这在大多数渲染器是普遍的——但是注意其中的限制。  漫反射材质不会发出光线,只不过是呈现出其周围环境的颜色,但是他们会用自己内在的颜色来调节它。光线在漫反射表面

2021-11-12 20:04:57 224

原创 Ray Tracing in one weekend:chapter 6:抗锯齿

chapter 6:抗锯齿文章翻译  当真实的照相机拍一张照片时,在物体边缘通常是没有锯齿的,因为边缘像素混合了一些前景色和背景色。我们可以通过对每个像素的许多样本的颜色取平均值来达到这个效果。我们不用担心分层,尽管这有争议,但是在我的项目里很常见。这对一些光线追踪来说是关键的,尽管我们写下通用的那种也不会收益很多,况且会让我们的代码看起来丑陋。我们把相机类抽象出来,因此我们过后能够制作一个炫酷的相机。  我们需要一个随机数生成器,这能够返回真实的随机数值。c++没有传统上的标准随机数生成器,但是很多

2021-11-12 14:48:38 237

原创 Ray Tracing in one weekend:chapter 5:表面法线和多个物体

chapter 5:表面法线和多个物体文章翻译  首先,让我们得到球体表面法线,通过这个可以制造阴影。这是一个与球体表面垂直的向量,通常来说,是指向外面的。一个设计上的决策是,是否让这些法线为单位向量,为了能方便的制造阴影,我的回答是是的,但是我不强迫你们在代码里一定要这样。这可能会允许出现细微的错误,因此请注意这是个人的喜好,就如之前许多的设计决定那样。对于一个球体来说,法线的方向是光线击中点与球心相减:  在地球上,这暗示着这个向量是地球中心到你的位置并竖直向上。让我们在代码里实现这个想法,并制

2021-11-12 14:11:18 117

原创 Ray Tracing in one weekend:chapter 4:添加一个球体

chapter 4:添加一个球体文章翻译  让我们一起给光线追踪器添加一个简单的物体,人们经常在光线追踪中使用球体,因为计算光线是否击中球体是非常简单的。回忆一下球体中心在原点且半径为R的方程式,x * x + y * y + z * z = R * R. 你所读到的方程对任何的(x,y,z)都适用,如果这个等式成立,则点在球体上,否则点就不在球体上,如果球体中心在(cx,cy,cz),则方程式就变得难看: (x-cx) * (x-cx) + (y-cy) * (y-cy) + (z-cz) * (z-

2021-11-12 12:46:59 75

原创 Ray Tracing in one weekend:chapter 3:光线,一个简单的相机和背景

chapter 3:光线,一个简单的相机和背景文章翻译  所有的光线追踪器都有一个ray class,并且能计算出沿着光线所能看见的颜色。让我们把光线当成一个函数,P(t)=A + tB*. 这里的 P 是三维空间中沿着光线的一个三维坐标点,A 是光线起始点,B 是光线的方向。光线函数的参数 t 是一个真实值(在代码里面是float类型)。输入不同的 t ,P 就会沿着光线运动,使用 -t,你就可以达到3维空间中直线的任何位置。对于 +t 来说,你只能得到点 A 的前面部分,这也就是经常说的线的一半或光

2021-11-11 23:56:41 243

原创 Ray Tracing in one weekend:chapter 2:三维向量类

chapter 2:三维向量类文章翻译  几乎所有的图形学程序都有一些类用来存储几何向量和颜色。在很多的系统中,这些向量是4维的,对于我们来说,3个坐标就足够了。我们将使用同一个类vec3来存储颜色、坐标、方向、偏移量以及其他的东西。一些人不喜欢这样,因为这无法避免你做出一些愚蠢的操作,如把颜色添加给坐标这样的操作。他们持有一个好的观点,但是在没有明显错误的情况下,我们将总是向着"更少的代码"方向进行。  这里是我的vec3类的一部分,我在这里面使用float,但是项目中的某些地方我使用double,

2021-11-11 22:23:04 105

原创 Ray Tracing in one weekend:chapter 1:输出一张图片

chapter 1:输出一张图片内容简介  第一章内容就是选用一种工具来显示图片,之前浏览过师兄的博客,这里同样也使用glut#include <stdlib.h>#include <glut.h>#define Width 1200#define Height 600unsigned char *Pixels;void Draw(void) { glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_

2021-11-11 21:47:28 122

原创 Ray Tracing in one weekend:chapter 0:概述

chapter 0:概述文章翻译在过去的几年,我教过很多图形学课程。我通常让他们学习光线追踪,因为可以在没有使用API接口的情况下,亲手写下所有的程序代码,并得到一张很炫酷的图片。我决定在这门课程里,教你如何尽可能快速的实现一个炫酷的程序。这或许不是一个功能齐全的光线追踪器,但是它确实能间接照明,这使得光线追踪成为电影里的主要内容。跟着这些步骤走,如果你对光线追踪感兴趣并想实现它,你所构建的光线追踪器框架能够扩展为功能更丰富的光线追踪器。当某些人说,"光线追踪"可能意味着很多事情。而我要描述的是这只是

2021-11-11 21:09:34 491

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除