[迁移]opengl学习从头开始(笔记10 飘动的旗子)

声明:因网易博客将关闭,移到此

这里是对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)) !
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值