资源简介
要实现基于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
相关资源
- SigmaPlot教程之各种柱形图的数据排列
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- C 餐厅叫号系统(QT平)
- QT 实现文件下载
- qt图像处理
- QT,JPEG解码源代码(已完成)
- 成都MAPINFO格式电子地图
- Qt 播放音频文件
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- MQTT推送Demo
- 基于Linux、QT的视频监控系统的设计与
- Qt 百度地图 定位
- QT酷炫界面开发指南《QmlBook》
- Ubuntu下操作Excel,qt代码
- Qt图片浏览器 --基于Qt的Graphics View f
- qtnribbon2破解
- Qt软件开发 完整项目代码
- Pix4Dmapper4.4.10中文破解版带注册机网盘
- Pix4Dmapper4.4.10中文破解
- Pix4Dmapper教程
- MapMatrix中文用户手册
- MQTT_3.1protocol_Specific中文版
- 在QT中使用RTP进行视频的采集和传输
评论
共有 条评论