OpenGL入门笔记(十五)

简介: GLvoid COpenGLDemoView::glPrint(GLint x, GLint y, char *string, int set)                    // Custom GL "Print" Routine {      if (set>1)     {     .
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.0f, 1.0f);                        // First Vertex
        glTexCoord2d(1.0f,0.0f);                        // Second Texture Coord
        glVertex2f( 1.0f, 1.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.0f, 1.0f);                        // First Vertex
        glTexCoord2d(1.0f,0.0f);                        // Second Texture Coord
        glVertex2f( 1.0f, 1.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.0f, 0.0f, 0.0f, 0.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

本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/08/27/872002.html,如需转载请自行联系原作者

目录
相关文章
|
vr&ar Android开发 C++
Android OpenGL入门
Android OpenGL入门
Android OpenGL入门
|
存储 缓存 安全
OpenGL ES 入门:GLKit加载图片
OpenGL ES 入门:GLKit加载图片
176 0
OpenGL ES 入门:GLKit加载图片
|
存储 缓存
案例 02、OpenGL入门--正方形键位控制
OpenGL入门--正方形键位控制
137 0
案例 02、OpenGL入门--正方形键位控制
|
缓存 容器
案例 01、OpenGL入门--绘制三角形
OpenGL中三角形的绘制,就类似于学习编程时的Hello world,是一个入门级的使用,重点在于理解图形是如何绘制的
257 0
案例 01、OpenGL入门--绘制三角形
|
C++ 异构计算 Python
OpenGL渲染入门
## 前言 在开始之前,先来看一段图像解码序列(格式为YUV420)的4个渲染结果,这里我分别截了4张图 ![image.png](https://ata2-img.cn-hangzhou.oss-pub.aliyun-inc.com/dca46d1be7dfee07981a7dea14ae3aa1.png) 其中4个渲染效果分别是 左上:直接渲染视频帧并绘制到窗口上 右上:
1789 0
|
API
OpenGL ES 入门API大全
本文章正确使用姿势:command/Ctrl + f  进行搜索对应的功能代码,找到它的详细解释。 (以下内容如有偏差,欢迎进行指正) 一.CAEAGLLayer 的使用: CAEAGLLayer 官方解释如图CAEAGLLayer,我来简单翻译一下: CAEAGLLayer 是继承于CALayer 的,可以用它在iOS 和tvOS 的设备上使用。
1477 0