声明:因网易博客将关闭,移到此
这里是对NeHe 第11 课进行了一些解释,
变化不是很大,直接看源代码吧,可能有一些地方需要自己去看了才会想到一些问题,OK不多说:)
需要一张bmp图片命名glass.bmp放在可执行程序目录
/**
这里使用到的是opengl 和 glut 进行编写学习的笔记,一个简单的出口
使用到的开发库有 linux (gl glu glut) windows(opengl32.lib glu32.lib glut32.lib)
实现:
这个是飘动的旗帜,思考一下如何实现
那么飘动的旗帜首先就需要把它分解成很多的矩形,
飘动起来的话看起来有些像正弦曲线,
基本我们已经思考完,那么下来是飘动的控制,
1.我们使用2维数组来存储定点
2.我们使用正弦公式来计算横向排列的每个顶点的z坐标,使得看起来有点前后飘动
3.飘动起来,从左到右,我们依次把顶点z依次进行赋值,把最左边的给最右边ok
例子:
问题:
*/
#include <iostream>
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#ifdef _MSC_VER
#endif
#ifdef __GNUC__
#include <unistd.h>
#endif
using namespace std;
// 顶点信息
struct VertexInfo
{
float x,y,z,u,v;
};
// 我们沿着x,y方向分割这个旗子的平面
const int g_sx = 45;
const int g_sy = 45;
VertexInfo g_Points[g_sx][g_sy];
// 使用一张贴图
GLuint texture;
// 图片的类型 包含宽 高 数据
struct Image
{
unsigned long sizeX;
unsigned long sizeY;
char *data;
};
typedef struct Image Image;
// 我们用来旋转下模型吧
float g_angle = 0;
// 下面是读取自定义格式的模型信息文件使用的函数
//----------------------------------------------------------
// 读取图片文件
int ImageLoad(const char *filename, Image *image)
{
FILE *file;
unsigned long size; // 图片长度
unsigned long i; // 计数
unsigned short int planes;
unsigned short int bpp;
char temp; // bgr -rgb 变换
if ((file = fopen(filename, "rb")) == NULL)
{
printf("File Not Found: %s\n", filename);
return 0;
}
// 跳过文件的头部,准备读取宽度和高度
// 如果想自己具体的情况可以去看看bmp图片的相关信息
fseek(file, 18, SEEK_CUR);
// 读取宽度
if ((i = fread(&image->sizeX, 4, 1, file)) != 1)
{
printf("Error reading width from %s. \n", filename);
return 0;
}
printf("Width of %s: %lu\n", filename, image->sizeX);
// 读取宽度
if ((i = fread(&image->sizeY, 4, 1, file)) !