OpenGL绘制简单场景,实现旋转缩放平移和灯光效果

本项目实现了用OpenGL绘制一个简单场景,包括正方体、球体和网格,实现了物体的旋转、缩放、平移和灯光效果。附有项目完整代码。有具体凝视。适合刚開始学习的人熟悉opengl使用。

开发情况

开发环境VS2012+OpenGL

开发平台 Intel core i5,Intel HD Graphics Family

本项目实现了绘制一个场景(包含立方体、球体、网格),对各物体实现平移、旋转、缩放功能,加入了光源并简单设置了物体材质。

本项目演示样例代码下载(里面有具体凝视)

感谢nehe的框架!

场景介绍

初始场景。在(-3.0f,-2.0f,-10.0f)处绘制了一个正方体,在(3.0f,-2.0f,-10.0f)处绘制了一个半径为2的球,在y = -3.0f平面绘制了10*10的网格线。


操作介绍

旋转操作:

GLfloat    rquad;//旋转角度

···

glRotatef(rquad,0.0f,1.0f,0.0f);//旋转变换。绕y轴

rquad-=0.1f;// 降低四边形的旋转变量

旋转后例如以下图

平移操作

glTranslatef(0.0f,-rquad/100,0.0f);

平移前后如图所看到的


缩放操作

glScalef(-rquad/100,-rquad/100,-rquad/100);

缩放后例如以下图

灯光介绍

OpenGL的光照模型是用来模拟现实生活中的光照的。它依据顶点的法线向量和光源的位置决定顶点的明暗程度。依据顶点的材质和光源中三原色的成分来决定物体将表现出如何的颜色。

调用glLightfv(GL_LIGHT0,GL_AMBIENT,@ambientLight);来设置场景的环境光。

本例中光照设置例如以下,前三位为RGB颜色,第四位为alpha

GLfloatlight_ambient[] = { 0.5, 0.5, 0.5, 1.0 };//环境光

GLfloatlight_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };//漫射光

GLfloatlight_specular[] = { 0.0, 1.0, 0.0, 1.0 };//镜面光

具体代码见代码附件。加入光源后例如以下图

对OpenGL的理解

OpenGL变换实际上是通过矩阵乘法来实现。不管是移动、旋转还是缩放大小,都是通过在当前矩阵的基础上乘以一个新的矩阵来达到目的。

可是从用户的角度。更直观的感受是操作矩阵。

首先通过glMatrixMode()方法设置投影矩阵和模型观察矩阵,而后面的绘制过程,就是在模型矩阵中产生不同的点,形成各种图形,然后通过选择的投影矩阵投影到屏幕上,被我们观察到。所以对图形的各种操作也能够看成是对坐标系的变换。

以平移操作为例,使用glSolidCube(GLfloat size)方法画一个正方体,这个正方体是默认画在当前坐标系中央的,所以要移动正方体,仅仅要移动坐标系就能够。glTranslatef(0.0f,-rquad/100,0.0f);就是不断向y轴正方向移动坐标系。不断绘制正方体,就能有平移的效果。

原文地址:https://www.cnblogs.com/blfshiye/p/5148820.html