游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1560|回复: 0

求助!关于字符显示的问题

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-9-6 14:24:00 | 显示全部楼层 |阅读模式
最近在写一个作业~
不知天高地厚的选了OpenGL,遇到好多问题……
目前遇上瓶颈了……写了一段代码,就是从一个文件中读取字符,然后显示出来,单独的时候是对的,但要是加上贴图一起,文字就不显示,不知道是为什么,有没有遇到过同样的问题……求各位高手帮忙……谢谢了
这是代码……
光文字显示的不包括贴图的,不知道这段代码有什么问题……
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <math.h>
#include <gl/glut.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glaux.h>
#include <iostream>
#include <fstream>

using namespace std;

#define screenwidth 600
#define screenheight 600
#define DEG_TO_RAD 0.017453
#define TRUE 1
#define FALSE 0
#define Maxsize  21
#define num 10
int button, state;



struct LOCATION                                                                                //用于记录鼠标位置
{
        int x;
        int y;
};

struct CAMERA                                                                                //用于摄像机定位
{
        GLfloat xeye;
        GLfloat yeye;
        GLfloat zeye;
};

struct POLAR                                                                                //球坐标
{
        float r;                                                                                //距离r
        float alpha;                                                                        //水平偏角α
        float fy;                                                                                //竖直偏角φ(单位均用角度)
};

POLAR polar={ 3.0f, 60.0f, 45.0f};                                        //初始化球坐标
CAMERA camera;                                                                                //这个摄像机的位置就是球坐标的位置
LOCATION oldpt={ -1, -1};                                                        //记录鼠标的前一个位置

int l_button_up=TRUE;                                                                //记录鼠标左键按下的状态

void SetCamera(GLfloat x, GLfloat y)                                //x,y 是水平方向和竖直方向的改变量
{

}


/*void OnMouseMove(int x, int y)                                                //当鼠标移动时会回调该函数
{
        GLfloat xx=0.0f, yy=0.0f;
        xx = (GLfloat)(x*2-600)/100;
        yy = 0.0f-(GLfloat)(y*2-600)/100;

}*/
void Reshape(int w, int h)                                                        //使随窗口大小改变而改变
{
        glViewport(0, 0, w, h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(-6.0f, 6.0f,-6.0f, 6.0f,-6.0f, 6.0f);                        //定义剪裁区
}

BOOL init(void)
{
        glShadeModel(GL_SMOOTH);                                                // 启用阴影平滑
        glClearColor( 0.0f, 0.0f, 0.0f, 0.0f);                        // 将背静设为白色
        glClearDepth( 1.0f);                                                                // 设置深度缓存
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glEnable(GL_TEXTURE_2D);//        启用纹理映射
        glEnable(GL_DEPTH_TEST);                                                // 启用深度测试
        glDepthFunc(GL_LEQUAL);                                                        // 所作深度测试的类型
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);                                                                // 告诉系统对透视进行修正
        glViewport(0, 0, screenwidth, screenheight);        // 重置当前的视口
        glMatrixMode(GL_PROJECTION);                                        // 选择投影矩阵
        glLoadIdentity();                                                                // 重置投影矩阵
        glOrtho( 0.0f, 1.0f, 0.0f, 1.0f,-1.0f, 1.0f);
        gluPerspective(45.0f,(GLfloat)screenwidth/(GLfloat)screenheight,0.1f,100.0f);        // 设置视口的大小
        glMatrixMode(GL_MODELVIEW);                                                // 选择模型观察矩阵
        glLoadIdentity();    // 重置模型观察矩阵
        return TRUE;                                                                        // 初始化 OK
}

void display(void)                                                                        //在这里绘制图形
{
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
        glPushMatrix();

        char str[30];
        char c;               
        GLint i=0,j=0,aa;
        GLfloat xx = -4.0, yy = 2.0;

        ifstream infile("f1.txt");
        xx=-4.0f;
        int flag=1;
        for(;infile.get(c);)
        {
                glRasterPos2f(xx, yy);
                aa = (GLint)c;
                glutBitmapCharacter( GLUT_BITMAP_HELVETICA_18, aa);               
                for( j=0; j<50; j++)
                {
                        infile.get(c);
                        aa = (GLint)c;
                        glutBitmapCharacter( GLUT_BITMAP_HELVETICA_18, aa);
                        //cout<<aa<<endl;
                        //if(aa<48 || aa>59)yy-=0.4;
                }               
                yy -= 0.4;
                //c='\n';aa=(GLint)c;cout<<aa<<endl;
        }
        infile.close();

        glPopMatrix();
        glutSwapBuffers();
}

int main(int argc, char** argv)
{
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
        glutInitWindowSize(600, 600);
        glutInitWindowPosition(220, 0);
        glutCreateWindow(" P & C ");
        init();
        SetCamera(0.0,0.0);
        glutReshapeFunc(Reshape);
        //glutKeyboardFunc(Keyboard);
        //glutMouseFunc(Mouse);
        //glutPassiveMotionFunc(OnMouseMove);                                //设置各种消息处理函数
        glutDisplayFunc(display);
        glutIdleFunc( display );
        glutMainLoop();
        return 0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-18 19:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表