顶点坐标

unity shader之预备知识

北城以北 提交于 2019-12-26 20:09:18
1.渲染流水线 任务:从一个三维场景出发,生成(或者渲染)一张二维图像。即:计算机需要从一系列的定点出数据,纹理等信息出发,把这些信息最终转换程一张人眼可以看到的图像。而这个工作通常是由CPU和GPU共同完成的。 三个阶段: (1)应用阶段(CPU):1.准备场景数据。2.粗粒度剔除工作。3设置模型的渲染状态,输出渲染所需要的几何信息. 应用阶段大致可以分为三个阶段: 1.把数据加载到显存中。 2.设置渲染状态。渲染状态:定义场景中的网格是怎样被渲染的。如:使用那个顶点着色器/片元着色器。 3.调用DrawCall。DrawCall是一个命令,发起方为CPU,接收方为GPU。 (2)几何阶段:把定点坐标变换到屏幕空间中,再交给光栅器进行处理。对输入的渲染图源进行多部处理后,将会输出屏幕空间的二维顶点坐标,每个定点对应的深度值,着色等相关信息。 (3)光栅化阶段:产生屏幕上的像素,并渲染最终的图像。光栅化的任主要是决定每个渲染图源中的那些像素应该被绘制再屏幕上。对上一阶段得到的逐定点数据进行插值,然后再进行逐像素处理。 为了避免我们看到的那些正在进行光栅化的图元,GPU会使用双重缓冲策略(前置缓冲,后置缓冲)。当场景被渲染到后置缓冲中,GPU会交换前后置缓冲中的内容,前置缓冲事之前显示在屏幕上的图像。 (1)顶点着色器:处理单位是顶点,输入进来的每个定点都会调用一次定点着色器

Direct3D基础(顶点坐标变换)

我的梦境 提交于 2019-12-26 20:07:06
开始的话:顶点坐标变换时Direct3D学习中的入门基础,在这里将详述其原理: Direct3D中渲染三维对象的过程分为两个阶段:《1》T&L(Transforming and Lighting),即坐标变换和光照; 《2》光栅化处理阶段。 一,T&L流水线: 如下图: 1,世界变换和世界坐标系( 局部坐标变为世界坐标 ): 物体在三维空间中的变形和运动的过程称为世界变换(平移,旋转,缩放),这个三维空间就是世界空间,其坐标系就是三维坐标系 世界变换 事实上就是将物体顶点从模型空间转换到世界空间中,模型空间其实就是在三维设计软件(如3DSMAX)中为物体设定的坐标系,也称局部坐标系。而世界坐标则是所有物体都是用同一个世界坐标原点的坐标系,变换就是指对模型进行平移,旋转,缩放及它们的任意组合变换。 使用以下公式对点P1进行世界变换。 P2(X,Y,Z,1)= dot( P1(X,Y,Z,1), M ) M 为世界变幻矩阵,它实现物体的平移,旋转,缩放,dot为点乘,P2为变换后的坐标,p1为变换前的坐标。 以下为实现世界坐标矩阵变换的DirectX代码(C++): D3DXMATRIX matWorld; // 世界变换矩阵 D3DXMATRIX matTranlate,matRotation,matScale; // 变换矩阵,旋转矩阵,缩放矩阵 D3DX

笨办法读RTR4(翻译) Real-Time Rendering 4th : Chapter 3 - The Graphics Processing Unit(下)

≡放荡痞女 提交于 2019-12-26 01:17:59
赶在 2019 结束之前把第三章结束,提前祝大家新年快乐! 实时渲染(第四版)Real-Time Rendering (Fourth Edition) 第3章 图形处理单元(GPU) Chapter 3 The Graphics Processing Unit 3.7 几何着色器 The Geometry Shader 几何着色器可以将图元转换为其他图元,而这在细分阶段是无法完成的。 例如,可以通过让每个三角形创建线边缘,将三角形网格转换为线框视图。 或者,可以将这些线替换为面向观察者的四边形,从而使线框渲染的边缘更粗 [1492] 。几何着色器是在2006年底随DirectX 10发行版添加到硬件加速的图形管道中的。它位于管道中的细分着色器之后,并且可以选择使用。 虽然是Shader Model 4.0的必需部分,但在较早的着色器模型中未使用它。 OpenGL 3.2和OpenGL ES 3.2也支持这种类型的着色器。 几何着色器的输入是单个对象及其关联的顶点。 对象通常由带状( strip ),线段( line segment )或点( point )构成的三角形所组成。 扩展的图元可以由几何着色器定义和处理。 特别是,可以传入三角形外部的三个附加顶点,并且可以使用折线上的两个相邻顶点。 参见图3.12。 使用DirectX 11和Shader Model 5.0

Shader之小白入门学习七

本秂侑毒 提交于 2019-12-23 17:57:20
Shader之小白入门学习七 前言 上一篇中学习了变量的来龙去脉,在本篇中继续深入了解顶点片段着色器,但是在此之前还是需要大概了解下渲染管线的相关知识点。 渲染管线 图形渲染管线之所以被叫做 管线 ,就是因为它和一根管子的概念很像,我们可以理解为这根管子的末端连接的是我们最终的显示屏幕,管子的起始端连接的是我们的原始素材。 把我们想展示在屏幕上的素材从起始端放入,然后素材通过管子经过一系列操作最终战士在屏幕上。 而我们如果想加工一下素材最后的显示效果就可以在这根管子中最一些特殊的操作处理,以使素材经过我们所定义的操作使其最终达到我们想要的效果。 这根管子从头到尾大致流程可以分为以下三个大阶段(概念上): 应用程序阶段 (The Application Stage) 就是我们的原始素材准备阶段,包括我们的模型,贴图,相机和光源等,经过这个阶段会将所有的素材转换成渲染图元并提交到下一阶段中(几何阶段)。 几何阶段 (The Geometry Stage) 主要是对上一阶段中传过来的数据进行顶点上的加工处理,包括各种矩阵转换与顶点着色等,最后处理完成后会输出屏幕空间的二维顶点坐标,顶点着色等信息,并再提交到下一阶段(光栅化阶段)。 光栅化阶段 (The Rasterizer Stage) 经过几何阶段处理完后输送到光栅化阶段,从像素级别上对每个像素进行加工处理,最终显示在屏幕上。 结构体

矩阵运算

亡梦爱人 提交于 2019-12-23 11:21:45
二、 矩阵运算 1. 什么是矩阵 矩阵就是由多组数据按方形排列的阵列,在 3D 运算中一般为方阵,即 M*N ,且 M=N ,使用矩阵可使计算坐标 3D 坐标变得很方便快捷。下面就是一个矩阵的实例: 看似没什么特殊的,可是后面你可以看到矩阵的魅力,为什么矩阵这么有效,我也不知道,这个由数学家去论述,我们只要可以用就是了。 2. 向量的点乘和叉乘 向量的点乘和叉乘与矩阵一样是数学定义,点乘在矩阵运算中起到很重要的作用,称为内积,叉乘称为外积,通过叉乘运算可以计算出一个向量,该向量垂直于由两个向量构成的平面,该向量也称为该平面的法线。这两个计算方法在 3D 运算中的作用就是向量计算工具。 l 点乘公式 其实就是两个向量的各分量相乘后形成新的向量 l 叉乘公式 Uc=U1* U2 两个向量进行叉乘的矩阵如下: 其中 x1 , y1 , z1 以及 x2 , y2 , z2 分别为向量 U1 和 U2 的分量,设 UC 为叉乘的向量积,其计算公式如下: 3. 三维几何变换矩阵 几何绘图中,常常需要将一个模型从一个位置移动到另一个位置,或者将模型进行缩放旋转,称为几何变换。每个模型都存在一个局部的坐标系,在制作模型的时候是不考虑模型在场景中的具体位置的,模型中的所有顶点的坐标值都相对于局部坐标系,而模型在应用中会发生很多变化,其中大部分情况都是由多种变化复合的结果,这些变化涉及很多复杂的运算

图形学笔记1----基本概念

随声附和 提交于 2019-12-22 17:01:38
边学边记,现在先看的shader入门精要,书上的内容以及自己的理解,以后会慢慢完善 一.渲染管线(渲染流水线) 就是一个物体展示到屏幕的整个过程,分为三个阶段:应用阶段,几何阶段,光栅化阶段 1.应用阶段 这个阶段是准备数据阶段,例如摄像机位置,场景中包含的模型,使用的光源,以及把不可见的物体剔除出去等等。设置每个模型的渲染状态,这些渲染状态包括但不限于使用他的材质。最重要的是渲染所需的几何信息,即渲染图元(一般是点,线面等) 2.几何阶段 这个阶段由几部构成:顶点着色器,曲面细分着色器,几何着色器,裁剪,屏幕映射 顶点着色器(完全可编程): 它的输入来自CPU,处理单位是顶点,本身无法创建或者销毁顶点,无法取得顶点与顶点之间的关系。 主要的工作是: 坐标中变换和逐顶点光照。最基本的完成顶点由模型空间到其次裁剪空间的转换。 曲面细分着色器(可选) :用于细分图元 几何着色器:(可选): 逐图元着色操作,用于产生更多的图元 裁剪(可配置,不可编程): 将不在摄像机内的顶点剔除掉 屏幕映射(不可配置和编程): 负责将图片的坐标转换到屏幕坐标系 这一阶段最终输出的是:屏幕坐标系下的顶点位置以及它们相关的额外信息,如深度值,法线方向,视角方向等 3.光栅化阶段 这个阶段有几部分构成:三角形设置,三角形遍历,片元着色器,逐片元操作 最重要的目标是:计算每个图元覆盖了哪些像素

OpenGL 状态管理和绘制几何体

╄→尐↘猪︶ㄣ 提交于 2019-12-20 23:39:58
  虽然使用OpenGL可以绘制复杂、有趣的图形,但这些图形都是由几种基本图元构成的(达芬奇的作品都是使用画笔和画刷完成的)。   最抽象角度看,三种基本的绘图操作:清空窗口、绘制几何体和绘制光栅物体。光栅物体包括二维图像、位图和字符字体等。   OpenGL中,除非特别声明,否则调用绘图函数后,将立刻绘制指定的物体。这看似理所当然,但在有些系统中,首先建立一个要绘制的物体列表,然后命令图形硬件绘制列表中的物体。前一种方式被称为直接模式,OpenGL中默认采用这种模式。除直接模式外,还可以将命令存储在列表中,供以后使用。直接模式更易于编程,但显示列表的效率更高。    绘图补救工具箱(为什么叫这个名字)   1.清空窗口 :在计算机屏幕上绘制不同于在纸上绘图。纸张最初是白色的,只需绘图即可;在计算机上,存储图像的内存中通常包含最后绘制的图像,因此在绘制新场景之前,需要使用某种背景颜色将其清除。为什么要清屏而不绘制一个足够大、颜色适当的矩形来覆盖整个窗口?首先,清屏函数的效率比绘图绘图函数高得多;其次OpenGL允许程序员随意地设置坐标系、观察位置和观察方向,因此要指定一个大小和位置合适的清屏矩形是极其困难的;最后,在很多计算机上,图形硬件中除了存储像素颜色的缓存外还包含多个其他的缓存。这些缓存也必须随时进行清楚,如果能用一条命令清楚所有缓存将会非常方便。   另外

计算几何-经典算法-凸包

本小妞迷上赌 提交于 2019-12-17 21:28:07
  在学习了一些有关计算机几何的基础知识和一些基本工具之后要快速的解决一些简单的几何问题,如两点之间的距离、两线段的交点个数等等是可以轻松应付的,但是对于复杂点的几何问题,我们还是要有更好的算法,这样才可以更高效的解决它。在这一篇中来总结 平面凸包 的 Graham算法; http://www.cnblogs.com/jbelial/ 平面凸包 : 定义: 对一个简单多边形来说,如果给定其边界上或内部的任意两个点,连接这两个点的线段上的所有点都被包含在该多边形的边界上或内部的话,则该多边形为凸多边形 。 在解决平面凸包下面介绍了两种算法: 一、 Graham 扫描法,运行时间为 O(nlgn) 。 二、 Jarvis 步进法,运行时间为 O(nh),h 为凸包中的顶点数。 例题 1 1 问题描述1: 2 求覆盖平面上n 个点的最小的凸多边形。也可以这样描述:给定一个连接的多边形,可能是凸多边形,也有可能是凹多边形。现在,你的任务就是编程求这个多边形的最小凸包。如果它本身是凸多边形,那么最小凸包就是它本身。 3 数据范围: 4 多边形顶点坐标X,Y 是非负整数,不超过512。 5 输入: 6 共有K 组数据,每组测试数据的点都是按逆时针顺序输入的,没有3 个点共线。 7 每组测试数据的第1 行是N,表示有N 个点。以下N 行,每行两个整数X,Y。 8 输出: 9

多边形扫描算法

混江龙づ霸主 提交于 2019-12-17 16:52:37
一、多边形的扫描转换 一、 1 、 定义 :把多边形的顶点表示转化为点阵表示(就是已知多边形的边界,如何找到多边形内部的点,即把多边形内部填上颜色) 2 、 表示方法 :顶点表示和点阵表示 3. 顶点表示 : 是用多边形的顶点序列来表示多边形。 优点:这种表示直观、几何意义强。占内存少,易于进行几何变换。 缺点:没有明确指出哪些像素在多边形内,故不能直接用于面着色。 4、 点阵表示 :用位于多边形内的像素集合来刻画多边形 优点:是光栅显示系统显示时所需的表现形式 缺点:丢失了许多几何信息(如边界,顶点等) 5. 多边形分类 : 1>凸多边形:任意两点的连线均在多边形内 2>凹多边形:两顶点的连线有可能不在多边形内 3>含内环的多边形:多边形内包含多边形 多边形扫描算法对这三种多变形均应满足。 二、X- 扫描线算法 1、基本思想:按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的像素,即完成填充工作。 2、算法核心: 按 X 递增顺序排列交点的 X 坐标序列 3、算法步骤: 1> 确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大的 y 值 2>从Ymin 到 Ymax, 每次用一条扫描线进行填充 3> 对一条扫描线进行填充可分为 4 个步骤: A、求交:计算扫描线与多边形各边的交点 B、排序:把所有交点按递增顺序进行排序 C、交点配对

OpenGL ES入门之顶点缓冲区对象相关

天大地大妈咪最大 提交于 2019-12-15 04:03:20
顶点属性的概念、如何指定它们和它们支持的数据格式、如何绑定顶点属性以用于顶点着色器、在OpenGL ES 3.0中用顶点属性绘制图元的方法 顶点属性 顶点属性:顶点数据,指定每个顶点的数据,这种逐顶点可以为每个顶点指定,也可用于所有顶点的常量,例如一个纯色三角形具有固定颜色的顶点和逐顶点位置属性。 所有OpenGL ES 3.0实现必须支持最少16个顶点属性,可以通过 glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, maxVertexAttribs, 0); 查询支持的顶点属性数量 常量顶点属性:对于一个图元的所有顶点只需指定一个值,glVertexAttrib*命令用于加载index(通用顶点属性索引)指定的顶点属性 顶底数组指定每个顶点的属性,是保存在应用程序地址空间的缓冲区,是顶点缓冲对象的基础,提供指定顶点属性数据的一种高效灵活的手段,顶点数组常使用glVertexAttribPointer函数指定,对于该函数最后一个参数,如果使用的顶点数组保存顶点数据,则存放顶点数组名,如果使用顶点缓冲区对象,则存放该缓冲区内的偏移量;对于使用glVertexAttribPointer函数指定顶点数组的程序,需在调用glDraw 方法前,对属性调用glEnableVertexAttribArray()方法进行使能启用,同时调用glDraw