|
@@ -0,0 +1,45 @@
|
|
|
+程序功能
|
|
|
+ 模拟场景漫游;可交互光源,雾,物体材料;碰撞检测等
|
|
|
+编译环境
|
|
|
+ Ubuntu 19.04
|
|
|
+ Linux 5.0.0-37-generic
|
|
|
+ gcc version 8.3.0
|
|
|
+使用说明
|
|
|
+ 需要正确安装OpenGL,freeglut,GLEW,并且动态库在LD_LIBRARY_PATH中
|
|
|
+ 需要模型文件在运行路径
|
|
|
+ gc_tex.obj
|
|
|
+ gc_tex.ppm
|
|
|
+ cow.obj
|
|
|
+ 编译
|
|
|
+ ./build.sh
|
|
|
+ 运行
|
|
|
+ ./main.out
|
|
|
+ 操作
|
|
|
+ w,a,s,d:控制观察者x,y位置(和看的方向等没关系)
|
|
|
+ 9,6:控制观察者z位置(升降)
|
|
|
+ 8,5:控制看的俯仰
|
|
|
+ 1,3:控制观察者的侧看
|
|
|
+
|
|
|
+实现技术
|
|
|
+ 地形绘制
|
|
|
+ 使用了gc_tex,把坐标缩小到1/50,地形没有颜色,有纹理
|
|
|
+ 纹理坐标和颜色都存在glBuffer里,地形的颜色填(1,1,1)
|
|
|
+ 飞行模拟
|
|
|
+ 没有设置自动飞行,使用键盘控制位置和观察角度(见使用说明-操作)
|
|
|
+ 在host端维护飞机坐标x,y,z以及观察的方向theta,phi,侧看的角度tau
|
|
|
+ 在cpu端用lookat和Frustum计算model_view和projection,使用uniform传给gpu
|
|
|
+ 物体绘制
|
|
|
+ 设置了物体,物体没有纹理,有颜色,
|
|
|
+ 物体的纹理坐标都设成一个坐标,这样物体不会有纹理,颜色稍有影响
|
|
|
+ 光照
|
|
|
+ 顶点法向用cpu预先计算,存在glBuffer里,
|
|
|
+ 顶点光照在顶点着色器里计算,
|
|
|
+ 面的法向在顶点着色器里计算,
|
|
|
+ 面的光照在片段着色器里计算
|
|
|
+ 雾
|
|
|
+ 模型的数据结构,效率和交互
|
|
|
+ 对于顶点,纹理坐标,纹素,颜色的数据上面已经说明
|
|
|
+ 对于碰撞检测使用cpu计算,在二维数组[x][y]中存放地形高度z,
|
|
|
+ 判断当前位置x,y,z是否陷入地下,z取值上可以选用双向线性插值biliner或者最近nearest,
|
|
|
+ 如果陷入地下,则把z设为一定高度。对于飞机的实际大小,不做考虑。
|
|
|
+ 对于xy方向的碰装,和物体的碰撞,不做考虑。
|