0

マウスを右クリックしてメニューを呼び出し、ユーザー入力によって色の値を変更するオプションを追加したいと考えています。試し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;
        }
    }
}
4

1 に答える 1

3

私の知る限り、自分で処理する必要があります。

を使用しglutKeyboardFuncてキーボード入力を取得し、 を使用glutBitmapCharaterしてテキストをウィンドウに出力します。

そのため、メニュー項目が選択されたときにchangingColor切り替えることができるグローバル bool を保持できます。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. glutBitmapCharacter
  2. glutKeyboardFunc
于 2012-06-17T22:44:10.513 に答える