24,860
社区成员




#include <glut.h>
#include <Windows.h>
void display(void);
void idle(void);
void reshap(int w, int h);
void keyf(unsigned int key, int x, int y);
BITMAP GetBmp(LPCTSTR title)
{
static HBITMAP hbmp = 0;
hbmp = (HBITMAP)::LoadImage(GetModuleHandle(0), title, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
static BITMAP bmp = { 0 };
GetObject(hbmp, sizeof(BITMAP), &bmp);
return bmp;
}
void display(void)
{
static int t = 0;//防止多次申请纹理内存
glColor3f(0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
static BITMAP bmp = GetBmp(L"G:/lushi/DLY_0.bmp");
static GLuint texid;
if (t == 0)
{
glGenTextures(1, &texid);
glBindTexture(GL_TEXTURE_2D, texid);
glTexImage2D(GL_TEXTURE_2D, 0, 3, bmp.bmWidth, bmp.bmHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bmp.bmBits);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);//这个注释了或者改成GL_REPLACE也没用
}
glEnable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glBindTexture(GL_TEXTURE_2D, texid);
glColor4f(1, 1, 1, 1);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
glTexCoord2f(1, 0); glVertex3f(1, 0, 0);
glTexCoord2f(1, 1); glVertex3f(1, 1, 0);
glTexCoord2f(0, 1); glVertex3f(0, 1, 0);
glEnd();
glDisable(GL_TEXTURE_2D);
glFlush();
t++;
};
void idle(void)
{
display();
glutSwapBuffers();
};
void reshap(int w, int h)
{
static double ratio = 1.0*w / h;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, ratio, 0.1, 1000);
glMatrixMode(GL_MODELVIEW);
glViewport(0, 0, w, h);
gluLookAt(0, 0, 3, 0, 0, -1, 0, 1, 0);
};
void keyf(unsigned char key, int x, int y)
{
if (key == 27)
exit(0);
};
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitWindowPosition(100, 100);
glutInitWindowSize(800, 600);
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
glutCreateWindow("qwer");
glutDisplayFunc(display);
glutIdleFunc(idle);
glutKeyboardFunc(keyf);
glutReshapeFunc(reshap);
glutMainLoop();
return 0;
}