#include <GL/glut.h>
#include <stdio.h>
#include <iostream>
using namespace std;
static GLint fogMode; static void init(void){
GLfloat position [] ={0.5,0.5,3.0,0.0};
glEnable(GL_DEPTH_TEST);
glLightfv(GL_LIGHT0,GL_POSITION,position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
{
GLfloat mat [] ={0.1745,0.01175,0.01175};
glMaterialfv(GL_FRONT,GL_AMBIENT,mat);
mat[]=0.61424;mat[]=0.04136;mat[]=0.04136;
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat);
mat[]=0.727811;mat[]=0.626959;mat[]=0.626959;
glMaterialfv(GL_FRONT,GL_SPECULAR,mat);
glMaterialf(GL_FRONT,GL_SHININESS,0.6*128.0);
} glEnable(GL_FOG);
{
GLfloat fogColor[]={0.0,0.8,0.0,1.0}; fogMode=GL_EXP;
glFogi(GL_FOG_MODE,fogMode);
glFogfv(GL_FOG_COLOR,fogColor);
glFogf(GL_FOG_DENSITY,0.35);
glHint(GL_FOG_HINT,GL_DONT_CARE);
glFogf(GL_FOG_START,1.0);
glFogf(GL_FOG_END,5.0);
} glClearColor(0.0,0.8,0.0,1.0);
} static void renderSphere(GLfloat x,GLfloat y,GLfloat z){
glPushMatrix();
glTranslatef(x,y,z);
glutSolidSphere(0.4,,);
glPopMatrix();
} void display(void){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
renderSphere(-.,-0.5,-1.0);
renderSphere(-.,-0.5,-.);
renderSphere(.,-0.5,-.);
renderSphere(.,-0.5,-.);
renderSphere(.,-0.5,-.);
glFlush();
} void reshape(int w,int h){
glViewport(,,(GLfloat)w,(GLfloat)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h){
glOrtho(-2.5,2.5,-2.5*(GLfloat)h/(GLfloat)w,2.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);
}else{
glOrtho(-2.5*(GLfloat)w/(GLfloat)h,2.5*(GLfloat)w/(GLfloat)h,-2.5,2.5,-10.0,10.0);
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
} void keyboard(unsigned char key,int x,int y){
switch(key){
case 'f':
case 'F':
if(fogMode == GL_EXP){
fogMode = GL_EXP2;
printf("current fog mode is : GL_EXP2");
cout<<"current fog mode is : GL_EXP2"<<endl;
}else if(fogMode ==GL_EXP2){
fogMode = GL_LINEAR;
printf("current fog mode is : GL_LINEAR");
cout<<"current fog mode is : GL_LINEAR"<<endl;
}else if(fogMode ==GL_LINEAR){
printf("current fog mode is : GL_EXP");
cout<<"current fog mode is : GL_EXP"<<endl;
fogMode = GL_EXP;
}
glFogi(GL_FOG_MODE,fogMode);
glutPostRedisplay();
break;
case :
exit();
break;
default:
break;
}
} int main(int argc,char **argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH|GLUT_MULTISAMPLE);
glutInitWindowSize(,);
glutCreateWindow(argv[]); init();
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutDisplayFunc(display);
glutMainLoop();
return ;
}

opengl雾开启的更多相关文章

  1. OpenGL法向量变换

    OpenGL光照开启时,法向量用于决定特定顶点或面上接受到光照的多少.光照处理过程作用于观察坐标空间,因此,模型对象坐标系的法向量也需要使用GL_MODELVIEW矩阵变换到观察坐标系. 然而,法向量 ...

  2. 关于Unity中水和雾的使用

    水 自己来做水和雾还是有点麻烦的,不过没关系,Unity帮我们做好了很多可以用的. 1.Unity自己实现了水的特效,帮助我们解决游戏中水的问题 2.Unity的水集成在了Environment的环境 ...

  3. C#应用视频教程2.2 OPENGL虚拟仿真介绍

    三维在理解了如何绘制2D元素之后,我们尝试绘制3D元素. 其实多个三角形也能够成四面体,多个长方形也能够成六面体,所以绘制3D元素的时候,只要顶点数量匹配就行了   这里我们尤其注意,我把绘制之前的三 ...

  4. OpenGL学习脚印:背面剔除(Face Culling)

    写在前面 在绘制封闭类型的几何对象时,开启背面剔除功能能够提高渲染性能.本节简要介绍下背面剔除,示例程序可以在我的github下载. 什么是背面剔除 当我们观察场景中对象时,一般只能以一定角度来观察, ...

  5. OpenGL超级宝典笔记——深度纹理和阴影 【转】

    目录[-] 光源视角 新型的纹理 深度纹理的大小 首先绘制阴影 然后是光照 投影阴影贴图 阴影比较 之前我们介绍过简单的把物体压平到投影平面来制造阴影.但这种阴影方式有其局限性(如投影平面须是平面). ...

  6. 3D Computer Grapihcs Using OpenGL - 04 First Triangle

    本节将绘制一个三角形 先看最终代码: MyGlWindow.cpp: #include <gl\glew.h> #include "MyGlWindow.h" void ...

  7. SharpGL学习笔记(十六) 多重纹理映射

    多重纹理就把多张贴图隔和在一起.比如下面示例中,一个表现砖墙的纹理,配合一个表现聚光灯效果的灰度图,就形成了砖墙被一个聚光灯照亮的效果,这便是所谓的光照贴图技术. 多重纹理只在OpenGL扩展库中才提 ...

  8. SharpGL学习笔记(十九) 摄像机漫游

    所谓的摄像机漫游,就是可以在场景中来回走动. 现实中,我们通过眼睛观察东西,身体移动带动眼睛移动观察身边的事物,这也是在漫游. 在OpenGL中我们使用函数LookAt()来操作摄像机在三维场景中进行 ...

  9. SharpGL学习笔记(十五) 纹理映射

    纹理映射非常实用,在游戏场景中已经无所不在了. 一个较少的多边形构成的模形,配合好的纹理贴图进行映射,可以得到逼真的效果.游戏中的天空,地面,墙面,和植物都是纹理贴图进行映射的. 例如最终幻想8的男女 ...

随机推荐

  1. 使用 Docker 搭建 Java Web 运行环境

    黄勇的博客 Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都听说过它.Docker 是一种“轻量级”容器技术,它几乎动摇了传统虚拟化技术的地位,现在国内外已经有越来越多的公司开始逐 ...

  2. VM11安装Mac OS X 10.10

    工具/原料 1. VMware Workstation 11.12 2. unlocker 206(for OS X 插件补丁) 3. Mac OS X 10.10镜像 方法/步骤   有图有真相,哈 ...

  3. python列表删除重复元素的三种方法

    给定一个列表,要求删除列表中重复元素. listA = ['python','语','言','是','一','门','动','态','语','言'] 方法1,对列表调用排序,从末尾依次比较相邻两个元素 ...

  4. Route Filters

    Route Filters The Controller's Middleware, represents a High-Level processing API, executed by the r ...

  5. PHP加速器

    转http://www.vpser.net/opt/apc-eaccelerator-xcache.html 一.PHP加速器介绍         PHP加速器是一个为了提高PHP执行效率,从而缓存起 ...

  6. RPC之Thrift学习实战

    关于Thrift的学习实战请参考:http://blog.csdn.net/column/details/slimina-thrift.html

  7. Redis的安装与使用

    一.什么 Redis REmote DIctionary Server,简称 Redis,是一个类似于Memcached的Key-Value存储系统.相比Memcached,它支持更丰富的数据结构,包 ...

  8. http请求方法与响应状态码

    请求方法:GET POST HEAD PUT DELETE OPTIONS常用的方法是:GET POST GET提交可以在浏览器地址栏看到提交的信息 POST提交方式不显示在地址栏,相对于GET方式较 ...

  9. oracle怎么查看表字段的类型

    select column_name,data_type,DATA_LENGTH From all_tab_columns where table_name=upper('表名') AND owner ...

  10. scala学习笔记:各种奇怪的写法

    Unit函数的定义: def foo()={println("hi")} 等号可以省略: def foo(){println("hi")} update方法: ...