用opengl画一个带光照的茶壶并且能够用键盘平移旋转和缩放,给出完整源代码
时间: 2023-06-12 12:08:14 浏览: 63
下面是一个使用OpenGL绘制一个带光照的茶壶的示例代码,包括平移、旋转和缩放功能。你可以使用键盘上的箭头键来控制场景的移动,使用“+”和“-”键来缩放茶壶,以及使用“w”、“a”、“s”和“d”键来旋转场景。
```c++
#include <GL/glut.h>
#include <cmath>
#include <iostream>
using namespace std;
// 全局变量
GLfloat light_diffuse[] = {0.5, 0.5, 0.5, 1.0}; // 漫反射光颜色
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; // 光源位置
GLfloat theta[] = {0.0, 0.0, 0.0}; // 三个旋转角度
GLfloat scale = 1.0; // 缩放比例
GLfloat translate[] = {0.0, 0.0, 0.0}; // 平移量
// 顶点数组
GLfloat vertices[126][3] = {
{0.2, 0.0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7},
{0.0, -0.2, 2.7}, {1.3375, 0.0, 2.53125}, {1.3375, -0.749, 2.53125},
{0.749, -1.3375, 2.53125}, {-0.0, -1.3375, 2.53125}, {1.4375, 0.0, 2.53125},
{1.4375, -0.805, 2.53125}, {0.805, -1.4375, 2.53125}, {-0.0, -1.4375, 2.53125},
{1.5, 0.0, 2.4}, {1.5, -0.84, 2.4}, {0.84, -1.5, 2.4},
{-0.0, -1.5, 2.4}, {1.75, 0.0, 1.875}, {1.75, -0.98, 1.875},
{0.98, -1.75, 1.875}, {-0.0, -1.75, 1.875}, {2.0, 0.0, 1.35},
{2.0, -1.12, 1.35}, {1.12, -2.0, 1.35}, {-0.0, -2.0, 1.35},
{2.0, 0.0, 0.9}, {2.0, -1.12, 0.9}, {1.12, -2.0, 0.9},
{-0.0, -2.0, 0.9}, {-0.784, -1.4, 2.4}, {-0.784, -0.0, 2.4},
{-1.4, -0.784, 2.4}, {-1.4, -0.0, 2.4}, {-0.28, -1.4, 2.53125},
{-0.28, -0.0, 2.53125}, {-0.5, -0.28, 2.53125}, {-0.5, -0.0, 2.53125},
{-0.56, -1.4, 2.4}, {-0.56, -0.0, 2.4}, {-1.4, -0.56, 2.4},
{-1.4, -0.0, 2.4}, {-1.3375, -0.749, 2.53125}, {-1.3375, -0.0, 2.53125},
{-0.749, -1.3375, 2.53125}, {-0.749, -0.0, 2.53125}, {-1.4375, -0.805, 2.53125},
{-1.4375, -0.0, 2.53125}, {-0.805, -1.4375, 2.53125}, {-0.805, -0.0, 2.53125},
{-1.5, -0.84, 2.4}, {-1.5, -0.0, 2.4}, {-0.84, -1.5, 2.4},
{-0.84, -0.0, 2.4}, {-1.75, -0.98, 1.875}, {-1.75, -0.0, 1.875},
{-0.98, -1.75, 1.875}, {-0.98, -0.0, 1.875}, {-2.0, -1.12, 1.35},
{-2.0, -0.0, 1.35}, {-1.12, -2.0, 1.35}, {-1.12, -0.0, 1.35},
{-2.0, -1.12, 0.9}, {-2.0, -0.0, 0.9}, {-1.12, -2.0, 0.9},
{-1.12, -0.0, 0.9}, {-2.0, 0.0, 0.45}, {-2.0, -1.12, 0.45},
{-1.12, -2.0, 0.45}, {-0.0, -2.0, 0.45}, {-0.0, -1.12, 0.45},
{-2.0, 0.0, 0.0}, {-2.0, -1.12, 0.0}, {-1.12, -2.0, 0.0},
{-0.0, -2.0, 0.0}, {-0.0, -1.12, 0.0}, {0.784, -1.4, 2.4},
{0.784, -0.0, 2.4}, {1.4, -0.784, 2.4}, {1.4, -0.0, 2.4},
{0.28, -1.4, 2.53125}, {0.28, -0.0, 2.53125}, {0.5, -0.28, 2.53125},
{0.5, -0.0, 2.53125}, {0.56, -1.4, 2.4}, {0.56, -0.0, 2.4},
{1.4, -0.56, 2.4}, {1.4, -0.0, 2.4}, {1.3375, -0.749, 2.53125},
{1.3375, -0.0, 2.53125}, {0.749, -1.3375, 2.53125}, {0.749, -0.0, 2.53125},
{1.4375, -0.805, 2.53125}, {1.4375, -0.0, 2.53125}, {0.805, -1.4375, 2.53125},
{0.805, -0.0, 2.53125}, {1.5, -0.84, 2.4}, {1.5, -0.0, 2.4},
{0.84, -1.5, 2.4}, {0.84, -0.0, 2.4}, {1.75, -0.98, 1.875},
{1.75, -0.0, 1.875}, {0.98, -1.75, 1.875}, {0.98, -0.0, 1.875},
{2.0, -1.12, 1.35}, {2.0, -0.0, 1.35}, {1.12, -2.0, 1.35},
{1.12, -0.0, 1.35}, {2.0, -1.12, 0.9}, {2.0, -0.0, 0.9},
{1.12, -2.0, 0.9}, {1.12, -0.0, 0.9}, {-2.0, 1.12, 0.45},
{-1.12, 2.0, 0.45}, {-0.0, 2.0, 0.45}, {-0.0, 1.12, 0.45},
{-1.5, 0.84, 2.4}, {-0.84, 1.5, 2.4}, {-1.75, 0.98, 1.875},
{-0.98, 1.75, 1.875}, {-2.0, 1.12, 0.9}, {-1.12, 2.0, 0.9},
{-0.0, 2.0, 0.9}, {-0.0, 1.12, 0.9}, {-1.5, 0.84, 2.4},
{-0.84, 1.5, 2.4}, {-1.75, 0.98, 1.875}, {-0.98, 1.75, 1.875},
{-1.12, 0.0, 0.45}, {-2.0, 0.0, 0.0}, {-2.0, 1.12, 0.0},
{-1.12, 2.0, 0.0}, {-0.0, 2.0, 0.0}, {-0.0, 1.12, 0.0},
{-0.784, 1.4, 2.4}, {-1.4, 0.784, 2.4}, {-0.28, 1.4, 2.53125},
{-0.5, 0.28, 2.53125}, {-0.56, 1.4, 2.4}, {-1.4, 0.56, 2.4},
{-0.0, 1.4, 2.53125}, {-0.0, 0.5, 2.53125}, {-1.5, 0.84, -2.4},
{-0.84, 1.5, -2.4}, {-1.75, 0.98, -1.875}, {-0.98, 1.75, -1.875},
{-1.12, 0.0, -0.45}, {-2.0, 1.12, -0.45}, {-1.12, 2.0, -0.45},
{-0.0, 2.0, -0.45}, {-0.0, 1.12, -0.45}, {-2.0, 0.0, -0.9},
{-2.0, 1.12, -0.9}, {-1.12, 2.0, -0.9}, {-0.0, 2.0, -0.9},
{-0.0, 1.12, -0.9}, {-1.5, 0.84, -2.4}, {-0.84, 1.5, -2.4},
{-1.75, 0.98, -1.875}, {-0.98, 1.75, -1.875}, {-1.5, -0.84, -2.4},
{-0.84, -1.5, -2.4}, {-1.75, -0.98, -1.875}, {-0.98, -1.75, -1.875},
{-1.12, -0.0, -0.45}, {-1.12, -2.0, -0.45}, {-0.0, -2.0, -0.45},
{-0.0, -1.12, -0.45}, {-0.84, -1.5, -2.4}, {-1.5, -0.84, -2.4},
{-0.98, -1.75, -1.875}, {-1.75, -0.98, -1.875}, {-0.98, -1.75, -0.9},
{-2.0, -1.12, -0.9}, {-1.12, -2.0, -0.9}, {-0.0, -2.0, -0.9},
{-0.0, -1.12, -0.9}, {-1.5, -0.84, -2.4}, {-0.84, -1.5, -2.4},
{-1.75, -0.98, -1.875}, {-0.98, -1.75, -1.875}, {-2.0, -1.12, -0.45},
{-1.12, -2.0, -0.45}, {-0.0, -2.0, -0.45}, {-0.0, -1.12, -0.45},
{-1.5, 0.84, -2.4}, {-0.84, 1.5, -2.4}, {-1.75, 0.98, -1.875},
{-0.98, 1.75, -1.875}, {0.784, 1.4, 2.4}, {1.4, 0.784, 2.4},
{0.28, 1.4, 2.53125}, {0.5, 0.28, 2.53125}, {1.5, 0.84, 2.4},
{0.84, 1.5, 2.4}, {1.75, 0.98, 1.875}, {0.98, 1.75, 1.875},
{1.12, 0.0, 0.45}, {1.12, 2.0, 0.45}, {0.0, 2.0, 0.45},
{0.0, 1.12, 0.45}, {0.56, 1.4, 2.4}, {1.4, 0.56, 2.4},
{0.0, 1.4, 2.53125}, {0.0, 0.5, 2.53125}, {0.56, 1.4, -2.4},
{1.4, 0.56, -2.4}, {0.0, 1.4, -2.53125}, {0.0, 0.5, -2.53125},
{0.84, 1.5, -2.4}, {1.5, 0.84, -2.4}, {0.98, 1.75, -1.875},
{1.75, 0.98, -1.875}, {1.12, 2.0, -0.45}, {1.12, 0.0, -0.45},
{0.0, 0.0, -0.45}, {0.0, 1.12, -0.45}, {1.12, 2.0, -0.9},
{2.0, 1.12, -0.9}, {1.12, 0.0, -0.9}, {0.0, 0.0, -0.9},
{0.0, 1.12, -0.9}, {0.84, 1.5, -2.4}, {1.5, 0.84, -2.4},
{0.98, 1.75, -1.875}, {1.75, 0.98, -1.875}, {1.5, -0.84, -2.4},
{0.84, -1.5, -2.4}, {1.75, -0.98, -1.875}, {0.98, -1.75, -1.875},
{1.12, -2.0, -0.45}, {1.12, -0.0, -0.45}, {0.0, -0.0, -0.45},
{0.0, -1.12, -0.45}, {1.5, -0.84, -2.4}, {0.84, -1.5, -2.4},
{1.75, -0.98, -1.875}, {0.98, -1.75, -1.875}, {2.0, -