readme.txt 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. 程序功能
  2. 模拟场景漫游;可交互光源,雾,物体材料;碰撞检测等
  3. 编译环境
  4. Ubuntu 19.04
  5. Linux 5.0.0-37-generic
  6. gcc version 8.3.0
  7. 使用说明
  8. 需要正确安装OpenGL,freeglut,GLEW,并且动态库在LD_LIBRARY_PATH中
  9. 需要模型文件在运行路径
  10. gc_tex.obj
  11. gc_tex.ppm
  12. cow.obj
  13. 编译
  14. ./build.sh
  15. 运行
  16. ./main.out
  17. 操作
  18. w,a,s,d:控制观察者x,y位置(和看的方向等没关系)
  19. 9,6:控制观察者z位置(升降)
  20. 8,5:控制看的俯仰
  21. 1,3:控制观察者的侧看
  22. f:切换雾开关
  23. 实现技术
  24. 地形绘制
  25. 使用了gc_tex,把坐标缩小到1/50,地形没有颜色,有纹理
  26. 纹理坐标存在glBuffer里
  27. 飞行模拟
  28. 没有设置自动飞行,使用键盘控制位置和观察角度(见使用说明-操作)
  29. 在host端维护飞机坐标x,y,z以及观察的方向theta,phi,侧看的角度tau
  30. 在cpu端用lookat和Frustum计算model_view和projection,使用uniform传给gpu
  31. 物体绘制
  32. 设置了物体,物体没有纹理,没有颜色,
  33. 物体的纹理坐标都设成一个特殊坐标,
  34. 在片段着色器中增加判断,如果纹理坐标是特殊坐标,则涂特殊的颜色
  35. 光照
  36. 顶点法向用cpu预先计算,存在glBuffer里,
  37. 顶点光照在顶点着色器里计算,
  38. 面的法向在顶点着色器里计算,
  39. 面的光照在片段着色器里计算
  40. 使用uniform变量,传输是否有雾(int),及眼睛位置(vec3)到顶点着色器,
  41. 在顶点着色器里根据距离(的平方)计算雾化参数(使用指数),若没雾直接输出雾化参数1
  42. 在片段着色器里计算雾化效果
  43. 模型的数据结构,效率和交互
  44. 对于顶点,纹理坐标,纹素,颜色的数据上面已经说明
  45. 对于碰撞检测使用cpu计算,在二维数组[x][y]中存放地形高度z,
  46. 判断当前位置x,y,z是否陷入地下,z取值上可以选用双向线性插值biliner或者最近nearest,
  47. 如果陷入地下,则把z设为一定高度。对于飞机的实际大小,不做考虑。
  48. 对于xy方向的碰装,和物体的碰撞,不做考虑。