计算机图形学

Unity3D 开发之shader教程(浅谈GPU渲染入门)

前提是你 提交于 2020-01-31 01:15:23
  尊重他人智慧成果,欢迎转载,请注明作者 心若透明,原文地址 http://www.cnblogs.com/ubanck/p/4109411.html   这篇随笔,就不按照各种专业的解释来描述了,完全看自己发挥吧,写到哪儿算哪儿。若是哪里有说的不对的地方,请各位看官直说无妨!   说到游戏研发,就不可避免会提到图形学,图形学里面细去研究,就会牵涉到各种各样的数学知识,向量,矩阵之类的!而到这儿,咱们先开始从shader谈起,什么是shader?咱们通常说写个shader,其实也就是写了一个执行某种功能的程序,跟你写个普通的程序原理上说一样的,而不同之处在于,shader是写个GPU执行的,说到GPU执行,那么就得谈到3D游戏里面的那些人物啊,花鸟啊,是怎么看到的,或者说的专业一点,叫做渲染出来的!   如果在2D上面,很简单,完全可以看作是一张图贴在屏幕上就OK。在3D上面,就复杂了一点,首先,我们的屏幕上2D的,不像现实世界,是三维空间!那么怎么在屏幕上画东西才能看上去有3D效果呢,你可以试试在纸上画一个立方体,学过数学都会画,你第一眼看上去就会觉得这是3D的,而不是一个简单的矩形!     模型坐标系:在计算机的3D世界里,也是通过这样一种东西来实现了3D效果。如果在计算机屏幕上面绘制3D模型,那么我们首先在3D软件上制作出这个模型,这个模型会有一个原点,来建一个坐标系

OpenGL介绍

拟墨画扇 提交于 2020-01-19 14:04:57
  OpenGL (英语: Open Graphics Library ,译名: 开放图形库 或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。 OpenGL的高效实现(利用了图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。   OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems

OpenGL ES for Android

假装没事ソ 提交于 2020-01-18 18:56:56
经过半年的准备OpenGL ES for Android系列文章终于要和大家见面了,在这里定一个小目标-先吸引1000个粉丝,万一实现了呢。写关于OpenGL ES的文章开始是有一些犹豫的,因为OpenGL ES的一些概念非常晦涩难懂,很多需要懂得计算机图形算法学相关的知识,您可能学了很久都找不到门道,知其然不知其所以然是常有的事。 本系列的文章并不会深入的研究计算机图形算法相关的知识,而是从工程的角度出发,解决实际项目中遇到的问题。此系列文章都是在Android的环境下实现的,如果有需要OpenGL ES for IOS的大家可以在评论或者公众号里面留言,文章的末尾有我的微信及公众号,我会根据大家的需求整理OpenGL ES for IOS,不管是Android还是IOS,OpenGL ES 相关的概念是相通的,API也都是大同小异。 下面是OpenGL ES for Android系列文章的目录,此目录不是固定的,大家有想了解的技术点或者想实现的功能可以在评论里回复,我会优先更新大家关注的文章。 Shader Language 变量 结构体、数组 基本语句 函数 attribute uniform varing 精度限定 预处理 内置变量、常量 内置函数 概念及API说明 MVP矩阵 纹理映射-glTexParameteri说明 光照 法线矩阵 TBN矩阵 实战 绘制点 绘制线

计算机图形学笔记-光线跟踪

不问归期 提交于 2020-01-17 22:05:42
计算机图形学笔记-光线跟踪 光学跟踪思路 计算由 视点(相机)连接像素P(屏幕)中心 的光线 延长 后所碰到得第一个 物体的交点 (求交) 光线投射 Ray Casting 使用 局部光照模型 (如Phong)计算交点处 颜色值 沿交点处的 反射、折射 方向对光线进行 跟踪 (根据法向) 结束递归- 根据递归深度-在光线弹射到一定次数后停止3次左右 根据光线贡献-在光线贡献衰减到足够小的时候 光线跟踪特点 更容易表现处折射、反射、阴影的效果 更适用于复杂物体的表示(多边形网格或复合形体) 明暗效果仅仅由第一次相交的物体表面的法向方向、材质、视点和光照方向、以及光照强度等因素共同决定。 光线投射不考虑第二层以及更深的光线,因此不具有阴影、反射、折射效果。 镜面或透明才发生递归 光线跟踪求交算法 光线表示: Pt=R0+tRd R0是光源点,Rd光线朝向,t光线到达的位置,光线正方向上t为正。 平面表示: 显示表示:P0平面上一点,n平面法线 隐示表示:Hp=n.p+D=0点到平面距离 与三角形求交 计算光线与三角形所在平面的交 判断光线与平面的交点是否在三角形内部 添加纹理 以矩形表面为例 为矩形的四个顶点指定二维纹理坐标(建立对应关系-映射) 计算矩形内部与光线的相交的二维纹理坐标 使用该纹理坐标在纹理图上进行查找,根据查找结果赋予交点相应颜色

交互式计算机图形学:第一章 图形系统和模型

女生的网名这么多〃 提交于 2020-01-11 23:05:09
第一章 图形系统和模型 图形系统(Graphics System) –图形系统的主要元素 –帧缓存(Frame Buffer)保存像素;帧缓存的深度(Depth)或精度(Precision)是表示每个像素所用的比特数 –从几何实体到帧缓存中像素达到颜色和位置的转换称为光栅化(Rasterization) –输入设备:物理输入设备、逻辑设备 虚拟照相机模型(Syn­thetic-Camera Model) –投影线(Projector)是对象上一点到透镜中间的一条线 –投影中心(Center of Projection,COP)是透镜的中心 应用程序编程接口(Application Programming Interface,API) 图形绘制系统的体系结构 –图形绘制流水线 –顶点处理模块的主要功能:执行坐标变换和计算每个顶点的颜色值 –裁剪模块和图元组装模块的主要功能:裁剪和组装图元 –光栅化模块的主要功能:对每个图元输出一组片元(Fragment) –片元处理模块的主要功能:更新呢帧缓存中的像素 图形管线(Graphics Pipeline) –组成部分:建模(Modeling)管线和渲染(Rendering)管线 –建模管线 A)3D模型坐标系(3D Model Coordinates):use modeling transformations to put the

透视投影(Perspective Projection)变换推导

﹥>﹥吖頭↗ 提交于 2020-01-06 04:32:41
透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。 透视投影变换是令很多刚刚进入3D图形领域的开发人员感到迷惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐,对一些基础知识过分依赖,一旦对它们中的任何地方感到陌生,立刻导致理解停止不前。 没错,主流的3D APIs如OpenGL、D3D的确把具体的透视投影细节封装起来,比如gluPerspective(„) 就可以根据输入生成一个透视投影矩阵。而且在大多数情况下不需要了解具体的内幕算法也可以完成任务。但是你不觉得,如果想要成为一个职业的图形程序员或游 戏开发者,就应该真正降伏透视投影这个家伙么?我们先从必需的基础知识着手,一步一步深入下去(这些知识在很多地方可以单独找到,但我从来没有在同一个地 方全部找到,但是你现在找到了)。 我们首先介绍两个必须掌握的知识。有了它们,我们才不至于在理解透视投影变换的过程中迷失方向(这里会使用到向量几何、矩阵的部分知识,如果你对此不是很熟悉,可以参考 可以找到一组坐标(v1,v2,v3),使得 v = v1 a + v2 b + v3 c (1) 而对于一个点p,则可以找到一组坐标(p1,p2,p3),使得 p –

计算机图形学总复习(二)

不羁岁月 提交于 2019-12-23 13:35:02
计算机图形学期末总复习 第四章 向量 一、向量 The difference between two points is a vector. 两点之差为向量 The sum of a point and a vector is a point 点和向量之和为一个点 向量的线性组合: w = a1 * v1 + a2 * v2 + …+ am * vm 若a1 + a2 + a3 +…+ am = 1 ,则称为仿射组合 向量大小及向量归一化 二、点积 点积之后得到的结果是一个数 两个向量间的夹角 向量点积符号性 向量正交 正交投影和点到直线距离 两遍同时乘v 最终整理得到 沿v方向c的分量称为向量c投影到向量v上的正交投影 垂直于v方向上的分量称为c到直线的距离 反射 三、向量叉积(三维) 为了方便记忆,可以改写成以下 总结来说 叉乘的集合解释为: 当两向量平行或方向相反时叉乘结果为0 叉乘的性质 平面的法向量 平面内三个点(不在一条直线上)相减得出两个向量。两向量叉乘即得该平面的法向量。 点的仿射组合 点的线性组合(除仿射组合外)没有意义,但仿射组合有意义 点的变换,线性插值 内插 A为变换前坐标,B为变换后坐标,P(t)为t(0<=t<=1)时刻的坐标 推广 两次,三次内插产生的弧形 四、直线 直线方程 当0 <= t <= 1,为线段 当t >= 0,为射线 当-∞ <= t

OpenGL 状态管理和绘制几何体

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

计算机图形学 部分笔记

与世无争的帅哥 提交于 2019-12-20 13:56:16
用户域: 用户用来定义设计对象的平面或空间区域称为用户域,也称为用户空间.所采用的坐标系称为用户坐标系。 窗口区: 用户坐标系中需要进行观察和处理的一个坐标区域称为窗口区。(窗口区是用户区域的一部分)。 用户可以在用户域中指定任意的区域w,把他感兴趣的这部分区域内的图形输出到屏幕上。通常称(用户区域中的)这个区域为窗口区。 屏幕域:图形设备上用来输出图形的最大区域称之为屏幕域。它是有限的整数域,大小随具体设备而异。 视图区:用于显示某个窗口中图形的屏幕区域称为视图区(视区)。 说明:窗口是在用户坐标系中定义的,而视区是在设备坐标系(屏幕坐标系)中定义的。窗口定义了要显示什么,而视区定义在何处显示。 通常,窗口和视区都取为边与坐标轴平行的矩形。其它形状的窗口和视区有时也会采用,但其处理更为复杂。 Cohen-Sutherland裁剪算法(编码裁剪算法) (1)输入直线段的两端点坐标:p1(x1,y1)、p2(x2,y2),以及窗口的四条边界坐标: xl 、xr 、 yt和yb。 (2)对p1、p2进行编码:点p1的编码为code1,点p2的编码为code2。 (3)若code1|code2=0,对直线段应简取之,转(6);否则,若code1&code2≠0,对直线段可简弃之,转(7);当上述两条均不满足时,进行步骤(4)。 (4)确保p1在窗口外部:若p1在窗口内

OpenGL 资源汇编

泪湿孤枕 提交于 2019-12-20 13:49:33
本文收集和汇总了 OpenGL 的文档、教程和在线书籍,供学习和开发者參考。 OPENGL开发教程: http://www.linuxgraphics.cn/opengl/index.html OpenGL 教程 大名鼎鼎的 Nehe 教程: http://nehe.gamedev.net/ OpenGL 入门学习系列讲的很清楚,推荐。 OpenGL入门学习之中的一个——编写第一个OpenGL程序 OpenGL入门学习之二——绘制几何图形 OpenGL入门学习之三——绘制几何图形的一些细节问题 OpenGL入门学习之四——颜色的选择 OpenGL入门学习之五——三维的空间变换 OpenGL入门学习之六——动画的制作 OpenGL入门学习之七——使用光照来表现立体感 OpenGL入门学习之八——使用显示列表 OpenGL入门学习之九——使用混合来实现半透明效果 OpenGL入门学习之十——BMP文件与像素操作 OpenGL入门学习之十一——纹理的使用入门 OpenGL入门学习之十二——OpenGL片断測试 OpenGL入门学习之十三——OpenGL是一个状态机 OpenGL入门学习之十四——OpenGL版本号和OpenGL扩展 OpenGL入门学习之十五——从“绘制一个立方体”来看OpenGL的进化过程 OpenGL入门学习之十六——在Windows系统中显示文字 ZwqXin博客