#include <GL/glut.h>
#include <math.h>const int n = 1000;
int q; //圆的半径
int m, p;//圆心
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;//初始化OpenGL
void init(void)
{glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//设置背景颜色glShadeModel(GL_FLAT);//设置明暗处理
}//画空心圆
void DrawCircle()
{int i;glBegin(GL_LINE_LOOP);for (i = 0; i < n; ++i)glVertex2f(m + q * cos(2 * Pi / n * i), p + q * sin(2 * Pi / n * i));glEnd();glFlush();
}//画实心圆(雪人头)
void DrawCirclet1()
{glColor3f(1.0f, 0.0f, 0.0f);//设置颜色为红色GLfloat x, y, z, angle;z = 0.0f;glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINES);for (angle = 0.0f; angle <= Pi; angle += (Pi / 1000000.0f)){x = 610 + 110.0f * sin(angle);y = 460 + 110.0f * cos(angle);glVertex3f(x, y, z);x = 610 + 110.0f * sin(angle + Pi);y = 460 + 110.0f * cos(angle + Pi);glVertex3f(x, y, z);}
}
//画实心圆(雪人身)
void DrawCirclet2()
{glColor3f(1.0f, 0.0f, 0.0f);GLfloat x, y, z, angle;z = 0.0f;glColor3f(1.0, 1.0, 1.0); //设置颜色为白色glBegin(GL_LINES);for (angle = 0.0f; angle <= Pi; angle += (Pi / 1000000.0f)){x = 610 + 170.0f * sin(angle);y = 170 + 200.0f * cos(angle);glVertex3f(x, y, z);x = 610 + 170.0f * sin(angle + Pi);y = 170 + 200.0f * cos(angle + Pi);glVertex3f(x, y, z);}glEnd();
}
//画实心圆(左眼)
void DrawCirclet3()
{glColor3f(1.0f, 0.0f, 0.0f);GLfloat x, y, z, angle;z = 0.0f;glColor3f(0.0, 0.0, 0.0); //设置颜色为黑色glBegin(GL_LINES);for (angle = 0.0f; angle <= Pi; angle += (Pi / 1000000.0f)){x = 580 + 10.0f * sin(angle);y = 480 + 10.0f * cos(angle);glVertex3f(x, y, z);x = 580 + 10.0f * sin(angle + Pi);y = 480 + 10.0f * cos(angle + Pi);glVertex3f(x, y, z);}glEnd();
}
//画实心圆(右眼)
void DrawCirclet4()
{glColor3f(1.0f, 0.0f, 0.0f);GLfloat x, y, z, angle;z = 0.0f;glColor3f(0.0, 0.0, 0.0); //设置颜色为黑色glBegin(GL_LINES);for (angle = 0.0f; angle <= Pi; angle += (Pi / 1000000.0f)){x = 640 + 10.0f * sin(angle);y = 480 + 10.0f * cos(angle);glVertex3f(x, y, z);x = 640 + 10.0f * sin(angle + Pi);y = 480 + 10.0f * cos(angle + Pi);glVertex3f(x, y, z);}glEnd();
}//主要的绘制过程
void display(void)
{glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存/*glBegin(GL_LINES);//开始画直线glColor3f(1.0f, 1.0f, 1.0f);//设置颜色为白色glVertex2f(30.0f, 30.0f);//第一根线的两个端点glVertex2f(200.0f, 400.0f);glColor3f(1.0f, 0.0f, 0.0f);//设置第二根线的颜色为红色glVertex2f(25.0f, 350.0f);//第二根线的两个端点glVertex2f(250.0f, 50.0f);glEnd();//画线结束glBegin(GL_TRIANGLES);//开始画三角形,注意,没有设颜色,所以还是红色glColor3f(1.0f, 0.2f, 0.2f);glVertex2f(400.0f, 100.0f);//三角形的三个顶点glVertex2f(600.0f, 100.0f);glVertex2f(500.0f, 300.0f);glEnd();//结束画三角形glFlush();//开始绘制*///画四角星 glBegin(GL_LINE_LOOP);glColor3f(1.0f, 0.2f, 0.2f);glVertex3f(50, 50, 0.0);glVertex3f(75, 60, 0.0);glVertex3f(100, 50, 0.0);glVertex3f(90, 75, 0.0);glVertex3f(100, 100, 0.0);glVertex3f(75, 90, 0.0);glVertex3f(50, 100, 0.0);glVertex3f(60, 75, 0.0);glEnd();//棒棒glColor3f(1.0f, 1.0f, 0.0f);glRectf(295.0f, 350.0f, 305.0f, 150.0f);//棒棒糖glColor3f(1.0f, 0.2f, 0.2f);//设置颜色为粉色q = 5;m = 300;p = 400;for (int i = 1; i < 11; i++){q = q + 5;DrawCircle();}glColor3f(1.0f, 1.0f, 1.0f);//设置颜色为白色//画雪人头DrawCirclet1();//画雪人身DrawCirclet2();//左眼DrawCirclet3();//右眼DrawCirclet4();glFlush();//开始绘制//鼻子glBegin(GL_TRIANGLES);//开始画三角形,注意,没有设颜色,所以还是红色glColor3f(1.0f, 0.0f, 0.0f);glVertex2f(620.0f, 420.0f);//三角形的三个顶点glVertex2f(570.0f, 420.0f);glVertex2f(610.0f, 440.0f);glEnd();//结束画三角形glFlush();//开始绘制}//在窗口改变大小时调用
void reshape(int width, int height)
{glViewport(0, 0, width, height);//设置视口glMatrixMode(GL_PROJECTION);//设置当前为投影变换模式glLoadIdentity();//用单位矩阵替换当前变换矩阵gluOrtho2D(0.0, width, 0.0, height);//设置正交投影视图体
}//处理键盘
void keyboard(unsigned char key, int x, int y)
{//switch (key)//{//case 27://esc键退出// exit(0);// break;//default:// break;//}
}//主函数
int main(int argc, char** argv)
{glutInit(&argc, argv);//初始化glutglutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//设置为单缓存,RGB模式glutInitWindowSize(900, 600); //设置窗口大小glutInitWindowPosition(230, 80);//设置窗口起始位置glutCreateWindow("Basic");//设置窗口标题init();//初始化OpenGLglutDisplayFunc(display);//设置显示回调函数 glutReshapeFunc(reshape);//设置reshape回调函数glutKeyboardFunc(keyboard);//设置键盘回调函数glutMainLoop();//进入主循环return 0;
}
OpenGl绘制了一个雪人
2025/2/24 22:08:21
来源:https://blog.csdn.net/hgaohr1021/article/details/143647753
浏览:
次
关键词:OpenGl绘制了一个雪人
版权声明:
本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。
我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com