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

如何通过GLUT实现键盘按键加减调整绘制多边形的边数

功能实现方案

你当前的代码已经完成了按键监听的逻辑,只需要补全正多边形顶点计算、绘制模式修正、基础变量定义三个部分即可,完整修改如下:

1. 前置补充定义

首先在代码开头添加必要头文件和全局变量:

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

// 全局变量:多边形边数,初始为3(三角形)
int n = 3;
// 正多边形的外接圆半径,适配默认正交投影的[-1,1]坐标范围
const float shape_radius = 0.5f;
// 圆周率常量
const float PI = 3.1415926f;

2. 修改绘制函数逻辑

你当前的绘制函数用了GL_POINTS只会绘制散点,需要修改绘制模式,同时补全顶点计算逻辑:

static void DisplayShape(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1,0.1,0.6);

    // 填充多边形用GL_POLYGON,线框多边形换为GL_LINE_LOOP
    glBegin(GL_POLYGON);
    for(int i=0;i<n;++i)
    {
        // 计算当前顶点的极角
        float angle = 2 * PI * i / n;
        // 极坐标转笛卡尔坐标,中心默认在窗口中心(0,0)
        float x = shape_radius * cos(angle);
        float y = shape_radius * sin(angle);
        glVertex2f(x, y);
    }
    glEnd();

    glutSwapBuffers();
}

3. 可选优化(解决图形拉伸问题)

默认投影下窗口拉伸会导致图形变形,可以在main函数的glutCreateWindow之后添加正交投影配置:

glutCreateWindow("GLUT Shapes");
// 新增正交投影配置
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// 配置正方形正交区域,避免窗口拉伸导致图形变形
glOrtho(-1, 1, -1, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);

其他说明

  • 你原来的idle函数可以删除,按键逻辑里已经调用了glutPostRedisplay(),不需要每帧强制重绘浪费性能,删除后记得去掉glutIdleFunc(idle);这行注册代码即可
  • 按下+边数增加,当边数超过100后视觉上就是圆形效果
  • 按下-边数最小为3,保证始终是多边形

内容的提问来源于stack exchange,提问作者Eikichi Onizuka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:18:04