CHEN Yihui 5 years ago
parent
commit
1d158c4e00
2 changed files with 46 additions and 1 deletions
  1. 1 1
      build.sh
  2. 45 0
      readme.txt

+ 1 - 1
build.sh

@@ -1,2 +1,2 @@
 #!/bin/bash
-g++ main.cc InitShader.cpp -I. -lGL -lGLEW -lglut -o main
+g++ main.cc InitShader.cpp -I. -lGL -lGLEW -lglut -o main.out

+ 45 - 0
readme.txt

@@ -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方向的碰装,和物体的碰撞,不做考虑。