opengl之glScalef()函数
来源:互联网 发布:mac上打开flac 编辑:程序博客网 时间:2024/05/29 04:28
glScalef是openGL中的模型缩放函数,就是把当前矩阵与一个表示延各个轴对物体进行拉伸、压缩、反射的矩阵相乘。这个物体的每个点的x,y,z坐标与对应的xyz参数相乘。
先看函数定义
void glScalef(GLfloat x,
GLfloat y,
GLfloat z);
参数x,y,z分别为模型在x,y,z轴方向的缩放比。
例如:
如glScalef(2.0f,3.0f,4.0f);将模型按x,y,z方向分别拉伸了2,3,4倍。
参数也可取负数,也可以理解为先关于某轴翻转180°,再缩放;
如glScalef(1.0f,1.0f,-1.0f);将模型关于z轴翻转了180°(即关于xy轴所在平面对称);
先看函数定义
void glScalef(GLfloat x,
GLfloat y,
GLfloat z);
参数x,y,z分别为模型在x,y,z轴方向的缩放比。
例如:
如glScalef(2.0f,3.0f,4.0f);将模型按x,y,z方向分别拉伸了2,3,4倍。
参数也可取负数,也可以理解为先关于某轴翻转180°,再缩放;
如glScalef(1.0f,1.0f,-1.0f);将模型关于z轴翻转了180°(即关于xy轴所在平面对称);
如glScalef(1.0f,1.0f,-2.0f);将模型关于-z轴拉伸2倍。
下面通过具体的代码进行说明:
这段代码中主要功能是实现鼠标按键出发事件,就不一一截图了,大家自行运行体会
// 001.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <GL/glut.h>#include "math.h"float seta = 0;float mx=0,my=0,mz=-50,rx=0,ry=0,rz=0;//平移和旋转float sx=1,sy=1,sz=1;//缩放float mspeed=1.5,rspeed=1;void myDisplay(void);void myTimerFunc(int val){seta+=1;myDisplay();glutTimerFunc(1,myTimerFunc,0);}void myKeyboardFunc(unsigned char key,int x, int y){switch(key){case 'w':my+=mspeed;break;case 's':my-=mspeed;break;case 'a':mx-=mspeed;break;case 'd':mx+=mspeed;break;case 'q':mz+=mspeed;break;case 'e':mz-=mspeed;break;case 'i':rx+=rspeed;break;case 'k':rx-=rspeed;break;case 'j':ry-=rspeed;break;case 'l':ry+=rspeed;break;case 'u':rz+=rspeed;break;case 'o':rz-=rspeed;break;case '1':sx+=0.1;break;case '2':sx-=0.1;break;case '3':sy+=0.1;break;case '4':sy-=0.1;break;case '5':sz+=0.1;break;case '6':sz-=0.1;break;}}void SetRC(){glShadeModel(GL_FLAT);//glEnable(GL_CULL_FACE);glFrontFace(GL_CCW);glEnable(GL_DEPTH_TEST);glPolygonMode(GL_BACK,GL_LINE);}void myDisplay(void){ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glPushMatrix();//模型控制glTranslatef(mx,my,mz);glRotatef(rz,0,0,1);//rglRotatef(rx,1,0,0);//pglRotatef(ry,0,1,0);//hglScalef(sx,sy,sz);//绘制三角扇glBegin(GL_TRIANGLE_FAN);glVertex3f(0,20,0);GLfloat angle,x,y=0,z;int iPivot = 1;//标记颜色for(angle = 0;angle<2*3.14;angle+=3.14/8){x = 20*sin(angle);z = 20*cos(angle);if(iPivot%2)glColor3f(1,0,0);elseglColor3f(0,1,0);iPivot++;glVertex3f(x,0,z);}glEnd();glPopMatrix();glutSwapBuffers();}void myReshape(int w,int h){GLfloat nRange = 100.0f;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60,GLfloat(w)/h,1,1000);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}int main(int argc, char *argv[]){//初始化opengl环境 glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//创建窗口 glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("第一个OpenGL程序");//设置相关回掉函数 glutDisplayFunc(&myDisplay);//绘制三角形glutTimerFunc(1,myTimerFunc,0);//设置计时器glutReshapeFunc(&myReshape);//glutKeyboardFunc(&myKeyboardFunc);////初始化opengl绘制状态SetRC();//进入消息循环 glutMainLoop(); return 0;}
0 0
- opengl之glScalef()函数
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的比较
- 《高效学习OpenGL》之模型变换 glTranslatef(), glRotatef(),glScalef()
- 【转】OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL之gluLookAt函数
- OpenGL 之glShadeModel函数
- OpenGL之gluLookAt()函数
- OpenGL之glUniform函数
- OpenGl学习之glRotate函数
- OpenGL ES之glUniform函数
- 动态规划之传纸条(多线程dp)
- 20170314,开启菜鸡进化之旅。
- Caffe 网络结构可视化
- JAVA实现大数据量导出excel
- TensorFlow(GPU) 安装
- opengl之glScalef()函数
- 稳定匹配问题
- html5基础
- Xenomai native API
- Linux系统调用------追踪系统调用的执行过程
- 778799
- 九度OJ--1440
- VPN工作原理介绍
- MySQL中针对大数据量常用技术:查询优化,数据转移