【OpenGL】如何绘制Shadow
背景
Shadow即阴影,它是光线被不透明物体遮挡而产生的黑暗区域,与光源的方向相反。
在Blender中编辑过程中没有Shadow,只有在经过渲染后才能显示。目前有一个基于Blender的项目,要求在编辑过程中就要显示Shadow。
Shadow算法
Shadow流行算法是shadow mapping和shadow volumn。
因为物体和光源之间存在遮挡物,所以物体才会处在阴影中,这是shadow mapping的基本原理。无论视点如何变化,只要光源和物体相互位置不变,Shadow map就可以重复使用。具体步骤如下:
- 在光源坐标下对整个场景进行渲染,得到所有物体相对于光源的Depth map,这幅图每个像素值代表场景里离光源最近像素的深度值。
- 恢复到正常位置渲染整个场景,对每个像素计算它到光源的距离,然后将这个值和Depth map相应的值进行比较,以确定这个像素点是否在阴影中。
- 对Shadowed fragment和Lighted fragment分别进行不同的光照计算,这样就可以得到阴影效果了。
shadow volume基本原理是根据光源和遮挡物的位置关系计算出场景中会产生的阴影区域,然后对所有所有物体进行检测,确定其是否受阴影的影响。
由于基于Blender的项目是一种静态场景,而且Shadow mapping相对比较简单,因此使用Shadow mapping算法即可。
【OpenGL】如何绘制Shadow的更多相关文章
- OpenGL阴影,Shadow Volumes(附源程序,使用 VCGlib )
实验平台:Win7,VS2010 先上结果截图: 本文是我前一篇博客:OpenGL阴影,Shadow Mapping(附源程序)的下篇,描述两个最常用的阴影技术中的第二个,Shadow Volu ...
- OpenGL阴影,Shadow Mapping(附源程序)
实验平台:Win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): 本文描述图形学的两个最常用的阴影技术之一,Shadow Mapping方法(另一种是Sh ...
- OpenGL 阴影之Shadow Mapping和Shadow Volumes
先说下开发环境.VS2013,C++空项目,引用glut,glew.glut包含基本窗口操作,免去我们自己新建win32窗口一些操作.glew使我们能使用最新opengl的API,因winodw本身只 ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- CSharpGL(6)在OpenGL中绘制UI元素
CSharpGL(6)在OpenGL中绘制UI元素 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...
- 使用OpenGL ES绘制3D图形
如果应用定义的顶点不在同一个平面上,并且使用三角形把合适的顶点连接起来,就可以绘制出3D图形了. 使用OpenGL ES绘制3D图形的方法与绘制2D图形的步骤大致相同,只是绘制3D图形需要定义更多的 ...
- 【Qt for Android】OpenGL ES 绘制彩色立方体
Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...
- OpenGL学习-------绘制简单的几何图形
本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的 ...
- [转]关于OpenGL的绘制上下文
[转]关于OpenGL的绘制上下文 本文转自(http://www.cnblogs.com/Liuwq/p/5444641.html) 什么是绘制上下文(Rendering Context) 初学Op ...
随机推荐
- 关于编译Android源码
NO.1(适用于全编) (1)source build/envsetup.sh (2)lunch (3)make -j(x) NO.2(适用于编模块) (1)source build/envsetup ...
- nodejs+mysql
接着上一篇的php+mysql,我们来试一试nodejs怎么实现数据的增删查改. Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件 ...
- PHP防SQL注入不要再用addslashes和mysql_real_escape_string
PHP防SQL注入不要再用addslashes和mysql_real_escape_string了,有需要的朋友可以参考下. 博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助 ...
- 深入理解URL
URI(Universal Resource Identifier)通常由三部分组成: ①访问资源的命名机制: ②存放资源的主机名: ③资源自身的名称,由路径表示. 如下面的URI:http://ww ...
- loadrunner ---模拟多IP登录
1.打开HP LoadRunner ->Tools ->IP Wizard
- CSS考试题目
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 从红米手机经常发生UIM没有服务的一些猜想
缘起:买了测试用的红米手机,安装电信卡,经常生UIM没有服务,大约两天1次. 我的解决办法:飞行模式切换一下就恢复正常. 之前这张卡用三星的信号是满格,红米断开挺经常的 上网搜索: 同样的现象,还好官 ...
- python random
import randoma = random.randrange(0,5)print(a)本来很正常的一段代码,用pycharm就报错,控制台就可以运行,原来random 和自带的random 同名 ...
- autoLayout约束图解
- android studio 注释模板
File->Settings->Editor->File and Code Templates-> Templates->class Includes->File ...