#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();//进入主循环
}
Opengl绘制四棱锥
最新推荐文章于 2023-10-03 21:57:17 发布