这两个都是glMatrixMode()函数的参数,那就先说说glMatrixMode吧~,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有,GL_PROJECTION,GL_MODELVIEW和GL_TEXTURE;
如果参数是GL_PROJECTION,这个是投影的意思,就是要对投影相关进行操作,也就是把物体投影到一个平面上,就像我们照相一样,把3维物体投到2维的平面上。这样,接下来的语句可以是跟透视相关的函数,比如glFrustum()或gluPerspective();
如果参数是GL_MODELVIEW,这个是对模型视景的操作,接下来的语句描绘一个以模型为基础的适应,这样来设置参数,接下来用到的就是像gluLookAt()这样的函数;
若是GL_TEXTURE,就是对纹理相关进行操作;
顺便说下,OpenGL里面的操作,很多是基于对矩阵的操作的,比如位移,旋转,缩放,所以,这里其实说的规范一点就是glMatrixMode是用来指定哪一个矩阵是当前矩阵,而它的参数代表要操作的目标,GL_PROJECTION是对投影矩阵操作,GL_MODELVIEW是对模型视景矩阵操作,GL_TEXTURE是对纹理矩阵进行随后的操作。
mode 指定哪一个矩阵堆栈是下一个矩阵操作的目标,可选值: GL_MODELVIEW、GL_PROJECTION、GL_TEXTURE.
说明
glMatrixMode设置当前矩阵模式:
GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.
GL_PROJECTION,对投影矩阵应用随后的矩阵操作.
GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.
与glLoadIdentity()一同使用
glLoadIdentity():该函数的功能是重置当前指定的矩阵为单位矩阵。
在glLoadIdentity()之后我们为场景设置了透视图。glMatrixMode(GL_MODELVIEW)设置当前矩阵为模型视图矩阵,模型视图矩阵储存了有关物体的信息。
下面是关于sin和cos的
#!/usr/bin/perl -w use strict; use warnings; use OpenGL qw/ :all /; use OpenGL::Config; glutInit(); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowPosition(100,100); glutInitWindowSize(400,400); glutCreateWindow("my first OpenGL program"); glClearColor(0,0,0,255); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); gluOrtho2D(-10,10,-10,10); glutDisplayFunc(\&mydis); glutMainLoop(); return 0; sub mydis() { my $x=-10; my $y; my $z=-10; glPointSize(1); glBegin(GL_POINTS); for (0..100000) { $x+=0.01; $z+=0.01; $y=sin($x); glColor3f(255,0,0); glVertex2f($x,$y); $y=cos($z); glColor3f(0,255,0); glVertex2f($x,$y); } glEnd(); glBegin(GL_LINES); glVertex2f(-10,0); glVertex2f(10,0); glEnd(); glBegin(GL_LINES); glVertex2f(0,-10); glVertex2f(0,10); glEnd(); glFlush(); }
下面以3D效果
#!/usr/bin/perl -w use strict; use warnings; use OpenGL qw/ :all /; use OpenGL::Config; glutInit(); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowPosition(100,100); glutInitWindowSize(400,400); glutCreateWindow("my first OpenGL program"); glClearColor(0,0,0,255); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); gluOrtho2D(-10,10,-10,10); glutDisplayFunc(\&mydis); glutMainLoop(); return 0; sub mydis() { my $x=-10; my $y; my $z=-10; glPointSize(1); glBegin(GL_LINE_LOOP); for (0..100000) { $x+=0.01; $z+=0.01; $y=sin($x); glColor3f(255,0,0); glVertex3f($x,$y,($x+$y)/10); $y=cos($z); glColor3f(0,255,0); glVertex3f($x,$y,($x+$y)/10); } glEnd(); glBegin(GL_LINES); glVertex2f(-10,0); glVertex2f(10,0); glEnd(); glBegin(GL_LINES); glVertex2f(0,-10); glVertex2f(0,10); glEnd(); glFlush(); }
相关推荐
strawberry-perl-5.32.1.1-64bit.msi离线安装包(官方),可避免从官网下载速度慢的问题。 windows环境的perl安装包,不用去官网下载了,测试好用。 strawberry-perl-5.32.1.1-64bit.msi离线安装包(官方),可避免...
linux 离线安装perl-IPC-Cmd
strawberry-perl-5.32.1.1-32bit.msi离线安装包(官方),可避免从官网下载速度慢的问题。 windows环境的perl安装包,不用去官网下载了,测试好用。 strawberry-perl-5.32.1.1-32bit.msi离线安装包(官方),可避免...
perl-WWW-Curl4.17版本rpm包
ActivePerl-5.28.1 win10 x64离线安装包(官方),可避免从官网下载速度慢的问题。 ActivePerl-5.28.1 win10 x64离线安装包(官方),可避免从官网下载速度慢的问题。 ActivePerl-5.28.1 win10 x64离线安装包(官方...
Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0...
strawberry-perl-5.10.1.0.msi
Windows Perl-5.36.0 VC2017 源码编译版 此版本是在Windows下,使用github上Perl-5.36的源码,在VC2017下编译的。
Digest-Perl-MD5
perl-parent-0.225-244.el7.noarch perl-HTTP-Tiny-0.033-3.el7.noarch perl-podlators-2.5.1-3.el7.noarch perl-Pod-Perldoc-3.20-4.el7.noarch 1:perl-Pod-Escapes-1.04-286.el7.noarch perl-Text-...
perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
刚刚下载的strawberry-perl-5.32.1.1-64bit 用于64位系统Perl 希望对你有用
perl-MailTools-1.53-1.noarch.rpm
perl-DBI-1.52-2.el5.i386.rpm
perl-5.16.3-297.el7.x86_64.rpm
Windows Perl-5.36.0 VC2015 源码编译版 此版本是在Windows下,使用github上Perl-5.36的源码,在VC2015下编译的。
strawberry-perl-5.32.1.1-32bit
perl-XML-DOM-1.44-7.el6.noarch.rpm perl-XML-DOM-1.44-7.el6.noarch.rpm
strawberry-perl-5.32.1.1-64bit安装包 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
perl-Text-Iconv-1.7-2.el5.i386