资源简介
基于体渲染的OpenGL烟雾模拟程序,效率需要提高,烟雾纹理需要改进,有兴趣的朋友可以参考下!
代码片段和文件信息
#include
#include “gl\glut.h“
#include
#include “maths.h“
/*-----------------------------------------------------------------
The objects motion is restricted to a rotation on a predefined axis
The function bellow does cylindrical billboarding on the Y axis i.e.
the object will be able to rotate on the Y axis only.
-----------------------------------------------------------------*/
void l3dBillboardLocalToWorld(float *cam float *worldPos) {
float modelview[16];
glGetFloatv(GL_MODELVIEW_MATRIX modelview);
// The local origin‘s position in world coordinates
worldPos[0] = cam[0] + modelview[12]*modelview[0] + modelview[13] * modelview[1] + modelview[14] * modelview[2];
worldPos[1] = cam[1] + modelview[12]*modelview[4] + modelview[13] * modelview[5] + modelview[14] * modelview[6];
worldPos[2] = cam[2] + modelview[12]*modelview[8] + modelview[13] * modelview[9] + modelview[14] * modelview[10];
}
/*-----------------------------------------------------------------
The objects motion is restricted to a rotation on a predefined axis
The function bellow does cylindrical billboarding on the Y axis i.e.
the object will be able to rotate on the Y axis only.
-----------------------------------------------------------------*/
void l3dBillboardCylindricalBegin(float *cam float *worldPos) {
float lookAt[3]={001}objToCamProj[3]upAux[3]angleCosine;
// objToCamProj is the vector in world coordinates from the local origin to the camera
// projected in the XZ plane
objToCamProj[0] = cam[0] - worldPos[0] ;
objToCamProj[1] = 0;
objToCamProj[2] = cam[2] - worldPos[2] ;
// normalize both vectors to get the cosine directly afterwards
mathsNormalize(objToCamProj);
// easy fix to determine wether the angle is negative or positive
// for positive angles upAux will be a vector pointing in the
// positive y direction otherwise upAux will point downwards
// effectively reversing the rotation.
mathsCrossProduct(upAuxlookAtobjToCamProj);
// compute the angle
angleCosine = mathsInnerProduct(lookAtobjToCamProj);
// perform the rotation. The if statement is used for stability reasons
// if the lookAt and v vectors are too close together then |aux| could
// be bigger than 1 due to lack of precision
if ((angleCosine < 0.99990) && (angleCosine > -0.9999))
glRotatef(acos(angleCosine)*180/3.14upAux[0] upAux[1] upAux[2]);
}
/*----------------------------------------------------------------
True billboarding. With the spherical version the object will
always face the camera. It requires more computational effort than
the cylindrical billboard though. The parameters camXcamY and camZ
are the target i.e. a 3D point to which the object will point.
----------------------------------------------------------------*/
void l3dBillboardSphericalBegin(float *cam float *worldPos) {
float lookAt[3]={001}objToCamProj[3]objToCam[3]upAux[3]angleCosi
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 545 2001-10-02 01:15 Smoke_shader\glutsnowman.dsw
文件 489 2001-10-17 23:18 Smoke_shader\fonts.h
文件 419 2001-11-11 04:11 Smoke_shader\l3DBillboard.h
文件 1536 2001-09-27 23:59 Smoke_shader\maths.h
文件 8661 2001-01-02 23:32 Smoke_shader\tga.cpp
文件 827 2000-12-03 00:00 Smoke_shader\tga.h
文件 262683 2000-04-02 00:45 Smoke_shader\tree.tga
文件 1864 2008-11-14 15:40 Smoke_shader\ShaderUtil.h
文件 173056 2008-12-02 16:29 Smoke_shader\glutsnowman.ncb
文件 1784 2008-12-01 16:06 Smoke_shader\glutsnowman.plg
文件 79898 1998-08-18 23:25 Smoke_shader\glut32.lib
文件 169984 1998-08-18 23:25 Smoke_shader\glut32.dll
文件 7105 2008-11-14 15:59 Smoke_shader\billboard.cpp
文件 5176 2002-05-13 15:33 Smoke_shader\spark.bmp
文件 5176 2002-05-15 16:17 Smoke_shader\bubble.bmp
文件 5176 2002-05-15 16:17 Smoke_shader\cloud.bmp
文件 2069 2008-11-14 15:35 Smoke_shader\fonts.cpp
文件 196664 2008-11-14 15:12 Smoke_shader\colorGradient.bmp
文件 192512 2006-03-04 03:19 Smoke_shader\glew32.dll
文件 281360 2006-03-04 03:19 Smoke_shader\glew32.lib
文件 7871 2008-11-14 15:35 Smoke_shader\l3dBillboard.cpp
文件 81920 2008-11-19 16:07 Smoke_shader\glutsnowman.exe
文件 8337 2008-11-14 15:40 Smoke_shader\ShaderUtil.cpp
文件 266 2008-11-14 17:19 Smoke_shader\ParticleUtils.cpp
文件 150 2008-11-14 17:19 Smoke_shader\ParticleUtils.h
文件 2310 2008-11-14 13:45 Smoke_shader\pVector.h
文件 4226 2008-11-18 10:50 Smoke_shader\glutsnowman.dsp
文件 384 2008-11-18 10:45 Smoke_shader\shader\VolumeParticle.vert
文件 169984 1998-08-18 23:25 Smoke_shader\shader\glut32.dll
文件 192512 2006-03-04 03:19 Smoke_shader\shader\glew32.dll
............此处省略49个文件信息
相关资源
- openGL下雨现象模拟
- OpenGL三维图形程序设计(Windows版)
- OpenGL实现鼠标旋转缩放平移操作
- Instagram Filters 破解了Instagram App的几十
- opengl 3d obj模型加载,贴图
- 实时计算机图形学 第二版英文版pdf格
- OpenGL实践三:水面涟漪的逼真绘制毕
- Opengl实现的Ray Casting 光线投射算法
- 天空盒(opengl)
- opengl图形学实验七 不同的光照渲染
- OpenGL-Nehe完整中文教程和全部源代码
- 扫描线填充算法的OpenGL实现
- OpenGL soil库与布置方法,位置
- 基于opengl的杯子模型
- opengl 红宝书 计算机图形学红宝书 图
- 一套基于QT、GDAL、OpenGL的遥感影像显
- OpenGL 画荷花
- OpenGL安装包+安装指导Windows平台
- freeglut,包括.dll、.h和.lib文件,完美
- OpenGL的虚拟校园漫游系统的设计与实
- 基于OpenGL的Loop网格细分
- OPenGL地层时适渲染LOD
- OpenGL使用画家算法实现隐藏面的消除
- OpenGL实现3D小车
- 基于VS2010的OpenGL 3D场景
- 使用OpenGL实现飞机动画
- OpenGL圣诞树
- 计算机图形学OpenGL——地月系
- opengl立体树
- OpenGL+FreeType渲染宋体中文
评论
共有 条评论