为了能使Z轴即能在垂直方向运动,又能在水平方向运动,则需要两个数组来保存水平方向和垂直方向的Z坐标值。然后Z坐标为这两个坐标值的合成:
const int row = 45;
const int column = 45;
const float width= 9.0f;
const float height = 9.0f;
float coord[row][column][3]; // Flag的坐标
float hzcoord[row][column]; // Flag的Z坐标水平分量
float vzcoord[column][row]; // Flag的Z坐标垂直分量
//计算Z坐标的水平分量
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
hzcoord[i][j] = sin((float)j / (float)column * 360 * 3.1415 / 180);
}
}
//计算Z坐标的垂直分量
for (int i = 0; i < column; i++) {
for (int j = 0; j < row; j++) {
vzcoord[i][j] = sin((float)j / (float)column * 360 * 3.1415 / 180);
}
}
float disx = width / column;
float disy = height /row;
//计算每个点的坐标
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
coord[i][j][0] = j * disx - width / 2.0;
coord[i][j][1] = i * disy - height / 2.0;
coord[i][j][2] = hzcoord[i][j] + vzoord[j][i];
}
}
上面已经完成初始化每个点的坐标,下面就到了动态的每一帧时Z坐标的传递了:
//水平坐标分量的传递
for (int i = 0; i < row; i++) {
float hold = hzcoord[i][0];
for (int j = 0; j < column - 1; j++) {
hzcoord[i][j] = hzcoord[i][j+1];
}
hzcoord[i][column-1] = hold;
}
//垂直坐标分量的传递
for (int i = 0; i < column; i++) {
float hold = vzcoord[i][0];
for (int j = 0; j < row - 1; j++) {
vzcoord[i][j] = vzcoord[i][j+1];
}
vzcoord[i][row-1] = hold;
}
//每一帧时要计算的每个点的坐标
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
//X与Y坐标我们不用去变换,因为只考虑了Z坐标的变化
//coord[i][j][0] = j * disx - width / 2.0;
//coord[i][j][1] = i * disy - height / 2.0;
coord[i][j][2] = hzcoord[i][j] + vzoord[j][i];
}
}