openGL绘制一个实心的圆,将圆分成几个不同颜色的扇形
时间: 2023-05-23 22:01:51 浏览: 155
要绘制一个实心的圆,我们可以使用OpenGL的glutSolidSphere()函数。而将圆分成不同颜色的扇形,可以利用OpenGL的glBegin()和glEnd()函数以及glColor3f()函数,按照不同的角度画出不同颜色的扇形。具体实现可以参考以下代码:
```
void drawCircle(float radius, int numSlices) {
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0, 1.0, 1.0);
glVertex2f(0.0, 0.0);
for(int i = 0; i <= numSlices; i++) {
float angle = i * (2.0 * PI / numSlices);
float x = radius * cos(angle);
float y = radius * sin(angle);
if(i % 2 == 0) {
glColor3f(0.0, 0.0, 1.0);
} else {
glColor3f(1.0, 0.0, 0.0);
}
glVertex2f(x, y);
}
glEnd();
}
```
这个函数可以绘制一个半径为radius、分成numSlices个扇形的实心圆。其中,偶数个扇形的颜色为蓝色,奇数个扇形的颜色为红色。
相关问题
用openGL绘制一个实心的圆。要求圆分成若干个扇形,每个扇形颜色不同。
以下是使用OpenGL和C++绘制实心圆的示例代码:
```c++
#include <GL/glut.h>
#include <cmath>
const float PI = 3.1415926f; // 定义圆周率
void drawSolidCircle(float x, float y, float radius, int numSlices) {
const float angleStep = 2.0f * PI / numSlices; // 计算每个扇形的角度
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 0.0f, 0.0f); // 设置第一个扇形的颜色
glVertex2f(x, y); // 圆心点
for (int i = 0; i <= numSlices; ++i) {
float angle = i * angleStep;
float dx = radius * std::cos(angle);
float dy = radius * std::sin(angle);
if (i % 2 == 0) {
glColor3f(1.0f, 0.0f, 0.0f); // 设置偶数扇形的颜色
} else {
glColor3f(0.0f, 1.0f, 0.0f); // 设置奇数扇形的颜色
}
glVertex2f(x + dx, y + dy);
}
glEnd();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
drawSolidCircle(0.0f, 0.0f, 0.5f, 36); // 绘制圆,分成36个扇形
glutSwapBuffers();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(800, 600);
glutCreateWindow("Solid Circle");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
在这个示例代码中,我们使用了OpenGL的核心图形函数`glBegin`和`glVertex`来绘制实心圆。`glBegin`函数告诉OpenGL开始绘制一个几何图形,`glVertex`函数则用于指定每个顶点的位置。我们使用`GL_TRIANGLE_FAN`模式绘制圆,这个模式会从圆心开始绘制,然后依次连接每个顶点,形成若干个扇形。我们通过循环计算出每个顶点的坐标,并通过`glColor`函数设置每个扇形的颜色。在这个示例中,我们将圆分成了36个扇形,并将偶数扇形设置为红色,奇数扇形设置为绿色。
运行上述代码,可以看到绘制出来的实心圆被分成了36个扇形,每个扇形颜色不同。
OpenGL绘制多个不同颜色三角形
以下是一个OpenGL程序,用于绘制多个不同颜色的三角形:
```c++
#include <GL/glut.h>
void init() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 500.0, 0.0, 500.0);
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
// 绘制第一个三角形,红色
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_TRIANGLES);
glVertex2f(100.0, 100.0);
glVertex2f(200.0, 100.0);
glVertex2f(150.0, 200.0);
glEnd();
// 绘制第二个三角形,绿色
glColor3f(0.0, 1.0, 0.0);
glBegin(GL_TRIANGLES);
glVertex2f(250.0, 250.0);
glVertex2f(350.0, 250.0);
glVertex2f(300.0, 350.0);
glEnd();
// 绘制第三个三角形,蓝色
glColor3f(0.0, 0.0, 1.0);
glBegin(GL_TRIANGLES);
glVertex2f(400.0, 100.0);
glVertex2f(450.0, 200.0);
glVertex2f(500.0, 100.0);
glEnd();
glFlush();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutCreateWindow("Multiple Triangles");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
该程序使用了OpenGL的基本绘图函数来绘制三个不同颜色的三角形。在每个三角形之前,我们使用glColor3f函数来设置绘制颜色。然后使用glBegin和glEnd函数来指定绘制的几何图形的类型(在这里是三角形)和顶点。在每个三角形中,我们指定了三个顶点的坐标。最后,我们使用glFlush函数强制将绘制的图形显示在屏幕上。
运行该程序,您将看到窗口中绘制了三个不同颜色的三角形。