总览 到目前为止,我们已经学习了如何使用矩阵变换来排列二维或三维空间中的对象.所以现在是时候通过实现一些简单的变换矩阵来获得一些实际经验了.在接下来的三次作业中,我们将要求你去模拟一个基于CPU 的光栅化渲染器的简化版本. 本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵.给定三维下三个点v0(2.0, 0.0,−2.0), v1(0.0, 2.0,−2.0), v2(−2.0, 0.0,−2.0), 你需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形.简而言之,我们需要进行…
总览 在上次作业中,虽然我们在屏幕上画出一个线框三角形,但这看起来并不是那么的有趣.所以这一次我们继续推进一步--在屏幕上画出一个实心三角形,换言之,栅格化一个三角形.上一次作业中,在视口变化之后,我们调用了函数rasterize_wireframe(const Triangle& t). 但这一次,你需要自己填写并调用函数 rasterize_triangle(const Triangle& t).该函数的内部工作流程如下: 创建三角形的2 维bounding box. 遍历此bound…
总览 在这部分的课程中,我们将专注于使用光线追踪来渲染图像.在光线追踪中最重要的操作之一就是找到光线与物体的交点.一旦找到光线与物体的交点,就可以执行着色并返回像素颜色. 在这次作业中,我们要实现两个部分: 光线的生成 光线与三角的相交. 本次代码框架的工作流程为: 从main 函数开始.我们定义场景的参数,添加物体(球体或三角形)到场景中,并设置其材质,然后将光源添加到场景中. 调用Render(scene) 函数.在遍历所有像素的循环里,生成对应的光线并将返回的颜色保存在帧缓冲区(frame…
总览 Bézier 曲线是一种用于计算机图形学的参数曲线. 在本次作业中,你需要实现de Casteljau 算法来绘制由4 个控制点表示的Bézier 曲线(当你正确实现该算法时,你可以支持绘制由更多点来控制的Bézier 曲线). 你需要修改的函数在提供的main.cpp 文件中. bezier:该函数实现绘制Bézier 曲线的功能. 它使用一个控制点序列和一个OpenCV::Mat 对象作为输入,没有返回值.它会使t 在0 到1 的范围内进行迭代,并在每次迭代中使t 增加一个微小值.对于…
总览 在这次编程任务中,我们会进一步模拟现代图形技术.我们在代码中添加了Object Loader(用于加载三维模型), Vertex Shader 与Fragment Shader,并且支持了纹理映射. 而在本次实验中,你需要完成的任务是: 修改函数rasterize_triangle(const Triangle& t) in rasterizer.cpp: 在此处实现与作业2 类似的插值算法,实现法向量.颜色.纹理颜色的插值. 修改函数get_projection_matrix() in…
作业描述 给定一个点P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移(1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算). UE4 知识点 主要矩阵 FMatrix FBasisVectorMatrix FLookFromMatrix FOrthoMatrix FReversedZOrthoMatrix FPerspectiveMatrix FReversedZPerspectiveMatrix FScaleMatrix FTranslationMatrix FRotationT…
光栅化 Viewport Transform(视口变换) 将经过MVP变换后得到的单位空间模型变换到屏幕上,屏幕左边是左下角为原点. 所以视口变换的矩阵 \[M_{viewport}=\begin{pmatrix} \frac{width}{2}&0&0&\frac{width}{2}\\ 0& \frac{height}{2}&0&\frac{height}{2}\\ 0&0&1&0\\ 0&0&0&1 \e…
目录 一.DDA 二.Bresenham 三.绘制图形 1. 绘制直线 2. 绘制圆 3. 绘制椭圆 一.DDA DDA算法是最简单的直线绘制算法.主要思想是利用直线的斜截式:\(y=kx+b\) 对于一条直线的绘制,往往会给定两个端点:\(P_A = (0,0)\)和\(P_B = (60,60)\) 然后调用函数:OLED_DrawLine(0, 0, 60, 60); 首先,我们来看一下绘制直线都可以用哪些方法. 确定了两个端点,那么两个端点之间的点如何确定? 第一个可以想到:知道了两个点…
回顾Games101 chatper1 - 6 前言 本文只写回顾后重新加深认识的知识 透视除法的意义 经过MVP矩阵之后,将模型空间下某点的坐标,转换成了裁剪空间下的坐标,此时因为裁剪空间的范围是x∈[-W/2,W/2]和y∈[-H/2,H/2],所以经过以下两个变换,其中除以pz就是透视除法 一: \[-1≤2·\frac{\left( \frac{p_x}{p_z}·near \right)}{w}≤1 \\ -1≤2·\frac{\left( \frac{p_y}{p_z}·near \…
决定实现一个基于显卡的光栅化渲染器,能将一些基于显卡的新算法融入其中.…
尝试用windows GDI实现了一个简单的软光栅化渲染器,把OpenGL渲染管线实现了一遍,还是挺有收获的,搞清了以前一些似是而非的疑惑. ----更新2015-10-16代码已上传.gihub地址:https://github.com/wantnon2/gdi3d qq群:519196868 ----更新2015-10-141,实现了线框模式的精确消隐.2,实现了纹理双线性滤波.3,添加了镜面光.截图: ----2015-10-9做了有一周了,现在已经实现了主要功能.过几天等有时间我会将实现…
在看完Real-Time Rendering后,我决定动手实现一个软件的光栅化渲染器.我就称它为Augustus计划吧. 计划使用MFC和GDI+来做它的UI.可以访问GitHub来查看它的源代码.…
光栅化的过程就是把三维世界中的物体转换成屏幕上像素的过程. glGetfloatv();    --------v表示的是数组 gles2.0里面有两种绘图命令.glDrawArrays和glDrawElements; glDrawElements比glDrawArrays性能好的性能好的原因是 glDrawElements可以顶点复用. 顶点经过vertet shader处理之后,进入图元装配阶段.此时的顶点被认为是在clipping coordinate之中. 光栅化之后,会产生基于wind…
前言 虽然这一部分的内容主要偏向于混合(Blending),但这里还需提及一下,关于渲染管线可以绑定的状态主要有如下四种: 光栅化状态(光栅化阶段) 采样器状态(像素着色阶段) 混合状态(输出合并阶段) 深度/模板状态(输出合并阶段) Direct3D是基于状态机的,我们可以通过修改这些状态来修改渲染管线的当前行为. 实际上这一章会讲述光栅化状态和混合状态这两个部分,在后续的章节会主要讲述深度/模板状态 DirectX11 With Windows SDK完整目录 Github项目源码 欢迎加入…
图元是能够被OpenGL ES 绘制的几何物体,如三角形.线条或者精灵.在图元组合过程 中,对每个图元必须判断是否位于投影 截体内,如果图元不完全在平截体内部,将被视图平截体剪贴,如果完全在平截体外,将被 丢弃,然后顶点位置被转变为屏幕坐标,剔除操作也能够舍弃一些图元,依据图元位于正面 还是背面,剪切和剔除后,图元进入光栅化阶段.     光栅化是转化图元为二维片段的过程,被片段着色器执行,二维的片段像素能 够被绘制在屏幕上.…
使用场景:稳定的视图(layer)被反复使用或进行动画: 本质:牺牲内存解放cpu: 反例:牺牲内存牺牲cpu. 单次使用或者视图有变动,shouldRasterize不会有任何用途,反而会牺牲内存. shouldRasterize会触发离屏渲染,所以会降低一次性渲染的效率. Bottom line if you have a complex view (i.e. relatively expensive to re-render) that you are animating, but for…
光栅化——死神来了……   前言:在上一期的GPU大百科全书里,我们目睹了可爱的香草从抽象世界走向现实,从方程还原成实体的全过程.可以说香草活了,因为几何单元,我们赋予了她完整的灵魂. 如果你正在为GPU图形单元创造鲜活形象而感到欣喜和雀跃,那我建议你最好先做好与之相反的心理准备,因为今天关于GPU的话题会很沉重,我们将目睹一个生命被凝固的全过程,也就是几何单元之后的图形过程——光栅化. ● 几何之后真的再无几何 几何过程结束之后,图形的世界是充满了欢笑的.得益于几何单元的精细调整,可爱的香草在…
光栅化规则不是唯一的,只要能满足在扫描线填充过程中,对于一条分割线两边的像素能够被不重复不遗漏地填充即可. 在gdi3d中目前使用的是下面光栅化规则: xLeft_int=ceil(xLeft-0.5)xRight_int=ceil(xRight-1.5)yTop_int=ceil(yTop-1.5)yBottom_int=ceil(yBottom-0.5) 下面验证上面规则是满足不重复不遗漏的,如图: 先验证纵向上不重复不遗漏: (1),假设上面三角形的yBottom=0.5,则下面与之共边的…
https://www.zhihu.com/question/29163054   光栅(shan一声)化(Rasterize/rasteriztion).这个词儿Adobe官方翻译成栅格化或者像素化.没错,就是把矢量图形转化成像素点儿的过程.我们屏幕上显示的画面都是由像素组成,而三维物体都是点线面构成的.要让点线面,变成能在屏幕上显示的像素,就需要Rasterize这个过程.就是从矢量的点线面的描述,变成像素的描述.如下图,这是一个放大了1200%的屏幕,前面是告诉计算机我有一个圆形,后面就是…
原文:DirectX11 With Windows SDK--07 添加光照与常用几何模型.光栅化状态 前言 对于3D游戏来说,合理的光照可以让游戏显得更加真实.接下来会介绍光照的各种分量,以及常见的光照模型.除此之外,该项目还用到了多个常量缓冲区,因此还会提及HLSL的常量缓冲区打包规则以及如何设置多个常量缓冲区. DirectX11 With Windows SDK完整目录 Github项目源码 除此之外你还需要了解下面内容: 章节内容 深入理解HLSL常量缓冲区打包规则 欢迎加入QQ群:…
老师:MissDu 提交作业 1.将DFA最小化:教材P65 第9题 答: 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 3.自上而下语法分析,回溯产生的原因是什么? 答:文法的产生式有公共左因子. 4.P100 练习4,反复提取公共左因子. S→C$ C→bA|aB A→a|aC|bAA B→b|bC|aBB 答:…
1.将DFA最小化:教材P65 第9题 Ⅰ {1,2,3,4,5} {6,7} {1,2}b={1,2,3,4,5} 3,4}b={5} {6,7} Ⅱ {1,2}{3,4}{5} {6,7} 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 正规式:S → 0(1S|1)|1(0S|0) →01S | 01 | 10S | 10 →(01 | 10)S | (01 | 10) →(01 | 10)*(01 | 10) 转化DFA 0 1 0 ε{x}={xAD…
game101的透视投影的投影矩阵是这样的 正交投影是这样的 而shader入门精要的透视投影矩阵是这样子 正交投影矩阵是这样子 game101的透视投影是这样得到的 而正交投影的时候并没有假设中心点在面的中心 所以区别在于正交投影的时候有没有进行一步位移操作. 可能引起误导的地方 书上投影矩阵这样表示 而101则是认为转换成了正方体,但其实他的w是z,所以按照书上的来看,他也还没有进行归一化. 矩阵最后一行的1乘上z就会导致w变为z.看推导过程也能知道 再来看入门精要. 除了w之后,就当成是一…
参考:https://blog.csdn.net/u013733326/article/details/79907419 希望大家直接到上面的网址去查看代码,下面是本人的笔记 我们需要做以下几件事:   1. 分割数据集   2. 优化梯度下降算法:      2.1 不使用任何优化算法      2.2 mini-batch梯度下降法      2.3 使用具有动量的梯度下降算法      2.4 使用Adam算法 到目前为止,我们始终都是在使用梯度下降法学习,本文中,我们将使用一些更加高级的…
So, shouldRasterize will not affect the green/red you see using Instruments. In order to have everything green, you'll need to not use transparency and have all your child objects be opaque. Sometimes its unavoidable to still have red areas depending…
1,opengl viewport原点在左下角,而gdi画图api原点在左上角,所以在实现了整个opengl管线,最后将点通过gdi函数画到屏幕时要进行临时转化. 2,注意gdi画点的api传入的颜色值如果超出[0,255]范围,gdi并不会将其clamp,而是会显示异常,所以在传入gdi的画点api之前,一定要手动对颜色值进行clamp,使其不超出[0,255].…
研究了好几天基本的图形学,对于光栅化的大致过程有点了解了,很感谢网上的很多大牛的无私奉献,我就写一下这几天的总结,希望也能对网络上的知识做出一点点点的贡献. 屏幕有什么特点,无非是一排排的像素点,每个像素点只能用来显示一种颜色而已,所以可以理解为是一个表示颜色的二维数组. 如何在二维屏幕上显示3D世界,其实就是利用几何知识把3D坐标投影到2D坐标上.一个3D模型有很多顶点,把每个顶点投影到2D坐标上,保持原有的顶点连线,就是一个3D网格.具体的图形变换都是使用矩阵乘法来做的(有时也使用四元数表示…
概述+线性代数 为什么学习图形学? Computer Graphics is AWESOME! 主要涉及内容: 光栅化 曲线和网格 光线追踪 动画与模拟 Differences between CG and CV: 线性代数回顾 向量(Vectors) 方向和长度 模长:\(||\vec{a}||\) 没有确定的起点 单位向量:模长为1 单位化向量: \(\hat{a} = \vec{a}/||\vec{a}||\) 向量求和: 列向量,转置,模长的计算方式 \(\boldsymbol{A} =…
作业任务: 填写并调用函数 rasterize_triangle(const Triangle& t). 即实现光栅化 该函数的内部工作流程如下: 创建三角形的 2 维 bounding box. 遍历此 bounding box 内的所有像素(使用其整数索引).然后,使用像素中 心的屏幕空间坐标来检查中心点是否在三角形内. 如果在内部,则将其位置处的插值深度值 (interpolated depth value) 与深度 缓冲区 (depth buffer) 中的相应值进行比较. 如果当前点更…
这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业不是百度来的,我只是百度了一些示例代码的意思,怎么用!算了,越解释万一越黑呢!哈哈O(∩_∩)O哈哈~) ----------------------------------------------------------------分界线------------------------------…