1

これは、爆弾の脅威を検出するifステートメントです(私が作っているゲームです)...

if (exodus2_bomb == 1)
{
    float exodus2_theta_math = (exodus2_theta)/10.0*M_PI;
    float exodus2_phi_math = (exodus2_phi)/10.0*2*M_PI;
    r_exodus2_x = radius_exodus_pos * sin(exodus2_theta_math) * cos(exodus2_phi_math);
    r_exodus2_y = radius_exodus_pos * sin(exodus2_theta_math) * sin(exodus2_phi_math);
    r_exodus2_z = radius_exodus_pos * cos(exodus2_theta_math);  

    glPushMatrix();
    glTranslatef(r_exodus2_x,r_exodus2_y,r_exodus2_z);
    glColor3f (1.0, 0.0, 0.0);        
    glRasterPos3i(exodus2_x/10,exodus2_y/10,exodus2_z/10);
    string exodus2 = "BOMB!!";
    void * fontexodus2 = GLUT_BITMAP_HELVETICA_10;
    for (string::iterator i = exodus2.begin(); i != exodus2.end(); ++i)
    {
        char c = *i;
        glutBitmapCharacter(fontexodus2, c);
    }
    glEnd();
    glPopMatrix();

    glPushMatrix();
    glTranslatef(r_exodus2_x,r_exodus2_y,r_exodus2_z);
    glColor3f (1.0, 0.0, 0.0);        
    glRasterPos3i(exodus2_x/10,exodus2_y/10,exodus2_z/10);
    string exodus2b = "\n THREAT LEVEL 1";
    void * fontexodus2b = GLUT_BITMAP_HELVETICA_10;
    for (string::iterator i = exodus2b.begin(); i != exodus2b.end(); ++i)
    {
        char c = *i;
        glutBitmapCharacter(fontexodus2b, c);
    }
    glEnd();
    glPopMatrix();
}

私がしたいのは、「string exodus2」と「string exodus2b」の間の改行です。ただし、常に 1 行です。そして、私はそのための不動産を画面上に持っていません。

文字列反復子のどこかに改行を追加することはできますか?

残念ながら、「glTranslatef」と「glRasterPos3i」をいじっても、カメラを動かしても 2 行のテキスト間の距離が一致しません。

4

1 に答える 1

0

各文字列を個別にレンダリングし、ラスター位置を適切に変更して文字列の位置をリセットする必要があります。を使用glutBitmapHeightすると、新しいラインをエミュレートするためにラスター位置を「下」にどれだけ移動する必要があるかを判断できます。

文字列を 3D で配置したいが、2D では同じ平面に制限されているかのように "動作" させたい場合は、glBitmapコマンドを使用して画面空間のラスター位置を変更できます。

int lineHeight   = glutBitmapHeight( font );  // number of pixels between "lines"
int stringLength = glutBitmapLength( font, s1 );  // returns length of string 1 in pixels

glutBitmap( 0, 0, 0, 0, -stringLength, lineHeight, NULL );  // move raster position
glutBitmapString( font, s2 );

の 5 番目と 6 番目のパラメーターはglBitmap、ラスター位置をどれだけ移動するかを制御します。

または、これらの文字列を 3D 空間内の点と比較して、ウィンドウに相対的な位置に固定する場合は、 を確認してくださいglWindowPos

ちなみに、これらの関数はすべて OpenGL 3.0 で非推奨になり、OpenGL 3.1 で削除されました。ただし、OpenGL 3.2 以降のバージョンで互換コンテキストを使用する場合を除きます。

于 2013-01-23T21:36:32.563 に答える