OpenGL: 缩放变换

来源:互联网 发布:飞漫素材源码 编辑:程序博客网 时间:2024/05/01 14:51

代码如下:

#define GLUT_DISABLE_ATEXIT_HACK#include "gl/glut.h"#pragma comment(lib, "glut32.lib")int i = 0;void OnDisplay(void){GLfloat sizes[]={1.0f, 1.0f, 1.0f, 2.0f, 1.0f, 1.0f,1.0f, 2.0f, 1.0f,1.0f, 1.0f, 2.0f,2.0f, 2.0f, 1.0f,2.0f, 1.0f, 2.0f,1.0f, 2.0f, 2.0f,2.0f, 2.0f, 2.0f, };glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glEnable(GL_DEPTH_TEST);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glRotatef(30.0f, 1.0f, 0.0f, 0.0f);glRotatef(15.0f, 0.0f, 1.0f, 0.0f);glColor3f(1.0f, 1.0f, 0.0f);glScalef(sizes[i * 3], sizes[i * 3 + 1], sizes[i * 3 + 2]);glutSolidCube(50.f);glutSwapBuffers();}void OnReShape(int w, int h){GLfloat aspect = (GLfloat)w / (GLfloat)h;GLfloat nRange = 100.0f;glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);     //将当前矩阵指定为投影模式glLoadIdentity();//设置三维投影区if (w <= h){glOrtho(-nRange, nRange, -nRange * aspect, nRange * aspect, -nRange, nRange);} else{glOrtho(-nRange, nRange, -nRange / aspect, nRange / aspect, -nRange, nRange);}}void OnMouse(GLint button,  GLint State,  GLint x,  GLint y){if(button == GLUT_LEFT_BUTTON && State == GLUT_UP) //鼠标左键释放{i++;}if(i == 8)//若i的值为8,则重回0{i = 0;}glutPostRedisplay();}void SetupLights(){GLfloat ambientLight[]  = {0.2f,  0.2f,  0.2f,  1.0f};//环境光GLfloat diffuseLight[]  = {0.9f,  0.9f,  0.9f,  1.0f};//漫反射GLfloat specularLight[] = {1.0f,  1.0f,  1.0f,  1.0f};//镜面光GLfloat lightPos[]      = {50.0f, 80.0f, 60.0f, 1.0f};//光源位置glEnable(GL_LIGHTING);//启用光照glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);//设置环境光源glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);//设置漫反射光源glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);//设置镜面光源glLightfv(GL_LIGHT0, GL_POSITION, lightPos);//设置灯光位置glEnable(GL_LIGHT0);//打开第一个灯光glEnable(GL_COLOR_MATERIAL);//启用材质的颜色跟踪glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);//指定材料着色的面glMaterialfv(GL_FRONT, GL_SPECULAR, specularLight); //指定材料对镜面光的反应glMateriali(GL_FRONT, GL_SHININESS, 100);           //指定反射系数}void main(int argc, char* argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(600, 480);glutCreateWindow("OpenGL缩放变换");glutReshapeFunc(OnReShape);glutDisplayFunc(OnDisplay);glutMouseFunc(OnMouse);SetupLights();glutMainLoop();}

运行效果如下:

0 0
原创粉丝点击