shader opengl 图形基础
文章平均质量分 81
killallpigs
这个作者很懒,什么都没留下…
展开
-
立方体贴图
Learn Opengl立方体贴图包含6个2D纹理,这每个2D纹理是一个立方体(cube)的一个面,也就是说它是一个有贴图的立方体。从立方体贴图上使用橘黄色向量采样一个纹理值看起来和下图有点像:方向向量的大小无关紧要。一旦提供了方向,OpenGL就会获取方向向量触碰到立方体表面上的相应的纹理像素(texel),这样就返回了正确的纹理采样值。转载 2017-02-14 11:12:33 · 1262 阅读 · 0 评论 -
帧缓冲 Framebuffer
Learn Opengl到目前为止,我们使用了几种不同类型的屏幕缓冲:用于写入颜色值的颜色缓冲,用于写入深度信息的深度缓冲,以及允许我们基于一些条件丢弃指定片段的模板缓冲。把这几种缓冲结合起来叫做帧缓冲(Framebuffer),它被储存于内存中。OpenGL给了我们自己定义帧缓冲的自由,我们可以选择性的定义自己的颜色缓冲、深度和模板缓冲。我们目前所做的渲染操作都是是在转载 2017-02-13 12:34:15 · 1253 阅读 · 0 评论 -
面剔除 Face Culling
高级opengl尝试在头脑中想象一下有一个3D立方体,你从任何一个方向去看它,最多可以同时看到多少个面?你最终最多能数出来的面是3个。你可以从一个立方体的任意位置和方向上去看它,但是你永远不能看到多于3个面。所以我们为何还要去绘制那三个不会显示出来的3个面呢。如果我们可以以某种方式丢弃它们,我们会提高片段着色器超过50%的性能!我们如何知道某个面在观察者的视野中不会出现转载 2017-02-09 10:42:49 · 1639 阅读 · 0 评论 -
混合
Learn Opengl 在OpenGL中,物体透明技术通常被叫做混合(Blending)。一个物体的透明度,被定义为它的颜色的alpha值。alpha颜色值是一个颜色向量的第四个元素。 我们之前所使用的纹理都是由3个颜色元素组成的:红、绿、蓝,但是有些纹理同样有一个内嵌的aloha通道,它为每个纹理像素(Texel)包含着一个alpha值。这个al转载 2017-02-08 14:23:49 · 284 阅读 · 0 评论 -
几种光源
Learn Opengl学习笔记定向光(Directional Light)当一个光源很远的时候,来自光源的每条光线接近于平行。这看起来就像所有的光线来自于同一个方向,无论物体和观察者在哪儿。当一个光源被设置为无限远时,它被称为定向光(Directional Light),因为所有的光线都有着同一个方向;它会独立于光源的位置。我们知道的定向光源的一个好例转载 2017-01-11 11:51:38 · 3337 阅读 · 0 评论 -
光照基础
Learn Opengl颜色我们在现实生活中看到某一物体的颜色并不是这个物体的真实颜色,而是它所反射(Reflected)的颜色。换句话说,那些不能被物体吸收(Absorb)的颜色(被反射的颜色)就是我们能够感知到的物体的颜色。例如,太阳光被认为是由许多不同的颜色组合成的白色光(如下图所示)。如果我们将白光照在一个蓝色的玩具上,这个蓝色的玩具会吸收白光中除了蓝色以外的所有颜转载 2017-01-09 12:03:39 · 764 阅读 · 0 评论 -
光照贴图
漫反射贴图(Diffuse texture)我们希望通过某种方式对每个原始像素独立设置diffuse颜色。它基本就是一个纹理:使用一张图片覆盖住物体,以便我们为每个原始像素索引独立颜色值。在光照场景中,通过纹理来呈现一个物体的diffuse颜色,这个做法被称做漫反射贴图(Diffuse texture)。贴图:在片段着色器中,我们创建一个结构体(St转载 2017-01-10 14:33:45 · 3239 阅读 · 0 评论 -
模板测试
当片段着色器处理完片段之后,模板测试(Stencil Test) 就开始执行了,和深度测试一样,它能丢弃一些片段。仍然保留下来的片段进入深度测试阶段,深度测试可能丢弃更多。模板测试基于模板缓冲(Stencil Buffer)。模板缓冲中的模板值(Stencil Value)通常是8位的,因此每个片段/像素共有256种不同的模板值(译注:8位就是1字节大小,因此和char的容量一样是256个转载 2017-02-04 15:08:19 · 907 阅读 · 0 评论 -
纹理
继续 LearnOpenGL纹理(Texture)。纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。因为我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点。纹理坐标为了能够把纹理映射(Map)到三角形上,我们转载 2016-12-20 16:42:26 · 1452 阅读 · 0 评论 -
矩阵、向量的变换
继续 Learn Opengl向量相乘点乘两个向量的点乘等于它们的数乘结果乘以两个向量之间夹角的余弦值。公式:v¯⋅k¯=||v¯||⋅||k¯||⋅cosθ如果v¯和k¯都是单位向量,它们的长度会等于1。这样公式会有效简化成:v¯⋅k¯=1⋅1⋅cosθ=cosθ我们使用点乘(dot produ转载 2016-12-29 10:59:57 · 8143 阅读 · 0 评论 -
摄像机
learn opengl本节讨论如何在OpenGL中配置一个FPS风格的摄像机,让你能够在3D场景中自由移动。摄像机/观察空间(Camera/View Space)摄像机/观察空间(Camera/View Space)是指以摄像机的视角作为场景原点时场景中的所有顶点坐标:观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标。要定义一个摄像机,我们需要它在世转载 2017-01-05 12:56:06 · 1741 阅读 · 0 评论 -
shader 输入输出
opengl es的shader 有3种类型修饰:uniform,attribute,varying,区别见:http://blog.csdn.net/renai2008/article/details/7844495向量GLSL中的向量是一个可以包含有1、2、3或者4个分量的容器,分量的类型可以是前面默认基础类型的任意一个。它们可以是下面的形式(n代表分量的数量):转载 2016-12-19 16:08:33 · 1684 阅读 · 0 评论 -
opengl 画三角形
LearnOpenGL 学习笔记使用环境:mac10.12, xocde, cocos2d-x 3.13顶点输入要渲染一个三角形,需指定三个顶点,每个顶点都有一个3D位置。我们会将它们以标准化设备坐标的形式(OpenGL的可见区域)定义为一个GLfloat数组。GLfloat vertices[] = { -0.5f, -0.5f, 0.0f, 0.5转载 2016-12-16 17:32:09 · 1446 阅读 · 0 评论 -
Opengl 坐标
继续 Learn Opengl在流水线(Pipe line)中,物体的顶点在最终转化为屏幕坐标之前还会被变换到多个坐标系统。下图展示了整个流程:局部空间局部空间是指物体所在的坐标空间,即对象最开始所在的地方。想象你在一个建模软件中创建了一个立方体。你创建的立方体的原点有可能位于(0, 0, 0),即便它有可能最后在程序中处于完全不同的位置。你的模型的所有顶点都是在局转载 2016-12-30 13:57:18 · 2618 阅读 · 0 评论 -
opengl 简介
转自:LearnOpenGLopengl 学习笔记OpenGL到底是什么?OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。OpenGL库的开发者通常是显卡的生产商,故当产生一个bug时通常可以通过升级显卡驱动来解决。这些驱动会包括你的显卡能支持的最新版本的OpenGL。状态机OpenGL自身是一个转载 2016-12-15 13:42:58 · 754 阅读 · 0 评论 -
(二) shader 简介
shader language被定位为高级语言,如,GLSL的全称是“High Level ShadingLanguage”,Cg语言的全称为“C for Graphic”, 不过高级语言的一个重要特性是“独立于硬件”,在这一方面shader language暂时还做不到,shader language完全依赖于 GPU构架 。Shader language目前主要转载 2016-12-06 12:41:36 · 657 阅读 · 0 评论 -
(一)GPU图形绘制管线
《GPU编程与 CG语言之阳春白雪下里巴人 》读书笔记图形绘制管线描述GPU 渲染流程,即“给定视点、三维物体、光源、照明模式,和纹理等元素,如何绘制一幅二维图像”。 图形绘制管线分为三个主要阶段: (一)应用程序阶段,使用高级编程语言(C、C++、JAVA等)进行开发,主要和CPU、内存打交道,诸如碰撞检测、场景图建转载 2016-12-06 12:07:57 · 659 阅读 · 0 评论 -
Blinn-Phong 光照
LearnOpenGLPhong光照很棒,而且性能较高,但是它的镜面反射在某些条件下会失效,特别是当发光值属性低的时候,对应一个非常大的粗糙的镜面区域。下面的图片展示了,当我们使用镜面的发光值为1.0时,一个带纹理地板的效果:你可以看到,镜面区域边缘迅速减弱并截止。出现这个问题的原因是在视线向量和反射向量的角度不允许大于90度。如果大于90度的话,点乘的转载 2017-03-09 16:39:26 · 1170 阅读 · 0 评论