readme.txt 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. 实现技术
  23. 地形绘制
  24. 使用了gc_tex,把坐标缩小到1/50,地形没有颜色,有纹理
  25. 纹理坐标存在glBuffer里
  26. 飞行模拟
  27. 没有设置自动飞行,使用键盘控制位置和观察角度(见使用说明-操作)
  28. 在host端维护飞机坐标x,y,z以及观察的方向theta,phi,侧看的角度tau
  29. 在cpu端用lookat和Frustum计算model_view和projection,使用uniform传给gpu
  30. 物体绘制
  31. 设置了物体,物体没有纹理,没有颜色,
  32. 物体的纹理坐标都设成一个特殊坐标,
  33. 在片段着色器中增加判断,如果纹理坐标是特殊坐标,则涂特殊的颜色
  34. 光照
  35. 顶点法向用cpu预先计算,存在glBuffer里,
  36. 顶点光照在顶点着色器里计算,
  37. 面的法向在顶点着色器里计算,
  38. 面的光照在片段着色器里计算
  39. 模型的数据结构,效率和交互
  40. 对于顶点,纹理坐标,纹素,颜色的数据上面已经说明
  41. 对于碰撞检测使用cpu计算,在二维数组[x][y]中存放地形高度z,
  42. 判断当前位置x,y,z是否陷入地下,z取值上可以选用双向线性插值biliner或者最近nearest,
  43. 如果陷入地下,则把z设为一定高度。对于飞机的实际大小,不做考虑。
  44. 对于xy方向的碰装,和物体的碰撞,不做考虑。