1.自定义数据结构
typedef struct tagSECTOR // 创建Sector区段结构
{
int numtriangles; // Sector中的三角形个数
TRIANGLE* triangle; // 指向三角数组的指针
} SECTOR; // 命名为SECTOR
一个sector(区段)包含了一系列的多边形,所以下一个目标就是triangle(我们将只用三角形,这样写代码更容易些)。
typedef struct tagTRIANGLE // 创建Triangle三角形结构
{
VERTEX vertex[3]; // VERTEX矢量数组,大小为3
} TRIANGLE; // 命名为 TRIANGLE
三角形本质上是由一些(两个以上)顶点组成的多边形,顶点同时也是我们的最基本的分类单位。顶点包含了OpenGL真正感兴趣的数据。我们用3D空间中的坐标值(x, y, z)以及它们的纹理坐标(u, v)来定义三角形的每个顶点。
typedef struct tagVERTEX // 创建Vertex顶点结构
{
float x, y, z; // 3D坐标
float u, v; // 纹理坐标
} VERTEX; // 命名为VERTEX
2.模拟行走头部摆幅
人在行走的时候头的摆动幅度walkbias可以通过以下代码模拟:
if (walkbiasangle <=
{
walkbiasangle =
}
else
{
walkbiasangle-= 10;
}
walkbias = (float)sin(walkbiasangle * piover180)/
3.文本文件的读取:
//从文件中读取一行有用的数据(非注释行,空行)
void readstr(FILE *f,char *string)
{
do
{
fgets(string, 255, f);//Get a string from a stream
} while ((string[0] == '/') || (string[0] == '\n'));
return;
}
库函数sscanf把读取得文本格式化成指定格式的数据:
int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
readstr(filein,oneline);
sscanf(oneline, "%f %f %f %f %f", &x, &y, &z, &u, &v);
一行的数据:-2.0 1.0 2.0 2.0 1.0//x,y,z,u,v
1. 漫游
通过让场景做出和预订镜头相反方向运动来模拟镜头的运动。参见Lesson 9。