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
- OpenGL: 缩放变换
- OpenGL教程翻译 第八课 缩放变换
- 【一步步学OpenGL 8】 -《缩放变换》
- OpenGL坐标变换 平移,缩放与旋转
- 二维图形学的变换-平移、旋转、缩放 OpenGL
- opengl变换
- OpenGL变换
- OpenGL变换
- opengl变换
- opengl变换
- OpenGL--变换
- [OpenGL ES 04]3D变换实践篇:平移,旋转,缩放
- [OpenGL ES 04]3D变换实践篇:平移,旋转,缩放
- [OpenGL ES 04]3D变换实践篇:平移,旋转,缩放
- [OpenGL ES 04]3D变换实践篇:平移,旋转,缩放
- [OpenGL ES 04]3D变换实践篇:平移,旋转,缩放
- [OpenGL ES 04]3D变换实践篇:平移,旋转,缩放
- ScaleTransform缩放变换
- Android 开机自启服务
- 杂记
- oracle 11g 忘记 默认用户密码
- like作连词&it作形式宾语
- C# 关于ConnectionString属性尚未初始化
- OpenGL: 缩放变换
- DM8168多核软件框架---之syslink
- AO开发SDE(一)
- 数据结构之双向链表的Java实现
- ubuntu vim 不能显示中文的解决方法
- iOS开发常用国外网站清单
- proguard.cfg
- 通过实现一个TableView来理解iOS UI编程
- servlet单实例多线程模式!!!!!!!!!