Opengl绘制四棱锥

#define GLUT_DISABLE_ATEXIT_HACK
#include<stdlib.h>
#define GLUT_DISABLE_ATEXIT_HACK
#include <cmath>
#include <gl/glut.h>
float m_Angle =0;
int m_Pivot=0;  
static const GLfloat GL_PI = 3.14f;
//初始化OpenGL
void DrawCube()
{
	/** 绘制圆锥体 */
	glPushMatrix();
	   glTranslatef(-1.5f,0.5f,-7.0f);	/**< 向左上角移,并移入屏幕 */					
	   glRotatef(m_Angle,1.0f,1.0f,0.0f);  
	   glShadeModel(GL_FLAT); /**< 设置为恒定着色 */
	   /** 绘制圆锥侧面 */
	   glBegin(GL_TRIANGLE_FAN);
	   glColor3f(1.0, 1.0, 0);
	   glVertex3f(0.f,2.f,0.f);/**< 指定圆锥顶点 */
	   glVertex3f(1,0,-1);
	   glVertex3f(-1,0,-1);



glBegin(GL_TRIANGLE_FAN);
	   glColor3f(0.0, 1.0, 0);
	   glVertex3f(0.f,2.f,0.f);/**< 指定圆锥顶点 */
	   glVertex3f(-1,0,1);
	glVertex3f(1,0,1);
		
		
glBegin(GL_TRIANGLE_FAN);
	   glColor3f(0.0, 0, 1.0);
	   glVertex3f(0.f,2.f,0.f);/**< 指定圆锥顶点 */
	  glVertex3f(-1,0,-1);
glVertex3f(-1,0,1);


glBegin(GL_TRIANGLE_FAN);
	   glColor3f(0.0, 1.0, 1.0);
	   glVertex3f(0.f,2.f,0.f);/**< 指定圆锥顶点 */
	  glVertex3f(1,0,-1);
glVertex3f(1,0,1);
	/**glVertex3f(1,0,-1);
	glVertex3f(-1,0,-1);	
	glVertex3f(-1,0,1);
	glVertex3f(1,0,1);/**< 指定圆锥底面上点 */
		   



		glEnd();
       
		/** 下面绘制圆锥底面 */
	   glBegin(GL_TRIANGLE_FAN);
	     glBegin(GL_QUADS);
		 glColor3f(1.0, 0, 0);
        glVertex3f(1,0,-1);
	glVertex3f(-1,0,-1);	
	glVertex3f(-1,0,1);
	glVertex3f(1,0,1);
	 glEnd();                                                  /**< 绘制结束 */
   glPopMatrix(); 


}
void init(void) 
{
	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//设置背景颜色
	glShadeModel(GL_SMOOTH);//设置明暗处理,有两种选择模式:GL_FLAT(不渐变)和GL_SMOOTH(渐变过渡)
}
//主要的绘制过程
void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存    
	glLoadIdentity();

	
	glTranslatef(0,-0.5,-8);

//	glRotatef(angle,0,0,1);
//	glRotatef(m_Angle,1,1,1);
//	glRotatef(angle,1,0,0);
	glColor3f(1.0,0,0);
	DrawCube();	
    glFlush();
}
//在窗口改变大小时调用
void reshape(int w, int h){
       glViewport(0, 0, w, h);//设置视口
       glMatrixMode(GL_PROJECTION);//设置当前为投影变换模式
       glLoadIdentity();//用单位矩阵替换当前变换矩阵
       gluPerspective(45, (float)w/h, 8, 100.0);//设置正交投影视图体
        glMatrixMode (GL_MODELVIEW);
       glLoadIdentity();
}
void TimerFunction(int value)
{
    m_Angle+=5;
	if(m_Angle==360)
		m_Angle=0;
	
	
	// Redraw the scene with new coordinates
    glutPostRedisplay();
	glutTimerFunc(500,TimerFunction, 1);
}

void main( )
{
	
	glutInitWindowSize (640, 480); 	
	glutCreateWindow("Basic");//设置窗口标题

	init();//初始化OpenGL
	glutDisplayFunc(display);//设置显示回调函数 
	glutReshapeFunc(reshape);//设置reshape回调函数
	glutTimerFunc(500,TimerFunction, 1);

	glutMainLoop();//进入主循环

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值