Opengl创建一个球体

#include "stdafx.h"
#include <GL\glut.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h> 
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glShadeModel(GL_FLAT); 
glColor3f(1.0f,0.0f,0.0f);
glutSolidSphere(0.5f,100.0,100.0); //渲染一个球体 ,其半径为0.5
glRotatef(90.,1.0,0.0,1.0);
GLUquadricObj *quadObj; //创建一个二次曲面
quadObj = gluNewQuadric(); 
gluQuadricDrawStyle(quadObj,GLU_SILHOUETTE);
glShadeModel(GL_SMOOTH); 
glColor3f(0.0f,1.0f,0.0f);
gluSphere(quadObj,0.5f,50.0f,50.0f);
    glutSwapBuffers();//设立双缓冲
//二次曲面和实心球结合构成了一个网格求体

}
void ChangeSize(GLsizei w,GLsizei h)
{
GLfloat nRange=200.0f;
//防止h为0,便于h为除数
if(h==0)
h=1;
//设立视口到窗口之间的范围
glViewport(0,0,w,h);
//重设投影矩阵
glMatrixMode(GL_PROJECTION);//声明对投影矩阵进行操作
glLoadIdentity();//更新
//正交投影变换
if(w<=h)
glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);
    else
glOrtho(-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);
glMatrixMode(GL_PROJECTION);//声明对模型视景矩阵进行操作
glLoadIdentity();
}

void myInit()
{
glClearColor(0.0f,0.0f,0.0f,1);
//glShadeModel(GL_FLAT); 
//glColor3f(1.0f,0.0f,0.0f);//以红色来绘制图形
}

void keyboard(unsigned char key, int x, int y)  
{  
   switch (key) {  
   case 'x':  
   case 'X':  
      glRotatef(30.,1.0,0.0,0.0);  
      glutPostRedisplay();  //重绘窗口
      break;  
   case 'y':  
   case 'Y':  
      glRotatef(30.,0.0,1.0,0.0);  
      glutPostRedisplay();  
      break;  
   case 'i':  
   case 'I':  
      glLoadIdentity();  
      gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);  
      glutPostRedisplay();  
      break;  
   case 27:  
      exit(0);  
      break;  
   }  
}  

int main(int argc,char**argv)
{
glutInit(&argc,argv);//初始化glut库
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(600,600);//设置窗口大小
glutCreateWindow("qiuti");//设置窗口名
        myInit();
glutDisplayFunc(myDisplay);
glutReshapeFunc(ChangeSize);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;

}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值