OpenGL之旋转缩放

void CShape3D::drawCircle(void) {

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glPushMatrix();
    //glTranslated(0.0f, 0.0f, 0.0f); //移动
    glRotated(angle, 0.5f, 0.5f, 0.0f);// 旋转
    angle += 1.0f;
    glScaled(2.0f, 2.0f, 2.0f);//x, y, z放大2倍
    scale += 0.1f;
    static GLUquadricObj* qobj=gluNewQuadric( );
    gluSphere(qobj,0.4,1000,10); 
    
    glPopMatrix();
    
    glFlush();
    glutSwapBuffers();
}


//旋转正方形

void CShape::init() {
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB) ;
	 glutInitWindowSize(400, 400) ;
	 glutCreateWindow("I love OpenGl") ;
	 glutDisplayFunc(CShape::displayWindow) ;
	 glutSpecialUpFunc(CShape::getKey);
	 glutReshapeFunc(CShape::shapeFunc);
	 glutMainLoop() ;
}

void CShape::getKey(GLint iKey, GLint x, GLint y) {
	switch (iKey)
	{
	case GLUT_KEY_UP:
		g_sAngle += kAngleStep;
		break;
	case GLUT_KEY_DOWN:
		g_sAngle -= kAngleStep;
		break;
	case GLUT_KEY_LEFT:
		g_sAngle += kAngleStep;
		break;
	case GLUT_KEY_RIGHT:
		g_sAngle -= kAngleStep;
		break;
	default:
		break;
	}
	<span style="color:#ff0000;">glutPostRedisplay();//刷新一下屏幕,如果不添加这行代码,看到效果很困难</span>
}

void CShape::draw3DSprialLine() {

}

void CShape::displayWindow() {
	glClear(GL_COLOR_BUFFER_BIT);
    //glPushMatrix();  
	glRotated(g_sAngle, 0.0, 0.0, 1.0);
    glBegin(GL_TRIANGLES);                            // 绘制三角形
        glVertex3f( 0.0f, 1.0f, 0.0f);                    // 上顶点
        glVertex3f(-1.0f,-1.0f, 0.0f);                    // 左下
        glVertex3f( 1.0f,-1.0f, 0.0f);                    // 右下
	glEnd();
	//glPopMatrix();
	glutSwapBuffers();
}

void CShape::idleFunc() {
	displayWindow();
}

void CShape::shapeFunc(GLint w, GLint h) {
	glViewport(0, 0, w, h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	gluLookAt(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 5.0f, 0.0f);
}


### 回答1: OpenGL是一种跨平台的图形编程接口,用于实现计算机图形的平移、旋转缩放操作。 平移是指将对象从一个位置移动到另一个位置,可以通过修改OpenGL中的模型视图矩阵来实现。以下是一个实现平移的代码示例: glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(x, y, z); // 渲染对象 这段代码将当前矩阵设置为模型视图矩阵,并将其重置为单位矩阵。然后,使用glTranslatef函数,将对象在x、y和z方向上平移。 旋转是指将对象绕某个轴心旋转一定角度,可以使用OpenGL的模型视图矩阵和旋转函数来实现。以下是一个实现绕Y轴旋转的代码示例: glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotatef(angle, 0, 1, 0); // 渲染对象 这段代码将当前矩阵设置为模型视图矩阵,并将其重置为单位矩阵。然后,使用glRotatef函数,将对象绕Y轴旋转angle度。 缩放是指按照一定比例调整对象的大小,可以通过修改OpenGL中的模型视图矩阵来实现。以下是一个实现缩放的代码示例: glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glScalef(scaleX, scaleY, scaleZ); // 渲染对象 这段代码将当前矩阵设置为模型视图矩阵,并将其重置为单位矩阵。然后,使用glScalef函数,按照scaleX、scaleY和scaleZ的比例进行缩放。 总结起来,使用OpenGL进行平移、旋转缩放操作的代码示例如下: glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(x, y, z); // 平移 glRotatef(angle, 0, 1, 0); // 旋转 glScalef(scaleX, scaleY, scaleZ); // 缩放 // 渲染对象 以上是实现OpenGL平移、旋转缩放的基本代码示例,根据实际需求可以进行进一步的扩展和修改。 ### 回答2: OpenGL是一种图形库,用于图形的绘制和处理。在OpenGL中,平移、旋转缩放是常用的操作,可以通过以下代码实现: 平移: ``` glTranslatef(x, y, z); ``` 其中,x、y和z分别表示在x轴、y轴和z轴上的平移距离。这段代码将当前坐标系统在三个轴上同时平移。 旋转: ``` glRotatef(angle, x, y, z); ``` 其中,angle表示旋转角度,x、y和z分别表示旋转轴向量的坐标。这段代码将当前坐标系统绕指定的轴旋转缩放: ``` glScalef(x, y, z); ``` 其中,x、y和z分别表示在x轴、y轴和z轴上的缩放比例。这段代码将当前坐标系统在三个轴上进行缩放操作。 以上代码都是针对当前坐标系统进行操作,可以通过不同的参数调整实现不同的效果。通常,需要在绘制对象之前进行这些操作,以确保正确的展示效果。 例如,如果要绘制一个平移后旋转的立方体,可以按照下面的步骤进行: ``` glPushMatrix(); // 保存当前的坐标系统 glTranslatef(x, y, z); // 平移操作 glRotatef(angle, 0, 1, 0); // 绕y轴旋转 glutSolidCube(1.0); // 绘制立方体 glPopMatrix(); // 恢复之前保存的坐标系统 ``` 这段代码会根据给定的平移和旋转参数把立方体绘制在对应的位置和角度上。 这是一个简单的例子,演示了OpenGL中平移、旋转缩放的用法。实际上,还有更多的参数和功能可以提供更详细和复杂的变换效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值