OpenGL中的彩色comand问题 #包括 #包括 const int posicao=28.0/*这是一个非常重要的问题,因为它是一个非常重要的问题*/ 浮动垂直=30.0,水平=30.0; int seletor=1; char escolha_de_magias[]={?1-Copia de critatura:Faz uma replica perfeita de qualquer“/*与埃斯特亚·卢坦多(esteja lutando)的作品相反,这是一幅原作的复制品controle@2-额外的感知:心灵感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应font psikica perto de uma outra.@3-Fogo:Tds作为一个标准格式tm medo d Fogo,e ste enknto da o podr d fazr fazr APERA FOGR o sua vontad.Vc pdera导致一个爆炸性事件和一个危险性事件。4-Ouro dos Tolos:TRNSFORM pdra comum em a plha dos PARE sr Ouro。Mas eh apnas apnas a ilusao一个ilusao-EMBRA+confiavl q o Enknto d ilusao abaixo-e plha d ouro logo voltara a sr pdra.@5-ilusao:Ste e Enknto podroso,mas q n e mto confiavl.Prmit criar a ilusao convcnte(公共关系范例,chao sta Coberto d krvao em brasa)p工程师a Critatura.o Enknto fikra imeditant sm Efecto公司(举例来说,vc Convenc a Critatura q s trnsou em a serpnt e enta ament at ne a sua kbca c gold d spadam!)6-Levitaco:Vc pde lancr ste enknto sbre objtos,adversarios ou ate sbre si msm.Fara cm tdo tdo q estja sob sob sob sob sob tou liverment no ar,sob o seu cntrole.@7-Escudo:Cria um scudo invisiv sua freen to protecera d objtos fsicos,cm flecas,spad as ou cratituras.o scudo n tm efeito cntra a magiae、 evdntmnte,s nd fora dle pod tokr em vc,vc tbm n podra tokr em nd fora dle@8-分拣机:Este enknto e SPECIAL pq pod sr lancado a qlqr MONTO durante a sua avntura,n sr durant a batalha.a vz lancado,recuperara o seu indce em metad seu d seu indce d seu d seu d seu indce d seu d seu d seu d seu d seu INDINCIAL,ARE ARE,ARE ARD ARD ARE ARE ARD,ARD ARD ARE ARE ARD ARD ARD ARD或者一个单独的。@9-Habilidade:Restabelecera o seu indce d Habilidade.function a exatant cm o enknot d Sort.@10 Energia:Recurperara o seu indce d Energia,aumentando em metad seu vl d inical.function a cmo enknot d dSort@11-适用范围:根据《联邦住宅法》的规定,在所有住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区在12个框架内,所有控制措施均有效,如criatras、ms qnd tm、criatras trna框架和mto prigosa btalha“*/”; void escritoura(char*p)/*functao QUE ESCREVE NA TELA.Esta pronta mas sujeita a mudanças*/ { int contcarac=0,position=posicao,selecao=0; float cor[4]={0.0,0.0,0.0,0.0}; p++; glRasterPos2f(-28.0,位置); 而(*p) { 如果(*p='1'| |*p='2'| |*p='3'| |*p='4'| |*p='5'| |*p='6'| |*p='7'| |*p='8'|*p='9'| |*p='0')/**/ { /*如果(*(p+1)!='1'&&*(p+1)!='2'&*(p+1)!='3'&*(p+1)!='4'&*(p+1)!='5'&*(p+1)!='6'&*(p+1)!='8'&*(p+1)!='9'&*(p+1)!='0')/**/ { glColor3d(1.0,0.0,0.0); } } glutBitmapCharacter(GLUT_位图_8_乘以_13,*p); p++; contcarac++; } 返回; } void ABACAXI() { glClearColor(1.0,1.0,1.0,0.0); glClear(GLU颜色缓冲位); glMatrixMode(GL_投影); glLoadIdentity(); 格洛托(水平-60.0,水平,垂直-60.0,垂直,1100); glMatrixMode(GLU模型视图); glLoadIdentity(); glTranslatef(0.0,0.0,-5.0); glColor3d(0.0,1.0,0.0); glBegin(GL_线_带); glVertex3d(-30.0,-30.0,0.0); glVertex3d(-30.0,30.0,0.0); glVertex3d(30.0,30.0,0.0); glVertex3d(30.0,-30.0,0.0); 格伦德(); 埃斯克里图拉(埃斯科哈·德马吉亚斯); glFlush(); } void-teclado(int-tecla,int-x,int-y) { 开关(tecla) { 案例过多关键点: 垂直++; 打破 案例过量键关闭: 垂直--; 打破 案例过量键右: HORIZ++; 打破 案例过剩\u键\u左: 荷里兹--; 打破 } 再发现(); } int main(int argc,字符**argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(1000700); “Alo!”; GLUT(阿巴卡西); glutSpecialFunc(特克拉多); 再发现(); glutMainLoop(); }

OpenGL中的彩色comand问题 #包括 #包括 const int posicao=28.0/*这是一个非常重要的问题,因为它是一个非常重要的问题*/ 浮动垂直=30.0,水平=30.0; int seletor=1; char escolha_de_magias[]={?1-Copia de critatura:Faz uma replica perfeita de qualquer“/*与埃斯特亚·卢坦多(esteja lutando)的作品相反,这是一幅原作的复制品controle@2-额外的感知:心灵感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应。它是一种精神上的感应font psikica perto de uma outra.@3-Fogo:Tds作为一个标准格式tm medo d Fogo,e ste enknto da o podr d fazr fazr APERA FOGR o sua vontad.Vc pdera导致一个爆炸性事件和一个危险性事件。4-Ouro dos Tolos:TRNSFORM pdra comum em a plha dos PARE sr Ouro。Mas eh apnas apnas a ilusao一个ilusao-EMBRA+confiavl q o Enknto d ilusao abaixo-e plha d ouro logo voltara a sr pdra.@5-ilusao:Ste e Enknto podroso,mas q n e mto confiavl.Prmit criar a ilusao convcnte(公共关系范例,chao sta Coberto d krvao em brasa)p工程师a Critatura.o Enknto fikra imeditant sm Efecto公司(举例来说,vc Convenc a Critatura q s trnsou em a serpnt e enta ament at ne a sua kbca c gold d spadam!)6-Levitaco:Vc pde lancr ste enknto sbre objtos,adversarios ou ate sbre si msm.Fara cm tdo tdo q estja sob sob sob sob sob tou liverment no ar,sob o seu cntrole.@7-Escudo:Cria um scudo invisiv sua freen to protecera d objtos fsicos,cm flecas,spad as ou cratituras.o scudo n tm efeito cntra a magiae、 evdntmnte,s nd fora dle pod tokr em vc,vc tbm n podra tokr em nd fora dle@8-分拣机:Este enknto e SPECIAL pq pod sr lancado a qlqr MONTO durante a sua avntura,n sr durant a batalha.a vz lancado,recuperara o seu indce em metad seu d seu indce d seu d seu d seu indce d seu d seu d seu d seu d seu INDINCIAL,ARE ARE,ARE ARD ARD ARE ARE ARD,ARD ARD ARE ARE ARD ARD ARD ARD或者一个单独的。@9-Habilidade:Restabelecera o seu indce d Habilidade.function a exatant cm o enknot d Sort.@10 Energia:Recurperara o seu indce d Energia,aumentando em metad seu vl d inical.function a cmo enknot d dSort@11-适用范围:根据《联邦住宅法》的规定,在所有住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区、住宅区在12个框架内,所有控制措施均有效,如criatras、ms qnd tm、criatras trna框架和mto prigosa btalha“*/”; void escritoura(char*p)/*functao QUE ESCREVE NA TELA.Esta pronta mas sujeita a mudanças*/ { int contcarac=0,position=posicao,selecao=0; float cor[4]={0.0,0.0,0.0,0.0}; p++; glRasterPos2f(-28.0,位置); 而(*p) { 如果(*p='1'| |*p='2'| |*p='3'| |*p='4'| |*p='5'| |*p='6'| |*p='7'| |*p='8'|*p='9'| |*p='0')/**/ { /*如果(*(p+1)!='1'&&*(p+1)!='2'&*(p+1)!='3'&*(p+1)!='4'&*(p+1)!='5'&*(p+1)!='6'&*(p+1)!='8'&*(p+1)!='9'&*(p+1)!='0')/**/ { glColor3d(1.0,0.0,0.0); } } glutBitmapCharacter(GLUT_位图_8_乘以_13,*p); p++; contcarac++; } 返回; } void ABACAXI() { glClearColor(1.0,1.0,1.0,0.0); glClear(GLU颜色缓冲位); glMatrixMode(GL_投影); glLoadIdentity(); 格洛托(水平-60.0,水平,垂直-60.0,垂直,1100); glMatrixMode(GLU模型视图); glLoadIdentity(); glTranslatef(0.0,0.0,-5.0); glColor3d(0.0,1.0,0.0); glBegin(GL_线_带); glVertex3d(-30.0,-30.0,0.0); glVertex3d(-30.0,30.0,0.0); glVertex3d(30.0,30.0,0.0); glVertex3d(30.0,-30.0,0.0); 格伦德(); 埃斯克里图拉(埃斯科哈·德马吉亚斯); glFlush(); } void-teclado(int-tecla,int-x,int-y) { 开关(tecla) { 案例过多关键点: 垂直++; 打破 案例过量键关闭: 垂直--; 打破 案例过量键右: HORIZ++; 打破 案例过剩\u键\u左: 荷里兹--; 打破 } 再发现(); } int main(int argc,字符**argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(1000700); “Alo!”; GLUT(阿巴卡西); glutSpecialFunc(特克拉多); 再发现(); glutMainLoop(); },opengl,opengl-compat,Opengl,Opengl Compat,前面的代码应该将escolha_de_magias中的文本绘制为红色,但一直以绿色绘制。 在第一次调用glutBitmapCharacter()之前,我使用glGetFloatv(GET\u CURRENT\u COLOR,cor)函数进行了一次测试,结果显示图形的颜色设置为红色 我不知道发生了什么用于绘制字符的颜色是由设置的。将当前颜色设置为并将其关联 您必须在glRasterPos2f之前使用红色,才能绘制红色文本 #include <GL/glut.h> #include &l

前面的代码应该将
escolha_de_magias
中的文本绘制为红色,但一直以绿色绘制。
在第一次调用
glutBitmapCharacter()
之前,我使用
glGetFloatv(GET\u CURRENT\u COLOR,cor)
函数进行了一次测试,结果显示图形的颜色设置为红色


我不知道发生了什么

用于绘制字符的颜色是由设置的。将当前颜色设置为并将其关联

您必须在
glRasterPos2f
之前使用红色,才能绘制红色文本

#include <GL/glut.h>
#include <stdio.h>

const int posicao=28.0;/*esta constante sera usada para fixar a posicao do inicio do texto para a funcao de escrita*/

float VERTICAL=30.0, HORIZ=30.0;

int seletor=1;

char escolha_de_magias[]={"?1-Copia de Criatura: Faz uma replica perfeita de qualquer"/* criatura contra a qual voce esteja lutando. A replica tera os mesmos poderes do orignal, mas estara sob seu controle@2-Percepcao Extra-Sensorial: Sintoniza ondas psiquicas. Isso podera ajuda-lo a ler a mente de uma criatura ou descobrir o que esta por tras de uma porta trancada. Mas este encanto pode dar informacoes equivokdas, se houver + de a font psikica perto de uma outra.@3-Fogo: Tds as criaturas tm medo d fogo, e ste enknto da o podr d fazr aparecr fogo o sua vontad. Vc pdera causr a pkena xplosao n chao q keimara pr varios os ou criar a brreira d fogo p mantr criaturas a dstancia.@4-Ouro dos Tolos: Trnsforma pdra comum em a plha do q parece sr ouro. Mas eh apnas a ilusao - embora + confiavl q o Enknto d ilusao abaixo - e a plha d ouro logo voltara a sr pdra.@5-Ilusao: Ste e  enknto podroso, mas q n e mto confiavl. Prmit criar a ilusao convncnte (pr exemplo, q o chao sta cobrto d krvao em brasa) p enganr a criatura. O enknto fikra imediatamnt sm efeito s acontcr qlqr coisa q dsfaca a ilusao (pr exemplo, vc convnc a criatura q s trnsformou em a serpnt e entao imediatamnt atnge sua kbca c  golp d spada!). e efcient sbre td c criaturas intlignts.@6-Levitacao: Vc pde lancr ste enknto sbre objtos, advrsarios ou ate sbre si msm. Fara cm q tdo q estja sob sua influencia flutue livremnt no ar, sob o seu cntrole.@7-Escudo: Cria um scudo invsivl à sua frent q o protgera d objtos fsicos, cm flechas, spadas ou criaturas. O scudo n tm efeito cntra a magia e, evdntmnte, s nd fora dle pod tokr em vc, vc tbm n podra tokr em nd fora dle.@8-Sorte: Este enknto e spcial pq pod sr lancado a qlqr momnto durante a sua avntura, a n sr durant a batalha. a vz lancado, recuperara o seu indce d SORTE em metad d seu indce d SORTE Inicial, arredondado p baixo. Ste enknto nunk lvara o seu indce d SORTE a  nmro suprior a seu nivl Inicial.@9-Habilidade: Restabelecera o seu indce d HABILIDADE. Funciona exatamnt cm o enknto d Sort.@10-Energia: Recuperara o seu indce d Energia, aumentando-o em metad d seu vlr Inicial. Funciona cmo o enknto d Sort@11-Forca: Ste enknto tm o efeito d aumentr mto a sua frca, e e mto utl qnd s luta cntra criaturas forts. Porm, dv sr utlizado c cautla, ja q e dfcil controlr a sua prpria frca qnd ela aumnta d+@12-Fraqueza: N tm efeito cntra tds as criatras, ms qnd tm, a criatra s trna fragl e mto mnos prigosa em a btalha"*/};

void escritoura (char *p)/* FUNCAO QUE ESCREVE NA TELA. Esta pronta mas sujeita a mudanças*/
{
    int contcarac=0, position=posicao, selecao=0;
    float cor[4]={ 0.0, 0.0, 0.0, 0.0};
    p++;
    glRasterPos2f(-28.0, position);
    while(*p)
    {
        if(*p=='1' || *p=='2' || *p=='3' || *p=='4' || *p=='5' || *p=='6' || *p=='7' || *p=='8' || *p=='9' || *p=='0')/* testa se eu estou olhando para um algarismo*/
        {
          /*if(*(p+1)!='1' && *(p+1)!='2' && *(p+1)!='3' && *(p+1)!='4' && *(p+1)!='5' && *(p+1)!='6' && *(p+1)!='7' && *(p+1)!='8' && *(p+1)!='9' && *(p+1)!='0')/*testa se o proximo nao e um algarismo*/
          {
            glColor3d(1.0, 0.0, 0.0);
          }
        }   
        glutBitmapCharacter(GLUT_BITMAP_8_BY_13, *p);
        p++;
        contcarac++;
    }
    return;
}

void ABACAXI()
{
    glClearColor(1.0,1.0,1.0,0.0);
    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(HORIZ-60.0, HORIZ, VERTICAL-60.0, VERTICAL,1,100);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.0, 0.0, -5.0);

    glColor3d(0.0, 1.0, 0.0);

    glBegin(GL_LINE_STRIP);
        glVertex3d(-30.0, -30.0, 0.0);
        glVertex3d(-30.0, 30.0, 0.0);
        glVertex3d(30.0, 30.0, 0.0);
        glVertex3d(30.0, -30.0, 0.0);
    glEnd();

    escritoura(escolha_de_magias);

    glFlush();
}

void teclado(int tecla, int x, int y)
{
    switch(tecla)
    {
        case GLUT_KEY_UP:
        VERTICAL++;
        break;

        case GLUT_KEY_DOWN:
        VERTICAL--;
        break;

        case GLUT_KEY_RIGHT:
        HORIZ++;
        break;

        case GLUT_KEY_LEFT:
        HORIZ--;
        break;
    }
    glutPostRedisplay();
}

int main(int argc, char **argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(1000,700);
    glutCreateWindow("Alo!");
    glutDisplayFunc(ABACAXI);
    glutSpecialFunc(teclado);
    glutPostRedisplay();
    glutMainLoop();
} 
您的文本显示为绿色,因为在调用
glRasterPos2f
之前设置的最后一种颜色是
GL\u LINE\u STRIP
原语的颜色

如果要绘制具有不同颜色的文本,则必须在文本颜色更改时的每个点多次调用
glRasterPos


当前光栅位置可通过使用参数
GL\u current\u raster\u position
获得:

glColor3d(1.0, 0.0, 0.0);
glRasterPos2f(-28.0, position);
遗憾的是,您可能无法获得通过
glRasterPos
设置的位置,因为传递到
glRasterPos
的坐标由当前模型视图矩阵和投影矩阵进行变换,但当您读回位置时
float pos[4];
glGetFloatv( GL_CURRENT_RASTER_POSITION, pos );
void escritoura (char *p)
{
    int contcarac=0, position=posicao, selecao=0;
    p++; 
    glRasterPos2f(-28.0f, position);
    while(*p)
    {
        if(*p=='1' || *p=='2' || *p=='3' || *p=='4' || *p=='5' || *p=='6' || *p=='7' || *p=='8' || *p=='9' || *p=='0')
        {
            // get the current raster position in window coordinates
            float pos[4];
            glGetFloatv( GL_CURRENT_RASTER_POSITION, pos );    

            // push model view matrix and set identity matrix
            glMatrixMode(GL_MODELVIEW);
            glPushMatrix();
            glLoadIdentity();

            // push projection matrix and set transformation form window coordinates to NDC
            glMatrixMode(GL_PROJECTION);
            glPushMatrix();
            glLoadIdentity();
            glOrtho( 0, 1000, 0, 700, -1, 1 ); // (1000, 700) is the window size!

            // change current color
            glColor3d( 1.0, 0.0, 0.0 );

            // associate new color, but keep position
            glRasterPos4fv( pos );

            // restore (pop) model view and projection matrix
            glMatrixMode(GL_PROJECTION);
            glPopMatrix();
            glMatrixMode(GL_MODELVIEW);
            glPopMatrix();
        }
        glutBitmapCharacter(GLUT_BITMAP_8_BY_13, *p);
        p++; contcarac++;
    }
    return;
}