#define _USE_MATH_DEFINES #include <cstdlib> #include <cmath> #include <iostream> #include <GL/glew.h> #include <GL/freeglut.h> // Globals. static float R = 40.0; // Radius of circle. static float X = 50.0; // X-coordinate of center of circle. static float Y = 50.0; // Y-coordinate of center of circle. static const int numVertices = 50; // Number of vertices on circle. static int verticesColors[6 * numVertices]; void generateVertices() { float t = 0; // Angle parameter. for (int i = 0; i < 6 * numVertices; i += 6) { verticesColors[i] = X + R * cos(t); //x verticesColors[i] = Y + R * sin(t); //y verticesColors[i] = 0.0; //z verticesColors[i] = 1.0; //r verticesColors[i] = 0.0; //g verticesColors[i] = 0.0; //b t += 2 * M_PI / numVertices; //angle } } // Drawing routine. void drawScene(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1, 0, 0); glLineWidth(5); glDrawArrays(GL_POLYGON, 0, numVertices); glFlush(); } // Initialization routine. void setup(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glColorPointer(3, GL_FLOAT, 6 * sizeof(float), &verticesColors[0]); glVertexPointer(3, GL_FLOAT, 6 * sizeof(float), &verticesColors[3]); } // OpenGL window reshape routine. void resize(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 100.0, 0.0, 100.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } // Keyboard input processing routine. void keyInput(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; default: break; } } // Main routine. int main(int argc, char** argv) { generateVertices(); glutInit(&argc, argv); glutInitContextVersion(4, 3); glutInitContextProfile(GLUT_COMPATIBILITY_PROFILE); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("circle.cpp"); glutDisplayFunc(drawScene); glutReshapeFunc(resize); glutKeyboardFunc(keyInput); glewExperimental = GL_TRUE; glewInit(); setup(); glutMainLoop(); }
时间: 2023-08-08 22:05:47 浏览: 163
duojikongzhi.rar_Unsigned_c++include <reg51>
这段代码使用OpenGL绘制了一个圆形,并且使用了glew库进行了初始化。实现了键盘输入的处理和窗口大小变化的处理。其中,generateVertices()函数用于生成圆形的顶点。在drawScene()函数中使用glDrawArrays()函数进行绘制。在setup()函数中启用了顶点数组和颜色数组,并使用glColorPointer()和glVertexPointer()函数指定了顶点和颜色数组的格式。在resize()函数中使用glViewport()函数指定了可视区域的大小和位置,并使用glOrtho()函数指定了投影矩阵。在main()函数中使用glut库创建窗口,并设置了回调函数。
阅读全文