#include <GL/glut.h>
#include <windows.h>
#include "bitmap.h"
static GLUquadricObj *pSphere = NULL;
GLfloat spin = 0;
GLfloat spin1 = 0;
#define ImageWidth 64
#define ImageHeight 64
GLubyte Image[ImageWidth][ImageHeight];
GLubyte *bits;
BITMAPINFO *info;
void makeImage(void)
{
int i, j, r,g,b;
for (i = 0; i < ImageWidth; i++)
{
for (j = 0; j < ImageHeight; j++)
{
r=(i*j)%255;
g=(4*i)%255;
b=(4*j)%255;
Image[i][j] = (GLubyte) r;
}
}
}
void reader()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,0.8,0);
glTexImage2D(GL_TEXTURE_2D,0,3,info->bmiHeader.biWidth,info->bmiHeader.biHeight,0,GL_BGR_EXT,GL_UNSIGNED_BYTE,bits);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
glCullFace(GL_BACK);
glEnable(GL_TEXTURE_2D);
glEnable(GL_CULL_FACE);
glFrontFace(GL_CCW);
glLoadIdentity();
glPushMatrix();
glTranslatef(0.0,0.0,-50);
glRotatef(spin,1,0,0);
glRotatef(spin1,0,0,1);
gluSphere(pSphere, 100, 15, 15);
// glBegin(GL_QUADS);
// glColor3ub(255,0,0);
// glTexCoord2f(0.0,0.0);glVertex3f(0,0,0);//前面
// glTexCoord2f(0.0,1.0);glVertex3f(255,0,0);
// glTexCoord2f(1.0,0.0);glVertex3f(255,255,0);
// glTexCoord2f(1.0,1.0);glVertex3f(0,255,0);
//
// glColor3ub(0,255,0);
// glTexCoord2f(0.0,0.0);glVertex3f(0,255,0);//上面
// glTexCoord2f(0.0,1.0);glVertex3f(255,255,0);
// glTexCoord2f(1.0,0.0);glVertex3f(255,255,-255);
// glTexCoord2f(1.0,1.0);glVertex3f(0,255,-255);
//
// glColor3ub(0,0,255);
// glTexCoord2f(0.0,1.0);glVertex3f(255,255,-255);//对面
// glTexCoord2f(1.0,0.0);glVertex3f(255,0,-255);
// glTexCoord2f(1.0,1.0);glVertex3f(0,0,-255);
// glTexCoord2f(0.0,0.0);glVertex3f(0,255,-255);
//
// glColor3ub(255,255,255);
// glTexCoord2f(0.0,1.0);glVertex3f(255,0,0);//下面
// glTexCoord2f(0.0,0.0);glVertex3f(0,0,0);
// glTexCoord2f(1.0,1.0);glVertex3f(0,0,-255);
// glTexCoord2f(1.0,0.0);glVertex3f(255,0,-255);
//
// glColor3ub(0,200,0);
// glTexCoord2f(0.0,0.0);glVertex3f(0,0,-255);
// glTexCoord2f(0.0,1.0);glVertex3f(0,0,0);//左面
// glTexCoord2f(1.0,0.0);glVertex3f(0,255,0);
// glTexCoord2f(1.0,1.0);glVertex3f(0,255,-255);
//
// glColor3ub(255,255,255);
// glTexCoord2f(0.0,0.0);glVertex3f(255,0,0);//右面
// glTexCoord2f(0.0,1.0);glVertex3f(255,0,-255);
// glTexCoord2f(1.0,0.0);glVertex3f(255,255,-255);
// glTexCoord2f(1.0,1.0);glVertex3f(255,255,0);
// glEnd();
glPopMatrix();
glFlush();
}
void shape(int w,int h)
{
if (h == 0)
h = 1;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-500,500,-500,500,-500,500);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void init()
{
glClearColor(0,0,0,0);
glEnable(GL_DEPTH_TEST);
bits = LoadDIBitmap("tt.bmp",&info);
pSphere = gluNewQuadric();
gluQuadricDrawStyle(pSphere, GLU_FILL);
gluQuadricNormals(pSphere, GLU_NONE);
gluQuadricTexture(pSphere, GLU_TRUE);
makeImage();
}
void mouse(int key,int x,int y)
{
if (key == GLUT_KEY_LEFT)
spin1 += 10;
else if (key == GLUT_KEY_RIGHT)
spin1 -= 10;
else if (key == GLUT_KEY_UP)
spin += 10;
else if (key == GLUT_KEY_DOWN)
spin -= 10;
glutPostRedisplay();
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(200,200);
glutCreateWindow("my opengl");
glutDisplayFunc(reader);
glutReshapeFunc(shape);
glutSpecialFunc(mouse);
init();
glutMainLoop();
return 0;
}