0

を押すととaを切り替えるというこの機能がGL_LINEありGL_FILLます。プログラムを実行すると、プログラムはで始まり、GL_FILL押すaとに切り替わりますGL_LINEaただし、を押したときに両方を切り替え続けてほしい。

誰かが私がどこで間違っているのか教えてもらえますか?

void keyPressed (unsigned char key, int x, int y) { 
switch (key){
case 'a':
    bool f = false;
    if(!f){
        glPolygonMode(GL_FRONT,GL_LINE);
        glPolygonMode(GL_BACK, GL_LINE);

    }else{
        //bOutline=false;
        glPolygonMode(GL_FRONT,GL_FILL);
        glPolygonMode(GL_BACK, GL_FILL);
    }
    f=!f;
    break;

}

}
4

4 に答える 4

3

fで処理される2つの状態を切り替える必要があると思うので、外部スコープでfを定義するか、このように静的変数として定義する必要があります。

static bool f = false;
于 2012-10-10T14:13:08.407 に答える
2

呼び出されるたびに関数内でboolを定義するfので、グローバル変数として定義するか、静的変数として定義する必要があります。

static bool f = false;

glGet引数とともに使用しGL_POLYGON_MODEて、前面と背面の現在のモードを見つけることもできます。例:

GLint polyMode[2];
//returns front and back modes
glGetIntegerv(GL_POLYGON_MODE, polyMode);

switch(polyMode[0]) { 
    case GL_LINE:
        //add code
        break;
    case GL_FILL:
        //add code
        break;
    case GL_POINTS:
        //add code
        break;
}
于 2012-10-10T14:09:28.857 に答える
2

関数呼び出し間でその値を維持するには、fを静的変数として定義する必要があります。static bool f = false; または単にグローバル変数にします

于 2012-10-10T14:13:54.483 に答える
1

本当に必要fですか?2つの値を切り替えたいように思われるので、次のようにしないでください。

GLint previous[2];
glGetIntegerv( GL_POLYGON_MODE, previous );
glPolygonMode( GL_FRONT, previous[0] == GL_LINE ? GL_FILL : GL_LINE);
glPolygonMode( GL_BACK, previous[1] == GL_LINE ? GL_FILL : GL_LINE);
于 2012-10-10T14:18:46.093 に答える