@@ -239,6 +239,15 @@ void idle(void) { glutPostRedisplay(); }
void keyboard(unsigned char key, int mousex, int mousey) {
switch (key) {
case 033: // Escape Key
+ exit(0);
+ break;
+ case 'f':
+ if (foggy > 0) {
+ foggy = 0;
+ } else {
+ foggy = 1;
+ }
case '1':
tau += 0.01;
break;
@@ -19,7 +19,7 @@
9,6:控制观察者z位置(升降)
8,5:控制看的俯仰
1,3:控制观察者的侧看
-
+ f:切换雾开关
实现技术
地形绘制
使用了gc_tex,把坐标缩小到1/50,地形没有颜色,有纹理
@@ -38,6 +38,9 @@
面的法向在顶点着色器里计算,
面的光照在片段着色器里计算
雾
+ 使用uniform变量,传输是否有雾(int),及眼睛位置(vec3)到顶点着色器,
+ 在顶点着色器里根据距离(的平方)计算雾化参数(使用指数),若没雾直接输出雾化参数1
+ 在片段着色器里计算雾化效果
模型的数据结构,效率和交互
对于顶点,纹理坐标,纹素,颜色的数据上面已经说明
对于碰撞检测使用cpu计算,在二维数组[x][y]中存放地形高度z,