利用着色器实现游戏的公告板特效
来源:互联网 发布:vscode markdown html 编辑:程序博客网 时间:2024/06/09 18:22
利用着色器实现游戏的公告板特效
这几日进展比较缓慢,主要是对自己搭建的基于Qt和OpenGL(ES)2.0的框架进行整合。同时利用现有的技术,制作一个基于OpenGL的公告板效果,同时提升一下自己书写着色器的能力。
原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/22205357
公告板技术的核心在于计算模型矩阵。OpenGL的固定渲染管线是维持了模型视图矩阵和投影矩阵两套矩阵,而Direct3D的固定渲染管线维持了三套矩阵,也就是世界矩阵、视图矩阵以及投影矩阵。我个人认为Direct3D的做法比较科学,而且将三者分开可以更好地控制显示效果,比如说我们将要实现的公告板特效。
演示程序的下载地址:这里
要实现公告板效果,我们必须对模型矩阵做文章,相应地,控制T&L阶段的顶点着色器则是我们关注的对象。我这里画了一个简单的图和公式,讲述了如何实现公告板特效。
根据上面的理论,我们的顶点着色器是这样的:
// 这是具有公告板特效的顶点着色器attribute vec3 pos;attribute vec2 texCoord;uniform mat4 modelMatrix;uniform mat4 viewMatrix;uniform mat4 projectionMatrix;uniform vec3 cameraPos;uniform int billboardEnabled;varying vec2 v_TexCoord;const vec3 up = vec3( 0.0, 1.0, 0.0 );mat4 BillboardMatrix( void ){ vec3 forward = normalize( pos - cameraPos ); vec3 side = cross( forward, up ); mat4 result; result[0] = vec4( side, 0.0 ); result[1] = vec4( up, 0.0 ); result[2] = vec4( forward.x, 0.0, forward.z, 0.0 ); result[3] = vec4( 0.0, 0.0, 0.0, 1.0 ); return result;}void main( void ){ if ( billboardEnabled == 1 ) { gl_Position = projectionMatrix * viewMatrix * modelMatrix * BillboardMatrix( ) * vec4( pos, 1.0 ); } else { gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4( pos, 1.0 ); } v_TexCoord = texCoord;}
下面是演示程序的截图。
没有使用公告板特效,可以看见树和草的面片非常明显,一看上去就知道是假的:
而启用了公告板特效,我们就可以看到树和草都面向摄像机了。
5 0
- 利用着色器实现游戏的公告板特效
- DirectX11 使用几何着色器实现公告板效果
- 《着色器和屏幕特效》读书笔记第八章-用Unity的渲染纹理实现屏幕特效
- 利用几何着色器实现物体表面法线的可视化
- 《着色器和屏幕特效》读书笔记第九章-游戏可玩性和屏幕特效
- WebGL-片元着色器 1.Bloom特效实现
- cocos2dx实现全局游戏公告
- cocos2dx实现全局游戏公告
- 利用TextSwitcher实现首页的公告展示功能
- 利用CSS实现的对角线特效
- Direct2D 1.1 开发笔记 特效篇(三) 简单的像素着色器特效
- Direct2D 1.1 开发笔记 特效篇(三) 简单的像素着色器特效
- cocos2d-x 实现游戏中的系统公告
- JS特效--新闻公告
- [Unity3D]Unity3D游戏开发之刀光剑影特效的实现
- 3D游戏中“刀光剑影”特效的实现算法
- MFC 游戏贴图与透明特效的实现
- 利用UIImageView实现动画特效
- Pat(Advanced Level)Practice--1077(Kuchiguse)
- muduo源码分析--事件回调层次是怎么传递的Tcpserver Channel TcpConnection
- 最小生成树 prim kruscal
- dom4j解析xml
- Nsight 调试出现Parallel Nsight Debug CUDA grid launch failed: CUcontext: 211577632 CUmodule: 223878456
- 利用着色器实现游戏的公告板特效
- 中国象棋将帅问题----《编程之美》读书笔记
- 文件复制的C语言实现
- QT for IOS 模拟机运行
- 1114班第三周作业,归并排序
- 黑马程序员 高新技术<二>静态导入,自动装拆箱,增强for循环等
- hdu 4267 the Ghost Blows Light
- 获取手机网络类型和IP地址
- jquery随机多彩tag标签随机颜色和字号大小效果