如何在"glutCreateMenu"上添加用户输入

How to add user input on a "glutCreateMenu"

本文关键字:添加 用户 输入 glutCreateMenu      更新时间:2023-10-16

我想在用鼠标右键单击调用菜单以通过用户输入更改颜色值时添加选项。我试过cin>> RED1;但它无法识别cin.
我不知道如何完成这项工作,除非给出一个固定的值来改变颜色。 如何实现用户对此案例的输入?

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#define _USE_MATH_DEFINES
#include <cmath>
#include <gl/glut.h>
GLfloat angle = 0.0;
static int RED1 = 1, GREEN1 = 3, BLUE1 = 0, RED2 = 2, GREEN2 = 2, BLUE2 = 1;
static int MENUsub, Face1, Face2, i, LINES;
static int SELECIONA = 2, f = 0, VALOR = 0, SOLID = 0, LINE = 1;
static double NoFaces = 32, ihc, cordX = 1, cordY = 1, cordZ = 1;
void init(void)
{
    glClearColor (0.0, 0.0, 0.0, 0.0);
    glShadeModel (GL_FLAT);
}
void creatMENU(void)
{
    Face1 = glutCreateMenu(MENU);
    glutAddMenuEntry("Change Colour Values", 1);
    MENUsub = glutCreateMenu(MENU);
    glutAddSubMenu("Face 1", Face1);
    glutAddMenuEntry("Sair", 0);
    glutAttachMenu(GLUT_RIGHT_BUTTON);
}
void MENU (int OPT)
{
    if(OPT == 0)
    {
        exit(0);
    }
    else
    {
        switch(OPT);
        {
        case 1 :
            //cin>> RED1;
            RED1 = 2;
            break;
        }
    }
}

据我所知,你需要自己处理。

使用glutKeyboardFunc获取键盘输入,并使用glutBitmapCharater将文本打印到窗口。

因此,您可以保留一个全局布尔值changingColor当选择菜单项时,您可以切换到true。然后,您可以使用矩形或其他东西呈现输入。您的键盘功能可能看起来有点像这样:

std::string colorInput;
void keyboard(unsigned char key, int x, int y) {
    if (changingColor) {
        colorInput += key;
    }
 }

在你的渲染函数中,类似于:

if (changingColor) {
    glRasterPos3f(x, y, z);
    for (auto it = colorInput.begin(); it != colorInput.end(); ++it) {
        glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, *it);
    }
}
  1. 贪吃位图字符
  2. 贪吃键盘功能
相关文章: