|
最近在写一个作业~
不知天高地厚的选了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;
} |
|