[迁移]opengl学习从头开始(笔记18 蒙版)

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

/**
    这里使用到的是opengl 和 glut 进行编写学习的笔记,一个简单的出口
    使用到的开发库有 linux (gl glu glut) windows(opengl32.lib glu32.lib glut32.lib)

    这里是参考 nehe 第26课,资源也是那里

    实现:  蒙版缓存
        镜面的效果....

        假设我们要实现一个镜面的效果,我们在镜子前面放一个球体,能在镜子里
            面看到这个球

        实现:    
            我们绘制一个平面当作镜子,两边绘制同样的球,
            镜子后面的球体和镜子里面的进行混合,ok 程序完成,
            尝试移动球体看下,发现,
            镜子后面的球体被看到了,怎么办?

        修改1:
            我们加个蒙版把镜子里面的屏蔽掉,ok 镜子里面的的没有了,新的问题又来了,
            当镜子外面的球体穿过镜子的时候,本来在镜子里面的球体又出来了,
            怎么办?
            
        修改2:
            我们加一个裁剪面,把镜子后面的如果超过镜子的画直接裁剪掉,ok
            基本完成.


        

*/

#include <iostream>
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>

#ifdef _MSC_VER

#endif

#ifdef __GNUC__
#include <unistd.h>
#endif

using namespace std;

// 图片的类型 包含宽 高 数据
struct Image
{
    unsigned long sizeX;
    unsigned long sizeY;
    char *data;
};
typedef struct Image Image;

// 我们用来旋转下模型吧
float g_angle = 0;
float g_zoom = -7.0f;
float g_height = 0.5f;

GLuint g_walltex;        // 墙的纹理
GLuint g_spheretex;        // 球体的纹理
GLuint g_envtex;        // 
GLUquadricObj *q;


// 下面是读取自定义格式的模型信息文件使用的函数


//----------------------------------------------------------
// 读取图片文件
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)
    {
        printf("Error reading height from %s. 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值