OpenGL入门笔记(十五)

GLvoid COpenGLDemoView::glPrint(GLint x, GLint y,  char   * string int   set )                     //  Custom GL "Print" Routine
{
     
if (set>1)
    
{
        
set=1;
    }

    glBindTexture(GL_TEXTURE_2D, texture[
0]);            // Select Our Font Texture
    glDisable(GL_DEPTH_TEST);                            // Disables Depth Testing
    glMatrixMode(GL_PROJECTION);                        // Select The Projection Matrix
    glPushMatrix();                                        // Store The Projection Matrix
    glLoadIdentity();                                    // Reset The Projection Matrix
    glOrtho(0,640,0,480,-1,1);                            // Set Up An Ortho Screen
    glMatrixMode(GL_MODELVIEW);                            // Select The Modelview Matrix
    glPushMatrix();                                        // Store The Modelview Matrix
    glLoadIdentity();                                    // Reset The Modelview Matrix
    glTranslated(x,y,0);                                // Position The Text (0,0 - Bottom Left)
    glListBase(base-32+(128*set));                        // Choose The Font Set (0 or 1)
    glCallLists(strlen(string),GL_UNSIGNED_BYTE,string);// Write The Text To The Screen
    glMatrixMode(GL_PROJECTION);                        // Select The Projection Matrix
    glPopMatrix();                                        // Restore The Old Projection Matrix
    glMatrixMode(GL_MODELVIEW);                            // Select The Modelview Matrix
    glPopMatrix();                                        // Restore The Old Projection Matrix
    glEnable(GL_DEPTH_TEST);                            // Enables Depth Testing                                    // Pops The Display List Bits
}

GLvoid COpenGLDemoView::BuildFont(GLvoid)
{
    
float    cx;                                            // Holds Our X Character Coord
    float    cy;                                            // Holds Our Y Character Coord

    
base=glGenLists(256);                                // Creating 256 Display Lists
    glBindTexture(GL_TEXTURE_2D, texture[0]);            // Select Our Font Texture
    for (int i =0; i<256; i++)                        // Loop Through All 256 Lists
    {
        cx
=float(i%16)/16.0f;                        // X Position Of Current Character
        cy=float(i/16)/16.0f;                        // Y Position Of Current Character

        glNewList(
base+i,GL_COMPILE);                // Start Building A List
            glBegin(GL_QUADS);                            // Use A Quad For Each Character
                glTexCoord2f(cx,1-cy-0.0625f);            // Texture Coord (Bottom Left)
                glVertex2i(0,0);                        // Vertex Coord (Bottom Left)
                glTexCoord2f(cx+0.0625f,1-cy-0.0625f);    // Texture Coord (Bottom Right)
                glVertex2i(16,0);                        // Vertex Coord (Bottom Right)
                glTexCoord2f(cx+0.0625f,1-cy);            // Texture Coord (Top Right)
                glVertex2i(16,16);                        // Vertex Coord (Top Right)
                glTexCoord2f(cx,1-cy);                    // Texture Coord (Top Left)
                glVertex2i(0,16);                        // Vertex Coord (Top Left)
            glEnd();                                    // Done Building Our Quad (Character)
            glTranslated(10,0,0);                        // Move To The Right Of The Character
        glEndList();                                    // Done Building The Display List
    }
                                                    // Loop Until All 256 Are Built
}


int  COpenGLDemoView::DrawGLScene()                                   
{// Here's Where We Do All The Drawing
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    // Clear The Screen And The Depth Buffer
    glLoadIdentity();                                    // Reset The Modelview Matrix
    glBindTexture(GL_TEXTURE_2D, texture[1]);            // Select Our Second Texture
    glTranslatef(0.0f,0.0f,-5.0f);                        // Move Into The Screen 5 Units
    glRotatef(45.0f,0.0f,0.0f,1.0f);                    // Rotate On The Z Axis 45 Degrees (Clockwise)
    glRotatef(cnt1*30.0f,1.0f,1.0f,0.0f);                // Rotate On The X & Y Axis By cnt1 (Left To Right)
    glDisable(GL_BLEND);                                // Disable Blending Before We Draw In 3D
    glColor3f(1.0f,1.0f,1.0f);                            // Bright White
    glBegin(GL_QUADS);                                    // Draw Our First Texture Mapped Quad
        glTexCoord2d(0.0f,0.0f);                        // First Texture Coord
        glVertex2f(-1.0f1.0f);                        // First Vertex
        glTexCoord2d(1.0f,0.0f);                        // Second Texture Coord
        glVertex2f( 1.0f1.0f);                        // Second Vertex
        glTexCoord2d(1.0f,1.0f);                        // Third Texture Coord
        glVertex2f( 1.0f,-1.0f);                        // Third Vertex
        glTexCoord2d(0.0f,1.0f);                        // Fourth Texture Coord
        glVertex2f(-1.0f,-1.0f);                        // Fourth Vertex
    glEnd();                                            // Done Drawing The First Quad
    glRotatef(90.0f,1.0f,1.0f,0.0f);                    // Rotate On The X & Y Axis By 90 Degrees (Left To Right)
    glBegin(GL_QUADS);                                    // Draw Our Second Texture Mapped Quad
        glTexCoord2d(0.0f,0.0f);                        // First Texture Coord
        glVertex2f(-1.0f1.0f);                        // First Vertex
        glTexCoord2d(1.0f,0.0f);                        // Second Texture Coord
        glVertex2f( 1.0f1.0f);                        // Second Vertex
        glTexCoord2d(1.0f,1.0f);                        // Third Texture Coord
        glVertex2f( 1.0f,-1.0f);                        // Third Vertex
        glTexCoord2d(0.0f,1.0f);                        // Fourth Texture Coord
        glVertex2f(-1.0f,-1.0f);                        // Fourth Vertex
    glEnd();                                            // Done Drawing Our Second Quad
    glEnable(GL_BLEND);                                    // Enable Blending

    glLoadIdentity();                                    
// Reset The View
    
// Pulsing Colors Based On Text Position
    glColor3f(1.0f*float(cos(cnt1)),1.0f*float(sin(cnt2)),1.0f-0.5f*float(cos(cnt1+cnt2)));
    glPrint(
int((280+250*cos(cnt1))),int(235+200*sin(cnt2)),"China",0);        // Print GL Text To The Screen

    glColor3f(
1.0f*float(sin(cnt2)),1.0f-0.5f*float(cos(cnt1+cnt2)),1.0f*float(cos(cnt1)));
    glPrint(
int((280+230*cos(cnt2))),int(235+200*sin(cnt1)),"OpenGL",1);    // Print GL Text To The Screen

    glColor3f(
0.0f,0.0f,1.0f);                            // Set Color To Blue
    glPrint(int(240+200*cos((cnt2+cnt1)/5)),2,"phinecos",0);

    glColor3f(
1.0f,1.0f,1.0f);                            // Set Color To White
    glPrint(int(242+200*cos((cnt2+cnt1)/5)),2,"phinecos",0);

    
return TRUE;                                        // Everything Went OK}
}


BOOL COpenGLDemoView::InitGL(GLvoid)                                        
//  All Setup For OpenGL Goes Here
{
    
if (!LoadGLTextures())                                // Jump To Texture Loading Routine ( NEW )
    {
        
return FALSE;                                    // If Texture Didn't Load Return FALSE
    }


    BuildFont();                                        
// Build The Font
    glClearColor(0.0f0.0f0.0f0.0f);                // Clear The Background Color To Black
    glClearDepth(1.0);                                    // Enables Clearing Of The Depth Buffer
    glDepthFunc(GL_LEQUAL);                                // The Type Of Depth Test To Do
    glBlendFunc(GL_SRC_ALPHA,GL_ONE);                    // Select The Type Of Blending
    glShadeModel(GL_SMOOTH);                            // Enables Smooth Color Shading
    glEnable(GL_TEXTURE_2D);                            // Enable 2D Texture Mapping

    
return TRUE;                                        // Initialization Went OK
}



200782705.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值