glLoadIdentity()
将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作
1.X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。
2.OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。
3.中心左面的坐标值是负值,右面是正值。
移向屏幕顶端是正值,移向屏幕底端是负值。
移入屏幕深处是负值,移出屏幕则是正值。
glTranslatef(x, y, z)
沿着 X, Y 和 Z 轴移动。
注意在glTranslatef(x, y, z)中,当您移动的时候,您并不是相对屏幕中心移动,而是相对与当前所在的屏幕位置。其作用就是将你绘点坐标的原点在当前原点的基础上平移一个(x,y,z)向量。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
glLoadIdentity();
glTranslatef(-1.5f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,0.0f, 0.0f);
glVertex3f(1.0f,0.0f, 0.0f);
glVertex3f(0.0f,1.0f, 0.0f);
glEnd();
glLoadIdentity();
glTranslatef(0.0f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,0.0f, 0.0f);
glVertex3f(1.0f,0.0f, 0.0f);
glVertex3f(0.0f,1.0f, 0.0f);
glEnd();
/////////////////////////////////////////////////////////////////////////////////////
程序的运行结果如下:
左边的三角形是第一步绘制的,可以看到该三角形绘制的坐标系,实际上是以(-1.5f,0.0f,-6.0f)为原点的。
第二个三角形绘制的时候,由于使用glLoadIdentity()使原点重新回到屏幕中心来,因此其原点位于屏幕的中心。
glRotatef(angle, x, y, z)
与glTranslatef(x, y, z)类似,glRotatef(angle, x, y, z)也是对坐标系进行操作。
旋转轴经过原点,方向为(x,y,z),旋转角度为angle,方向满足右手定则。
////////////////////////////////////////////////////////////////
glLoadIdentity();
glTranslatef(0.0f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,0.0f, 0.0f);
glVertex3f(1.0f,0.0f, 0.0f);
glVertex3f(0.0f,1.0f, 0.0f);
glEnd();
////////////////////////////////////////////////////////////////
在未旋转的情况下如图所示:
////////////////////////////////////////////////////////////////
glLoadIdentity();
glRotatef(45,0.0f,0.0f,1.0f);
glTranslatef(0.0f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,0.0f, 0.0f);
glVertex3f(1.0f,0.0f, 0.0f);
glVertex3f(0.0f,1.0f, 0.0f);
glEnd();
////////////////////////////////////////////////////////////////
绕Z轴正向旋转45度角,因为Z轴正方向由屏幕内指向屏幕外,由右手定则可知方向为逆时针转动。
由于直角顶点即为原点,因此将围绕直角逆时针旋转。
glTranslatef(0.0f, 0.0f, -6.0f);
glBegin(GL_QUADS);
glVertex3f(-0.01f,-0.01f, 0.0f);
glVertex3f( 0.01f,-0.01f, 0.0f);
glVertex3f( 0.01f, 0.01f, 0.0f);
glVertex3f(-0.01f, 0.01f, 0.0f);
glEnd();
glLoadIdentity();
// glRotatef(45.0f, 0.0f, 0.0f, 1.0f);
glTranslatef(1.0f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,0.0f, 0.0f);
glVertex3f(1.0f,0.0f, 0.0f);
glVertex3f(0.0f,1.0f, 0.0f);
glEnd();
glTranslatef(0.0f, 0.0f, -6.0f);
glBegin(GL_QUADS);
glVertex3f(-0.01f,-0.01f, 0.0f);
glVertex3f( 0.01f,-0.01f, 0.0f);
glVertex3f( 0.01f, 0.01f, 0.0f);
glVertex3f(-0.01f, 0.01f, 0.0f);
glEnd();
glLoadIdentity();
glRotatef(45.0f, 0.0f, 0.0f, 1.0f);
glTranslatef(1.0f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,0.0f, 0.0f);
glVertex3f(1.0f,0.0f, 0.0f);
glVertex3f(0.0f,1.0f, 0.0f);
glEnd();
glTranslatef(0.0f, 0.0f, -6.0f);
glBegin(GL_QUADS);
glVertex3f(-0.01f,-0.01f, 0.0f);
glVertex3f( 0.01f,-0.01f, 0.0f);
glVertex3f( 0.01f, 0.01f, 0.0f);
glVertex3f(-0.01f, 0.01f, 0.0f);
glEnd();
glLoadIdentity();
glTranslatef(1.0f,0.0f,-6.0f);
glRotatef(45.0f, 0.0f, 0.0f, 1.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,0.0f, 0.0f);
glVertex3f(1.0f,0.0f, 0.0f);
glVertex3f(0.0f,1.0f, 0.0f);
glEnd();
////////////////////////////////////////////////////////////////
glLoadIdentity();
glRotatef(45,0.0f,0.0f,1.0f);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,0.0f, 0.0f);
glVertex3f(1.0f,0.0f, 0.0f);
glVertex3f(0.0f,1.0f, 0.0f);
glEnd();
////////////////////////////////////////////////////////////////
在旋转之后加了一个复位的指令,图形就不会旋转了。
相关推荐
/*返回原坐标*/ glTranslatef(-3.0,0.0,0.0); SwapBuffers(dc.m_ps.hdc); glDrawBuffer (GL_BACK); glFlush(); } void CMFCFrame1View::OnZixuan() { // TODO: Add your command handler code here ...
glLoadIdentity(); glTranslatef(.0f, .0f, -10.0f); glRotatef(rot,1.0f,0.0f,0.0f); // Rotate On The X Axis glRotatef(rot*1.5f,0.0f,1.0f,0.0f); // Rotate On The Y Axis glRotatef(rot*1.4f,0.0f,0.0f,...
视点变换,旋转,加速减速,星空背景 太阳,光晕 各行星纹理 #include #include #include #include #include <wininet.h> #include <windows.h> #include #pragma comment(lib, "winmm.lib") #pragma ...
glLoadIdentity(); // Reset The Current Modelview Matrix glTranslatef(-1.5f,0.0f,-12.0f); // Move Left 1.5 Units And Into The Screen 6.0 ***修改此处,从-6.0f改到-12.0f*** glBegin(GL_...
glLoadIdentity() glClear(GL_COLOR_BUFFER_BIT) glBegin(GL_POLYGON) glColor4f(1.0f, 0.0f, 0.0f, 1.0f) glVertex2f(100.0f, 50.0f) glColor4f(0.0f, 1.0f, 0.0f, 1.0f) glVertex2f(450.0f, 400.0f) ...
glRotatef(theta[2], 0.0, 0.0, 1.0); colorcube(); glFlush(); glutSwapBuffers(); } void spinCube() { /* Idle callback, spin cube 2 degrees about selected axis */ theta[axis] += 2.0; if( theta...
glLoadIdentity(); // Reset The Projection Matrix // Calculate The Aspect Ratio Of The Window gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,1000.0f); glMatrixMode(GL_MODELVIEW); // Select ...
// 使用新的坐标重新绘制场景 glutPostRedisplay(); } void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); makeStripeImage(); glPixelStorei(GL_...
//两坐标系重合或者说坐标原点移到窗口中心 deltax=abs(x2-x1); deltay=abs(y2-y1); f=2*deltay-deltax; x=x1; y=y1; /*draw points*/ glPointSize(4.0); glBegin(GL_POINTS); glColor3f(1.0f, 1.0f, 0.0...
该软件包基于但为即时模式添加了OpenGL之前的调用(例如glBegin / End,glLoadIdentity等)。 与gl-idris相比,它不支持(因此也没有依赖项)PNG加载,lightyear OBJ加载,着色器初始化/加载。 Idris版本:1.2、1.3...
5、 采用GPU编程,请说明Vertex Shader 和 Fragment Shader 的输入输出坐标系是什么? 输入输出的主要参数是什么? 如何实现Multi-Pass 渲染? 6、 在一个坐标系W中,光源的位置为 (0, 0, 200, 1.0),设模型为一个以...
实验目的与要求 1、学习和掌握OpenGL的使用 2、掌握矩阵堆栈的实现方法 3、根据自己的创意实现实验内容,进一步掌握和理解OpenGL的使用 2. 实验内容 1、请编写地球围绕太阳自动旋转的方式 2、请再加上一个月亮, 并...
// 清除屏幕及深度缓存 glLoadIdentity(); // 重置视口、当前的模型观察矩阵 glTranslatef(0.5f,0.5f,1.5f); glBegin(GL_TRIANGLE_STRIP); // 绘制三角形 glColor3f(1.0f,0.0f,0.0f); //...
glRotatef(AngleX, 1.0f, 0.0f, 0.0f); glRotatef(AngleY, 0.0f, 1.0f, 0.0f); glBegin(GL_POLYGON); //前表面 glColor3f(1.0f,1.0f,1.0f);//颜色设置为白色 glVertex3f(50.0f, 50.0f, 50.0f); glColor3f...
一、实习的目的和意义 通过编程实现直线、圆、椭圆生成,以掌握基本图形的生成原理和算法;实现不同的线宽和线型;即线的属性。并通过计时对同一种图元的不同生成算法进行比较,从而理解OpenGL图形函数库中不同的图元...
部分源代码: gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_... gl.glLoadIdentity(); gl.glTranslatef(0, 0, -3.0f); gl.glRotatef(mAngle, 0, 1, 0); gl.glRotatef(mAngle*0.25f, 1, 0, 0); gl.
glLoadIdentity (); /* clear the matrix */ glTranslatef (0.0, 0.0, -5.0); /* viewing transformation */ glScalef (1.0, 2.0, 1.0); /* modeling transformation */ auxWireCube(1.0); /* draw the cube */ ...
动画中的皮球要用到中点画圆算法画圆, void MidCircle(int x0, int y0, int r)定义圆心的坐标和圆半径,用mLight.Ir, mLight.Ig, mLight.Ib来定义圆的颜色,glClearColor定义显示框的背景颜色,int cx=100,cy=300,...
// 清除屏幕和深度缓存 glLoadIdentity(); // 重置当前的模型观察矩阵 /***********************************新添的代码******************************************************************************...
glTranslatef(0.0f,-0.3f,-4.0f); if(xRot>360.5f) { xRot=0.0f; } if(yRot>360.5f) { yRot=0.0f; } glBotatef(xROt,1.0f,0.0f,0.0f); glRotatef(yRot,0.0f,1.0f,0.0f); xRot+=0.5f; ...