球体贴图的源代码

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值