【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 ...
随机推荐
- Python: 元组的基本用法
元组和列表是近亲,列表允许并且提供了方法来改变它的值,但元组是不可改变的,即不允许你改变它的值----这也是它没有方法的部分原因. 元组的主要作用是作为参数传递给函数调用.或是从函数调用那里获得参数时 ...
- Ionic打包过程下载Gradle失败的解决方法
安卓应用现在很多都是基于gradle进行大包,ionic默认的打包命令 cordova build --release android 就是使用gradle进行打包,但同时ionic也支持in ...
- [JSP]获取时间
<%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.uti ...
- Loadrunner不能调用IE解决方法大全
在使用loadrunner进行性能调试时,录制脚本的时候,发现loadrunner不能调用IE.不能自动启动IE,还有一种情况是可以启动,但是录制不到内容,action的内容为空. 一般遇到这种情况, ...
- git工作中的常用操作
上班开始,打开电脑,git pull:拉取git上最新的代码: 编辑代码,准备提交时,git stash:将自己编辑的代码暂存起来,防止git pull时与库中的代码起冲突,否则自己的代码就白敲了: ...
- Mysql Innodb 间隙锁浅析
间隙锁说明 innodb引擎自动使用间隙锁来避免幻读(原因是因为innodb采用单行锁+间隙锁组合而成的行锁,会锁定一个范围和记录本身的行),参数默认innodb_locaks_unsafe_for_ ...
- asp.net Ajax和web services
新建一个web服务 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...
- 【SVN】Error running context: 由于目标计算机积极拒绝,无法连接
SVN服务没开启,步骤如下: 1.打开[控制面板]→[管理工具]→[服务]: 2.找到[visual SVN Sever],右击选择[启动]: 3.服务开启后,导入数据就成功了!
- jsp 9大内置对象
http://www.cnblogs.com/xrong/p/3168616.html
- JS正则2
正则表达式可以:•测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证•替换文本.可以在文档中使用一个正则表达式来标 ...