使用opengl画一个圆,把圆分割成25个正方形,对每个正方形随机着色红色和绿色

在OpenGL中绘制一个圆并分割成正方形着色是一个涉及多个步骤的过程。以下是一个简化的示例代码,用于绘制一个圆,并将其分割成25个正方形,然后对每个正方形随机着色为红色或绿色。请注意,为了简化,我假设你已经设置了OpenGL环境和窗口,并且已经初始化了GLUT或GLFW等库。

#include <GL/glut.h>
#include <stdlib.h>
#include <time.h>

#define SQUARE_COUNT 25
#define CIRCLE_RADIUS 1.0
#define SQUARE_SIZE (2.0 * CIRCLE_RADIUS) / 5.0 // 因为是5x5的网格

void drawSquare(float centerX, float centerY, float size, float r, float g, float b) {
    glColor3f(r, g, b);
    glBegin(GL_QUADS);
    glVertex2f(centerX - size / 2, centerY - size / 2);
    glVertex2f(centerX + size / 2, centerY - size / 2);
    glVertex2f(centerX + size / 2, centerY + size / 2);
    glVertex2f(centerX - size / 2, centerY + size / 2);
    glEnd();
}

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();

    srand(time(NULL)); // 初始化随机数种子

    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            float centerX = -CIRCLE_RADIUS + j * SQUARE_SIZE + SQUARE_SIZE / 2;
            float centerY = CIRCLE_RADIUS - i * SQUARE_SIZE - SQUARE_SIZE / 2;

            // 随机选择红色或绿色
            float r = ((rand() % 2) == 0) ? 1.0f : 0.0f;
            float g = ((rand() % 2) == 1) ? 1.0f : 0.0f;
            float b = 0.0f; // 不使用蓝色

            drawSquare(centerX, centerY, SQUARE_SIZE, r, g, b);
        }
    }

    glutSwapBuffers();
}

void init() {
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(800, 600);
    glutCreateWindow("OpenGL Circle with Squares");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

这个代码示例使用OpenGL和GLUT库来创建一个窗口,并在其中绘制一个由25个正方形组成的圆形图案。每个正方形被随机着色为红色或绿色。请注意,这个代码是一个简化的示例,可能需要根据你的OpenGL环境和设置进行调整。

此外,这个代码没有考虑正方形的旋转和精确的圆形排列,而是使用了一个简单的5x5网格来近似圆形。如果你需要更精确的圆形排列,你可能需要计算每个正方形的位置和旋转角度,以确保它们紧密地排列在一个圆形上。

在运行此代码之前,请确保你已经安装了OpenGL和GLUT库,并且你的开发环境已经配置好以支持OpenGL编程。

附录 glVertex2f函数的作用是什么
glVertex2f是OpenGL中的一个函数,用于指定二维顶点坐标。这个函数用于在当前的绘图模式下定义一个顶点的位置。glVertex2f函数需要两个浮点数参数,分别代表x和y坐标。

当你在OpenGL中使用glBegin和glEnd来定义一个图元(如点、线、三角形等)时,你会在这些函数之间调用glVertex*系列的函数来指定图元的顶点。例如,如果你想绘制一个线段,你可以这样做:

glBegin(GL_LINES);
glVertex2f(0.0f, 0.0f); // 线段的起点
glVertex2f(1.0f, 1.0f); // 线段的终点
glEnd();

在上面的代码中,glBegin(GL_LINES)告诉OpenGL我们要开始绘制线段,然后我们通过两次调用glVertex2f来分别指定线段的起点和终点,最后glEnd()标志着绘制操作的结束。

对于你的原始问题中的代码,glVertex2f在drawSquare函数中被用来定义正方形的四个顶点。这四个顶点按照顺时针(或逆时针)的顺序被指定,从而绘制出一个正方形。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值