
GLSL
GentooEmacs
微信:GentooEmacs,从事 UE4 、UE5、VR/AR、工业仿真 、 Delta3D 、OpenGL、分布式仿真领域
展开
-
OpenGL 4.0 GLSL 用 shadow map 算法 生成阴影
shadow map 其实把场景渲染了两次,第一次是从灯光的角度(把相机放到灯光位置)渲染场景 ,然后存储渲染的深度信息到一张纹理上 即渲染一张shadow map(用FBO技术)。第二次再从观察者的角度来渲染。在第二次渲染时才渲染阴影,生成阴影的过程是这样的:对于每个片元的深度信息和第一次从灯光角度渲染的深度信息比较,如果当前深度值大于第一次渲染的深度值,则肯定有物体在当前片元和灯光之间,那么当原创 2014-02-24 13:45:08 · 10681 阅读 · 2 评论 -
OpenGL GLSL 中的法线变换
在GLSL中,有一些情况需要把局部坐标系下的向量或点转换到视点坐标系下,如光照计算时,需要把发向转化到视点坐标系。如果是模型上一点p 转化到视点坐标系下,直接(model-view matrix )*p即可,但法线是向量,不能这样做。我们需要用法线矩阵来转换法线。法线矩阵通常是模型视点矩阵(model-view matrix)左上角3x3矩阵的逆转置矩阵(inverse transpose原创 2014-02-17 14:44:57 · 3711 阅读 · 0 评论 -
OpenGL 4.0 GLSL 实现 投影纹理映射(Projective Texture Mapping)
投影纹理映射 (projective texture mapping):就是把纹理投射到场景的物体上,就像一个投影机把幻灯片投影到其他物体上一样。如下图:用左边的纹理图像投影到一个茶壶上投影纹理的实现方法:其实最重要的一点就是确定纹理坐标,纹理坐标的确定依赖于物体表面点的相对位置和投影机的位置。在OpenGL中我们可以定义一个camera,我们定义一个中心在投影机位置的原创 2014-02-17 13:15:18 · 9987 阅读 · 6 评论 -
OpenGL 4.0 GLSL 用单光源 实现逐顶点 漫反射光照模型
漫反射光照模型是:在所有方向上反射的光照强度相等,光照射到物体表面上一部分会被吸收而另一部分在其他方向上散射。一个典型的漫反射表面是没有光泽的,而没有被照射的地方是黑色的。下面显示了一个漫反射光照模型漫反射的数学模型包含两个向量:从物体表面的点到光源的的向量S 和 物体表面的某一点的法线向量N。如图:到达物体表面的光照轻度很大一部分依赖于物体表面原创 2014-02-11 14:21:30 · 4022 阅读 · 0 评论 -
OpenGL 4.0 GLSL 采用平行光照模型
在点光源光照模型中,一个重要的向量就是从物体表面到光源的向量(s)。但如果光源处于无穷远处,那么物体表面所有点到光源的向量可以近似看作是平行的,这样,我们可以用一个方向向量代替原来的光源向量s(比如太阳光就是平行光),通常这类光照模型称作:Directional light source(这类光没有指定位置,只有方向)。 1. 当然这种模型同样忽略了从光源到物体表面光照强度减损的原创 2014-02-12 10:02:53 · 3885 阅读 · 3 评论 -
OpenGL 4.0 用GLSL实现双面渲染
当渲染一个完全封闭的 mesh ,其里面是隐藏的,即没有被渲染。然而 ,如果这个封闭的mesh有个洞,那么里面就可以有一部分是可见的。在这中情况下,如果不做处理,可能用shader渲染出的光照效果是不正确的(由于mesh表面法线的方向问题)。为了克服这个问题 需要把mesh的表面法线向量反过来,即-normal,然后计算光照模型。如图左边的光照模型采用ADS模式原创 2014-02-11 15:30:37 · 5458 阅读 · 1 评论 -
OpenGL4.0 GLSL 实现逐片元光照模型 提高场景真实性
当计算光照模型(如ADS模型)的时候,通常是在vertex shader中计算每个顶点的颜色值,然后通过这些顶点插值 传入fragment shader中,这些被称为Gouraud shading.Gouraud shading.模型有一些不尽人意的地方,例如,高光(bright specular highlight)可能在一个polygon的中间,这样通过这种模型计算就会影响高光显示效果原创 2014-02-12 10:48:33 · 3775 阅读 · 2 评论 -
OpenGL 4.0 GLSL 用立方体贴图和 环境贴图 模拟反射效果
我们可以用纹理代表物体周围的环境,然后把纹理贴到物体上,实现映射周围的场景目的,这项技术也被乘坐环境贴图(EnvironmentMapping)。环境贴图通常来模拟反射或者折射效果。最常见的环境贴图(Environment Mapping)是立方体cube map。立方体贴图(cube map texture)通常由六个分开的图像组成,在设置环绕方式时采用GL_CLAMP_TO_EDGE,原创 2014-02-14 17:12:18 · 7171 阅读 · 2 评论 -
OpenGL 4.0 GLSL 延迟渲染 Deferred shading
Deferred shading 是把应用光照或shading推迟到第二帧来做。这样可以避免了不必要的像 素计算。如下图只用了漫反射光照基本算法思想如下:1. 在第一帧渲染时,我们只渲染场景,而不计算反射模型来确定片元的最终颜色,我们只简单的存贮几何信息(位置position、法线normal,纹理t坐标xture coordinate 等等)在一个临时缓冲区中,这些统称为g-原创 2014-02-18 15:00:58 · 5288 阅读 · 1 评论 -
OpenGL 4.0 GLSL 模拟 雾效果
一个简单的雾效果可以通过混合每个片元的颜色和一个常量的雾颜色来实现,雾的密度量由顶点到相机的距离确定。我们可以用线性关系或者非线性关系来来表达在顶点到相机之间的雾量。如下图所示:用线性关系模拟线性关系可以用下列表达:dmin 是距离眼睛最近的距离(即没有雾的地方),dmax是距离 眼睛最远的距离(即雾最大的地方),z是当前距离眼睛的距离。值f是雾的因子(fo原创 2014-02-12 13:59:24 · 5722 阅读 · 0 评论 -
OpenGL 4.0 GLSL 用多个光照模型
在多个光照模型中,我们需要计算每个光照模型的颜色值,然后把这些颜色值相加得到最终物体表面的颜色值。通常,我们会创建一个统一的数组来存储光源的位置和光照强度(密度)(见下文shader)如图:一个5个光源的场景顶点shader#version 430layout (location = 0) in vec3 VertexPosition;layout (location原创 2014-02-12 09:47:50 · 3346 阅读 · 2 评论 -
OpenGL 4.0 GLSL 实现 平面着色 Implementing flat shading
在逐顶点shader光照模型中 要计算每个顶点的颜色,然后用这些点的颜色经过插值来产生光华的表面效果(The colors are then interpolated across the face of the polygon to produce a smooth shading effect),这个被称作Gouraund Shading。这在早期的OpenGL 版本中,经过每个顶点颜色插值原创 2014-02-11 16:09:03 · 4318 阅读 · 0 评论 -
实现 逐顶点的 ambient, diffuse, and specular (ADS) shading phong 光照模型
本文参照了OpenGL 4.0 Shading Language Cookbook OpenGL 4.0 渲染管线 如图:shader 数据的输入可以是从OpenGL main application 中输入 或者是来自上个管线 ,例如一个 fragment shader 的输入可能来自 vertex shader 的output 变量 也可能来自程序的unif原创 2014-02-11 14:49:07 · 7288 阅读 · 0 评论 -
OpenGL 4.0 GLSL 基础 教程 概览
从OpenGL 2.0 到 OpenGL 3.0变化非常大,但从OpenGL 3.0 到OpenGL 4.0 变化不是太大。着色器程序直接运行在GPU上,并且是并行的,一个片元着色器可能一次执行所有象素。deprecation model, 在OpenGL3.0 提出,为了保持向后兼容,兼容模式compatibility profile.和核心模式core profile的概念在OpenG原创 2014-01-15 16:12:15 · 6882 阅读 · 0 评论