使用背景:
使用codeblocks13.12编译,调用了imageloader.cpp和imageloader.h
代码如下:
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenGL/OpenGL.h>
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include "imageloader.h"
#define G_PI 3.14159265358979323846f
using namespace std;
const float BOX_SIZE = 7.0f; //立方体长度
static double _angle = 0; //立方体自动旋转角度
static double SX=1,SY=1,SZ=1,theta=0,phi=0;
static int du=90,oldmy=-1,oldmx=-1; //du是视点绕y轴的角度,opengl里默认y轴是上方向
static double r=1.5f,h=0.0f; //r是视点绕y轴的半径,h是视点高度即在y轴上的坐标
static double c=G_PI/180.0f; //弧度和角度转换参数
static double ctrlPoints[4][3];
GLuint _textureId; //纹理的OpenGL的ID
GLuint _textureId1; //纹理的OpenGL的ID
GLuint _textureId2; //纹理的OpenGL的ID
//光照控制
void prepare_lighting()
{
theta = fmodf( theta, 2*G_PI );
phi = fmodf( phi, 2*G_PI );
int dis=1;
float light_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
float mat_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
float light_position[4] = { dis*sinf(theta) * cosf(phi), dis*cosf(theta), dis*(-sinf(theta) * sinf(phi)), 0 };
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable( GL_LIGHT0 );
}
//键盘操作
void keyboard(unsigned char key, int x, int y)
{
switch( key )
{
case 'w':
theta -= .05;
prepare_lighting();
glutPostRedisplay();
break;
case 's':
theta += .05;
prepare_lighting();
glutPostRedisplay();
break;
case 'a':
phi -= .05;
prepare_lighting();
glutPostRedisplay();
break;
case 'd':