You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dev C/C++中使用OpenGL绘制加拿大国旗红枫叶

如何用Dev C/C++结合OpenGL绘制加拿大国旗枫叶?

目标图像:
加拿大国旗枫叶

我尝试了一段代码,但生成的结果(当前生成结果)和目标图像不符,请问该怎么修改?

我的代码如下:

#include <windows.h>
#include <gl/glut.h>
void display() {
    glClearColor(0.3, 0.1, 0.1, 0.2);
    glClear(GL_COLOR_BUFFER_BIT);
    //glTranslatef(0.5, 0, 0);
    //glScalef(0.5, 0.5, 0);
    //glRotatef(0, 0, 0, 0);
    //Unifolié also known as Maple Leaf
    glBegin(GL_POLYGON);
    glColor3f(0.8, 0.0, 0.0);
    glVertex2f(0.0, 0.0);
    glVertex2f(-0.25, -0.5);
    glVertex2f(-0.1, -0.2);
    glVertex2f(-0.35, -0.2);
    glVertex2f(-0.2, 0.0);
    glVertex2f(-0.5, 0.5);
    glVertex2f(-0.25, 0.2);
    glVertex2f(-0.35, 0.5);
    glVertex2f(0.0, 0.2);
    glVertex2f(0.35, 0.5);
    glVertex2f(0.25, 0.2);
    glVertex2f(0.5, 0.5);
    glVertex2f(0.2, 0.0);
    glVertex2f(0.35, -0.2);
    glVertex2f(0.1, -0.2);
    glVertex2f(0.25, -0.5);
    glColor3f(1, 0, 0);
    glVertex2f(0.00, 0.00);
    glVertex2f(0.00, 0.90);
    glVertex2f(-0.08, 0.70);
    glVertex2f(-0.12, 0.66);
    glVertex2f(-0.16, 0.66);
    glVertex2f(-0.20, 0.68);
    glVertex2f(-0.24, 0.74);
    glVertex2f(-0.22, 0.64);
    glVertex2f(-0.22, 0.62);
    glVertex2f(-0.24, 0.56);
    glVertex2f(-0.26, 0.54);
    glVertex2f(-0.30, 0.54);
    glVertex2f(-0.34, 0.56);
    glVertex2f(-0.36, 0.60);
    glVertex2f(-0.36, 0.56);
    glVertex2f(-0.38, 0.54);
    glVertex2f(-0.40, 0.54);
    glVertex2f(-0.42, 0.54);
    glVertex2f(-0.56, 0.60);
    glVertex2f(-0.52, 0.54);
    glVertex2f(-0.50, 0.50);
    glVertex2f(-0.48, 0.44);
    glVertex2f(-0.48, 0.42);
    glVertex2f(-0.50, 0.38);
    glVertex2f(-0.54, 0.34);
    glVertex2f(-0.48, 0.32);
    glVertex2f(-0.44, 0.28);
    glVertex2f(-0.42, 0.22);
    glVertex2f(-0.42, 0.20);
    glVertex2f(-0.44, 0.16);
    glVertex2f(-0.46, 0.16); //this 1st
    glVertex2f(-0.52, 0.18);
    glVertex2f(-0.54, 0.24);
    glVertex2f(-0.54, 0.20);
    glVertex2f(-0.56, 0.16);
    glVertex2f(-0.60, 0.14);
    glVertex2f(-0.62, 0.14);
    glVertex2f(-0.70, 0.16);
    glVertex2f(-0.76, 0.20);
    glVertex2f(-0.78, 0.24);
    glVertex2f(-0.76, 0.18);
    glVertex2f(-0.74, 0.14);
    glVertex2f(-0.70, 0.08);
    glVertex2f(-0.68, 0.06);
    glVertex2f(-0.66, 0.02);
    glVertex2f(-0.66, 0.00);
    glVertex2f(-0.68, -0.04);
    glVertex2f(-0.64, -0.02);
    glVertex2f(-0.62, -0.02);
    glVertex2f(-0.56, -0.04);
    glVertex2f(-0.52, -0.08);
    glVertex2f(-0.48, -0.16);
    glVertex2f(-0.48, -0.20);
    glVertex2f(-0.50, -0.26);
    glVertex2f(-0.52, -0.30);
    glVertex2f(-0.58, -0.34);
    glVertex2f(-0.42, -0.32);
    glVertex2f(-0.30, -0.28);
    glVertex2f(-0.18, -0.22);
    glVertex2f(-0.10, -0.20);
    glVertex2f(0.00, -0.22);
    glVertex2f(0.10, -0.20);
    glVertex2f(0.18, -0.22);
    glVertex2f(0.30, -0.28);
    glVertex2f(0.42, -0.32);
    glVertex2f(0.58, -0.34);
    glVertex2f(0.52, -0.30);
    glVertex2f(0.50, -0.26);
    glVertex2f(0.48, -0.20);
    glVertex2f(0.48, -0.16);
    glVertex2f(0.52, -0.08);
    glVertex2f(0.56, -0.04);
    glVertex2f(0.62, -0.02);
    glVertex2f(0.64, -0.02);
    glVertex2f(0.68, -0.04);
    glVertex2f(0.66, 0.00);
    glVertex2f(0.66, 0.02);
    glVertex2f(0.68, 0.06);
    glVertex2f(0.70, 0.08);
    glVertex2f(0.74, 0.14);
    glVertex2f(0.76, 0.18);
    glVertex2f(0.78, 0.24);
    glVertex2f(0.76, 0.20);
    glVertex2f(0.70, 0.16);
    glVertex2f(0.62, 0.14);
    glVertex2f(0.60, 0.14);
    glVertex2f(0.56, 0.16);
    glVertex2f(0.54, 0.20);
    glVertex2f(0.54, 0.24);
    glVertex2f(0.52, 0.18);
    glVertex2f(0.46, 0.16);
    glVertex2f(0.44, 0.16);
    glVertex2f(0.42, 0.20);
    glVertex2f(0.42, 0.22);
    glVertex2f(0.44, 0.28);
    glVertex2f(0.48, 0.32);
    glVertex2f(0.54, 0.34);
    glVertex2f(0.50, 0.38);
    glVertex2f(0.48, 0.42);
    glVertex2f(0.48, 0.44);
    glVertex2f(0.50, 0.50);
    glVertex2f(0.52, 0.54);
    glVertex2f(0.56, 0.60);
    glVertex2f(0.42, 0.54);
    glVertex2f(0.40, 0.54);
    glVertex2f(0.38, 0.54);
    glVertex2f(0.36, 0.56);
    glVertex2f(0.36, 0.60);
    glVertex2f(0.34, 0.56);
    glVertex2f(0.30, 0.54);
    glVertex2f(0.26, 0.54);
    glVertex2f(0.24, 0.56);
    glVertex2f(0.22, 0.62);
    glVertex2f(0.22, 0.64);
    glVertex2f(0.24, 0.74);
    glVertex2f(0.20, 0.68);
    glVertex2f(0.16, 0.66);
    glVertex2f(0.12, 0.66);
    glVertex2f(0.08, 0.70);
    glVertex2f(0.00, 0.90);
    glEnd();
    glFlush();
}
int main(int argc, char* argv[]) {
    glutInit(&argc, argv);
    glutInitWindowSize(1000, 1000);
    glutInitWindowPosition(10, 10);
    glutCreateWindow("Maple Leaf");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

问题分析

  1. 原代码将两组无关顶点放在同一个GL_POLYGON中,OpenGL会按顺序连接所有顶点,导致图形错乱。
  2. 缺少投影矩阵设置,窗口缩放时图形会变形,部分顶点可能超出可视区域。
  3. 顶点顺序不符合多边形绘制要求(需按顺时针/逆时针连续环绕)。

修正后的代码

#include <windows.h>
#include <gl/glut.h>

void init() {
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    // 设置正交投影,固定坐标范围,保持图形比例
    gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void display() {
    glClearColor(1.0, 1.0, 1.0, 1.0); // 背景设为白色,匹配加拿大国旗
    glClear(GL_COLOR_BUFFER_BIT);
    
    glColor3f(1.0, 0.0, 0.0); // 枫叶纯红色
    
    // 按逆时针顺序绘制枫叶完整轮廓
    glBegin(GL_POLYGON);
        // 顶部顶点开始
        glVertex2f(0.0, 0.9);
        glVertex2f(-0.08, 0.7);
        glVertex2f(-0.12, 0.66);
        glVertex2f(-0.16, 0.66);
        glVertex2f(-0.20, 0.68);
        glVertex2f(-0.24, 0.74);
        glVertex2f(-0.22, 0.64);
        glVertex2f(-0.22, 0.62);
        glVertex2f(-0.24, 0.56);
        glVertex2f(-0.26, 0.54);
        glVertex2f(-0.30, 0.54);
        glVertex2f(-0.34, 0.56);
        glVertex2f(-0.36, 0.60);
        glVertex2f(-0.36, 0.56);
        glVertex2f(-0.38, 0.54);
        glVertex2f(-0.40, 0.54);
        glVertex2f(-0.42, 0.54);
        glVertex2f(-0.56, 0.60);
        glVertex2f(-0.52, 0.54);
        glVertex2f(-0.50, 0.50);
        glVertex2f(-0.48, 0.44);
        glVertex2f(-0.48, 0.42);
        glVertex2f(-0.50, 0.38);
        glVertex2f(-0.54, 0.34);
        glVertex2f(-0.48, 0.32);
        glVertex2f(-0.44, 0.28);
        glVertex2f(-0.42, 0.22);
        glVertex2f(-0.42, 0.20);
        glVertex2f(-0.44, 0.16);
        glVertex2f(-0.46, 0.16);
        glVertex2f(-0.52, 0.18);
        glVertex2f(-0.54, 0.24);
        glVertex2f(-0.54, 0.20);
        glVertex2f(-0.56, 0.16);
        glVertex2f(-0.60, 0.14);
        glVertex2f(-0.62, 0.14);
        glVertex2f(-0.70, 0.16);
        glVertex2f(-0.76, 0.20);
        glVertex2f(-0.78, 0.24);
        glVertex2f(-0.76, 0.18);
        glVertex2f(-0.74, 0.14);
        glVertex2f(-0.70, 0.08);
        glVertex2f(-0.68, 0.06);
        glVertex2f(-0.66, 0.02);
        glVertex2f(-0.66, 0.0);
        glVertex2f(-0.68, -0.04);
        glVertex2f(-0.64, -0.02);
        glVertex2f(-0.62, -0.02);
        glVertex2f(-0.56, -0.04);
        glVertex2f(-0.52, -0.08);
        glVertex2f(-0.48, -0.16);
        glVertex2f(-0.48, -0.20);
        glVertex2f(-0.50, -0.26);
        glVertex2f(-0.52, -0.30);
        glVertex2f(-0.58, -0.34);
        glVertex2f(-0.42, -0.32);
        glVertex2f(-0.30, -0.28);
        glVertex2f(-
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:27:15