/*-
* Opengl Demo Test
*
* Fredric : 2016-7-10
*/ #include <GLUT/GLUT.h>
#include <stdlib.h> void display_demo01();
void display_demo1_idle(); int main(int argc, const char * argv[]) { glutInit(&argc, argv); glutCreateWindow("Fredric Practice Demo"); glutDisplayFunc(display_demo01); /*
* void APIENTRY glutIdleFunc(void (*func)(void))
* 当没有窗口事件发生时的全局回调函数
*/
glutIdleFunc(&display_demo1_idle); glutMainLoop(); } //**************************************************************************** static int g_angle = ; /*
* 基础动画及光照效果
* 3D图形中的四种光源模型:
* 1、点光源:光源从某一点向四面八方传播,例如太阳
* 2、无穷远光源:对于被照射的物体而言,光线平行摄入,如无穷远处的阳光;
* 3、方向光源:沿某个方向在特定角度内摄入,如手电筒、车灯等;
* 4、环境光源:从各个角度都有投射到场景中的光线
* PS:在opengl中还考虑自身发光的光源
*
* 光线是会随着距离的增加而衰减的,衰减的程度成为衰减因子k,方向光源在偏离该方向时也会衰减 * 同时材质需要在光照中考虑反射的情况,分为:
* 1、慢反射:光线射到物体后,其反射是任意方向的;
* 2、镜面反射:光线射到物体后,其反射是根据被照射物体的法线方向;
*
* 综上,对opengl中的某个3D图像顶点的绘制基于如下公式:
* 顶点颜色 = 材质自发光颜色项 + ∑(环境光颜色+衰减因子×(漫反射项 + 镜面反射项))
*/
void display_demo01(){ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glShadeModel(GL_SMOOTH); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(, , , ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(, -, , , , , , , ); glColor3f(0.0f, 0.4f, 0.2f); glRotatef(-(g_angle * 10.0f),10.0f,5.0f,0.0f); //设置光源
{
GLfloat light_position[] = {200.0f, 300.0f, 400.0f, 1.0f};
GLfloat light_ambient[] = {1.0f, 1.0f, 1.0f, 1.0f};
GLfloat light_diffuse[] = {1.0f, 1.0f, 1.0f, 1.0f};
GLfloat light_specular[] = {1.0f, 1.0f, 1.0f, 1.0f}; /*
* glLightfv (GLenum light, GLenum pname, const GLfloat *params);
* 控制光源的位置、强度、颜色等
* light:GL_LIGHT0 表示第一个光源 GL_LIGHT1 表示第二个光源
* panme: 光源控制的类型
* GL_POSITION:光源位置
* GL_AMBIENT: 光源中的环境光强度
* GL_DIFFUSE: 光源中的散射光强度
* GL_SPECULAR: 光源中的镜面反射光强度
*/
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
} //设置材质
{
GLfloat mat_ambient[] = {0.0f, 0.5f, 0.3f, 1.0f};
GLfloat mat_diffuse[] = {0.0f, 0.3f, 0.2f, 1.0f};
GLfloat mat_specular[] = {0.0f, 0.8f, 0.2f, 1.0f};
GLfloat mat_emission[] = {0.5f, 0.0f, 0.0f, 1.0f};
GLfloat mat_shininess = 68.0f; /*
* glMaterialfv (GLenum face, GLenum pname, const GLfloat *params)
* 设置材质
* face: 正反面
* GL_FRONT:正面
* GL_BACK:反面
* GL_FRONT_AND_BACK:正反面
* pname:材质属性
* GL_AMBIENT:材质的环境颜色
* GL_DIFFUSE:材质的散射颜色
* GL_SPECULAR:材质的镜面反射颜色
* GL_EMISSION: 材质的发射光颜色
* GL_SHININESS:镜面反射指数,0~128 值越小越粗糙
*/ glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, mat_shininess);
} //glutSolidSphere(100,30,30);
glutSolidCube(); glFlush(); glutSwapBuffers(); } //回调函数
void display_demo1_idle(){ g_angle += ; display_demo01();
}

opengl 笔记(2)的更多相关文章

  1. opengl笔记——旋转,一段代码的理解

    重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix g ...

  2. OpenGL 笔记 <2> Compiling and Linking a shader program

    Preface 这一节所有的主要内容都在一个OpenGL库文件中<LoadShaders.h> ,只需要用LoadShader()函数进行加载即可.但是由于老是出错,所以自己实现了一下,也 ...

  3. opengl 笔记(1)

    参考<opengl入门教程>.<OpenGL之坐标转换>.<OpenGL绘制管线操作细节>等资料. 复习下留个备忘:) /*- * Opengl Demo Test ...

  4. opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()

    能找到最好的解释来自:http://www.gamedev.net/topic/489879-glpushmatrixglpopmatrix--glloadmatrixf/ 原理: glPushMat ...

  5. opengl笔记

    GL_ARRAY_BUFFER(表示顶点数据) GL_ELEMENT_ARRAY_BUFFER(表示索引数据) GL_PIXEL_UNPACK_BUFEER( 表示传递给O p e n G L 的像素 ...

  6. OpenGL笔记(五) 着色器渲染(以Android为例)

    一.Android平台上下文环境的创建及初始化 1. 首先实例化Android上下文环境,即EGL的初始化. bool EGLCore::init(EGLContext sharedContext) ...

  7. OpenGL笔记(四) API参考

    常见API glActiveTexture 选择活动纹理单元 glAttachShader 将一个着色器对象绑定到一个程序对象 void glAttachShader(GLuint program, ...

  8. OpenGL笔记(三) GLSL语法与内建函数

    GLSL,OpenGL Shading Language,GLSL中没有指针,并且没有任何类型的字符串或字符. (1)GLSL的修饰符与基本数据类型 const:用于声明非可写的编译时常量变量: at ...

  9. OpenGL笔记(一) 绘制三角形

    GLTools: 一些有用且可复用的函数 GLEW: OpenGL API的一些扩展机制 GLUT: OpenGL Utility toolkit, OpenGL跨平台相关,隐藏平台相关细节 RC代表 ...

随机推荐

  1. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  2. 数据库优化案例——————某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  3. PC分配盘符的时候发现==》RPC盘符不可用

    服务器汇总:http://www.cnblogs.com/dunitian/p/4822808.html#iis 服务器异常: http://www.cnblogs.com/dunitian/p/45 ...

  4. 参考bootstrap中的popover.js的css画消息弹框

    前段时间小颖的大学同学给小颖发了一张截图,图片类似下面这张图: 小颖当时大概的给她说了下,其实小颖也不知道上面那个三角形怎么画嘻嘻,给她说了DOM结构,具体的css让她自己百度,今天小颖自己参考boo ...

  5. scala练习题1 基础知识

    1, 在scala REPL中输入3. 然后按下tab键,有哪些方法可以被调用? 24个方法可以被调用, 8个基本类型: 基本的操作符, 等:     2,在scala REPL中,计算3的平方根,然 ...

  6. ObserverPattern(观察者模式)

    import java.util.ArrayList; import java.util.List; /** * 观察者模式 * @author TMAC-J * 牵一发而动全身来形容观察者模式在合适 ...

  7. 易用BPM时代,企业如何轻松驾驭H3?

    众所周知,BPM作为企业发展的推动力,能敏捷高效的融合业务流程和信息资源.通过综合考虑流程的成本.效率.质量等方面因素,用IT系统将调整后的流程固化下来,从而降低企业管理成本,提高内部运营效率,提升企 ...

  8. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  9. linux系统下基于mono部署asp.net,使用ef6与mysql出现的问题【索引】

    git clone github.com/mono的源码,日期:2014-06-19,百度网盘链接:http://pan.baidu.com/s/1kTG9EUb 关于asp.net利用mono部署到 ...

  10. Nova PhoneGap框架 第一章 前言

    Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...