资源简介
要实现基于OpenGL ES 2.0的阴影映射,要攻克这三个技术难点:
1、 熟练操作FBO。帧缓存FBO是需要熟练操控的,因为FBO可以很快地将深度图写入一块显存中,然后作为纹理渲染到真实的场景中。
2、 掌握着色器的使用。由于OpenGL ES 2.0只允许使用着色器来对其进行渲染,因此对着色器的书写熟练程度要求较高。
3、 掌握将float深度数据分拆成vec4再将vec4合并成float的操作。这个已经成为业内熟练掌握的技能之一了,网络上搜索“how to pack float into RGBA”,能够得到很多有用的回答。
代码片段和文件信息
#include “Cube.h“
static float s_cubePositionData[] =
{
-1.0f-1.0f-1.0f // triangle 1 : begin
-1.0f-1.0f 1.0f
-1.0f 1.0f 1.0f // triangle 1 : end
1.0f 1.0f-1.0f // triangle 2 : begin
-1.0f-1.0f-1.0f
-1.0f 1.0f-1.0f // triangle 2 : end
1.0f-1.0f 1.0f
-1.0f-1.0f-1.0f
1.0f-1.0f-1.0f
1.0f 1.0f-1.0f
1.0f-1.0f-1.0f
-1.0f-1.0f-1.0f
-1.0f-1.0f-1.0f
-1.0f 1.0f 1.0f
-1.0f 1.0f-1.0f
1.0f-1.0f 1.0f
-1.0f-1.0f 1.0f
-1.0f-1.0f-1.0f
-1.0f 1.0f 1.0f
-1.0f-1.0f 1.0f
1.0f-1.0f 1.0f
1.0f 1.0f 1.0f
1.0f-1.0f-1.0f
1.0f 1.0f-1.0f
1.0f-1.0f-1.0f
1.0f 1.0f 1.0f
1.0f-1.0f 1.0f
1.0f 1.0f 1.0f
1.0f 1.0f-1.0f
-1.0f 1.0f-1.0f
1.0f 1.0f 1.0f
-1.0f 1.0f-1.0f
-1.0f 1.0f 1.0f
1.0f 1.0f 1.0f
-1.0f 1.0f 1.0f
1.0f-1.0f 1.0f
};
static float s_cubeNormalData[] =
{
// nX nY nZ
-1.0f 0.0f 0.0f // triangle 1 : begin
-1.0f 0.0f 0.0f
-1.0f 0.0f 0.0f // triangle 1 : end
0.0f 0.0f -1.0f // triangle 2 : begin
0.0f 0.0f -1.0f
0.0f 0.0f -1.0f // triangle 2 : end
0.0f-1.0f 0.0f //
0.0f-1.0f 0.0f
0.0f-1.0f 0.0f
0.0f 0.0f-1.0f //
0.0f 0.0f-1.0f
0.0f 0.0f-1.0f
-1.0f 0.0f 0.0f //
-1.0f 0.0f 0.0f
-1.0f 0.0f 0.0f
0.0f-1.0f 0.0f //
0.0f-1.0f 0.0f
0.0f-1.0f 0.0f
0.0f 0.0f 1.0f //
0.0f 0.0f 1.0f
0.0f 0.0f 1.0f
1.0f 0.0f 0.0f //
1.0f 0.0f 0.0f
1.0f 0.0f 0.0f
1.0f 0.0f 0.0f //
1.0f 0.0f 0.0f
1.0f 0.0f 0.0f
0.0f 1.0f 0.0f //
0.0f 1.0f 0.0f
0.0f 1.0f 0.0f
0.0f 1.0f 0.0f //
0.0f 1.0f 0.0f
0.0f 1.0f 0.0f
0.0f 0.0f 1.0f //
0.0f 0.0f 1.0f
0.0f 0.0f 1.0f
};
Cube::Cube( float center[] float size float color[] )
{
initializeOpenGLFunctions( );
//set color data
for ( int v = 0; v < 12*3; v++ )
{
m_cubeColorData[4*v+0] = color[0];
m_cubeColorData[4*v+1] = color[1];
m_cubeColorData[4*v+2] = color[2];
m_cubeColorData[4*v+3] = color[3];
}
//resize the cube
for (int i = 0; i < 108; i++)
{
m_cubePositionData[i] = s_cubePositionData[i] * size/2;
}
//move the center of the cube to the place specified in parameter
for (int j = 0; j < 36; j++)
{
m_cubePositionData[3*j] = m_cubePositionData[3*j] + center[0];
m_cubePositionData[3*j + 1] = m_cubePositionData[3*j + 1] + center[1];
m_cubePositionData[3*j + 2] = m_cubePositionData[3*j + 2] + center[2];
}
// 复制顶点数据,用于渲染
memcpy( m_cubePosition m_cubePositionData sizeof( float ) * 108 );
memcpy( m_cubeNormal s_cubeNormalData sizeof( floa
相关资源
- Nmap Network Scanning
- QT 4.5.0 with vs2003 vs2005 vs2008
- Qt小实练--实现圆角、阴影、无边框窗
- 873971781Mir2MapPath.rar
- Qt截图小
- PyQt4入门指南 PDF中文版
- Qt常用图标资源png
- qt下图片循环显示的几个很好的,包括
- QT将应用程序缩小到右下角任务栏的系
- Qt creator 做的计算器工程文件
- 北邮嵌入式实验_MQTT协议实验过程及代
- Qt类继承关系图
- Qt4迁移至Qt5完全指南
- 基于QT局域网聊天系统毕业论文
- qtcreator + Keil MDK armcc +openocd 编译 调试
- 实现了异常管理流程QtSharpCore.zip
- 4412开发板linux-QT下使用wfi设置
- Qt中文语言包丨PyQt5汉化包附汉化说明
- QTP百度云盘连接.txt
- qt编程下实现点击按钮调用外部程序
- cyusb-mingw-lib.rar
- qtopia下的简易pda应用程序
- 基于QT 点菜系统客户端程序
- Qt Office 集成
- Echarts地图与图表联动
- zw_msl1121-6895699-IsomapR1.zip
- map2bmp.zip
- CppLesson070AddNewMap.zip
- 4G通过MQTT协议ONENET
- 水稻抽穗期QTL DTH2的图位克隆和功能分
评论
共有 条评论