青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

  C++博客 :: 首頁 :: 聯(lián)系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團(tuán)隊(duì)

搜索

  •  

積分與排名

  • 積分 - 402387
  • 排名 - 59

最新評論

閱讀排行榜

評論排行榜

這一課我們將介紹體積霧,為了運(yùn)行這個(gè)程序,你的顯卡必須支持?jǐn)U展"GL_EXT_fot_coord"。

#include <windows.h>                               
#include <gl\gl.h>                           
#include <gl\glu.h>                               
#include <math.h>                               

#include "NeHeGL.h"                           

#pragma comment( lib, "opengl32.lib" )                       
#pragma comment( lib, "glu32.lib" )                   

GL_Window*    g_window;                       
Keys*        g_keys;                               
 
 
 下面的代碼設(shè)置霧的顏色和攝像機(jī)在Z方向的深度 
 
 

GLfloat    fogColor[4] = {0.6f, 0.3f, 0.0f, 1.0f};                    // 霧的顏色
GLfloat camz;                                    // 攝像機(jī)在Z方向的深度

  
 下面變量GL_FOG_COORDINATE_SOURCE_EXT和GL_FOG_COORDINATE_EXT具有初值,他們在glext.h文件中被定義,這里我們必須感謝Lev Povalahev,它創(chuàng)建了這個(gè)文件。如果你想編譯你的代碼,你必須設(shè)置這個(gè)值。
為了使用glFogCoordfExt,我們需要定義這個(gè)函數(shù)的指針,并在程序運(yùn)行時(shí)把它指向顯卡中的函數(shù)。
 
  

// 使用FogCoordfEXT它需要的變量
#define GL_FOG_COORDINATE_SOURCE_EXT    0x8450                    // 從GLEXT.H得到的值
#define GL_FOG_COORDINATE_EXT        0x8451                   

typedef void (APIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord);        // 聲明霧坐標(biāo)函數(shù)的原形

PFNGLFOGCOORDFEXTPROC glFogCoordfEXT = NULL;                    // 設(shè)置霧坐標(biāo)函數(shù)指針為NULL

GLuint    texture[1];                            // 紋理

  
 Nehe的原文介紹了Ipicture的接口,它不是我們這一課的重點(diǎn),故我還是使用以前的方法加載紋理。 
  
  
 下面的代碼用來檢測用戶的顯卡是否支持EXT_fog_coord擴(kuò)展,這段代碼只有在你獲得OpenGL渲染描述表后才能調(diào)用,否則你將獲得一個(gè)錯(cuò)誤。
首先,我們創(chuàng)建一個(gè)字符串,來描述我們需要的擴(kuò)展。接著我們分配一塊內(nèi)存,用來保存顯卡支持的擴(kuò)展,它可以通過glGetString函數(shù)獲得。接著我們檢測是否含有需要的擴(kuò)展,如果不存在,則返回false,如存在我們把函數(shù)的指針指向這個(gè)擴(kuò)展。 
  

int Extension_Init()
{
    char Extension_Name[] = "EXT_fog_coord";

    // 返回?cái)U(kuò)展字符串
    char* glextstring=(char *)malloc(strlen((char *)glGetString(GL_EXTENSIONS))+1);
    strcpy (glextstring,(char *)glGetString(GL_EXTENSIONS));       

    if (!strstr(glextstring,Extension_Name))                // 查找是否有我們想要的擴(kuò)展
        return FALSE;                           

    free(glextstring);                            // 釋放分配的內(nèi)存

    // 獲得函數(shù)的指針
    glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC) wglGetProcAddress("glFogCoordfEXT");

    return TRUE;
}

  
 下面的代碼初始化OpenGL,并設(shè)置霧氣的參數(shù)。 
  

BOOL Initialize (GL_Window* window, Keys* keys)                    //初始化
{
    g_window    = window;                       
    g_keys        = keys;                           

    // 初始化擴(kuò)展
    if (!Extension_Init())                           
        return FALSE;                           

    if (!BuildTexture("data/wall.bmp", texture[0]))                // 創(chuàng)建紋理
        return FALSE;                           

    glEnable(GL_TEXTURE_2D);                       
    glClearColor (0.0f, 0.0f, 0.0f, 0.5f);                   
    glClearDepth (1.0f);                           
    glDepthFunc (GL_LEQUAL);                       
    glEnable (GL_DEPTH_TEST);                       
    glShadeModel (GL_SMOOTH);                       
    glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);           
  
 下面的代碼設(shè)置霧氣的屬性
最后一個(gè)設(shè)置為霧氣基于頂點(diǎn)的坐標(biāo),這運(yùn)行我們把霧氣放置在場景中的任意地方。
 
  

    glEnable(GL_FOG);                           
    glFogi(GL_FOG_MODE, GL_LINEAR);                       
    glFogfv(GL_FOG_COLOR, fogColor);                   
    glFogf(GL_FOG_START,  1.0f);                       
    glFogf(GL_FOG_END,    0.0f);                       
    glHint(GL_FOG_HINT, GL_NICEST);                       
    glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);        //設(shè)置霧氣是基于頂點(diǎn)的坐標(biāo)的

    camz =    -19.0f;                               

    return TRUE;                           
}
  
 下面的代碼繪制具體的場景 
  

void Draw (void)
{
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);           
    glLoadIdentity ();                           

    glTranslatef(0.0f, 0.0f, camz);                       

  
 下面的代碼繪制四邊形組成的墻,并設(shè)置每個(gè)頂點(diǎn)的紋理坐標(biāo)和霧坐標(biāo) 
  

    glBegin(GL_QUADS);                            //后墻
         glFogCoordfEXT(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.5f,-2.5f,-15.0f);
        glFogCoordfEXT(0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 2.5f,-2.5f,-15.0f);
        glFogCoordfEXT(0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 2.5f, 2.5f,-15.0f);
        glFogCoordfEXT(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-2.5f, 2.5f,-15.0f);
    glEnd();

    glBegin(GL_QUADS);                            // 地面
         glFogCoordfEXT(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.5f,-2.5f,-15.0f);
        glFogCoordfEXT(0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 2.5f,-2.5f,-15.0f);
        glFogCoordfEXT(1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 2.5f,-2.5f, 15.0f);
        glFogCoordfEXT(1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-2.5f,-2.5f, 15.0f);
    glEnd();

    glBegin(GL_QUADS);                            // 天花板
        glFogCoordfEXT(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.5f, 2.5f,-15.0f);
        glFogCoordfEXT(0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 2.5f, 2.5f,-15.0f);
        glFogCoordfEXT(1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 2.5f, 2.5f, 15.0f);
        glFogCoordfEXT(1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-2.5f, 2.5f, 15.0f);
    glEnd();

    glBegin(GL_QUADS);                            // 右墻
        glFogCoordfEXT(1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 2.5f,-2.5f, 15.0f);
        glFogCoordfEXT(1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 2.5f, 2.5f, 15.0f);
        glFogCoordfEXT(0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 2.5f, 2.5f,-15.0f);
        glFogCoordfEXT(0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 2.5f,-2.5f,-15.0f);
    glEnd();

    glBegin(GL_QUADS);                            // 左墻
         glFogCoordfEXT(1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.5f,-2.5f, 15.0f);
        glFogCoordfEXT(1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-2.5f, 2.5f, 15.0f);
        glFogCoordfEXT(0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-2.5f, 2.5f,-15.0f);
        glFogCoordfEXT(0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-2.5f,-2.5f,-15.0f);
    glEnd();

    glFlush ();                                                                                                  
}

  
 希望你喜歡這一課,如果你愿意的話創(chuàng)建更漂亮的體積霧吧。

 
 
posted on 2008-01-04 21:18 sdfasdf 閱讀(1795) 評論(0)  編輯 收藏 引用 所屬分類: OPENGL
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久久久久久久久三级| 亚洲二区免费| 亚洲国产99| 亚洲丰满在线| 亚洲激情网站免费观看| 91久久在线播放| 一本色道精品久久一区二区三区| 宅男精品视频| 欧美一级二级三级蜜桃| 久久免费视频在线观看| 蜜桃av一区二区| 日韩一区二区久久| 欧美一区二区在线免费播放| 狼人社综合社区| 欧美精品一区二区在线观看| 国产精品亚洲аv天堂网| 国产有码一区二区| 亚洲精品婷婷| 久久精品免费电影| 91久久精品一区二区别| 亚洲一二三区在线| 久久久亚洲国产美女国产盗摄| 欧美国产日韩二区| 国产欧美日韩免费| 亚洲人成人一区二区三区| 亚洲欧美视频在线观看视频| 久久综合伊人| 一区二区三区四区蜜桃| 久久一日本道色综合久久| 欧美日韩亚洲天堂| 韩国一区二区三区在线观看 | 国产日韩欧美三区| 91久久国产综合久久| 日韩视频在线永久播放| 久久亚洲综合色一区二区三区| 久久大逼视频| 亚洲美女av在线播放| 久久精品国产精品| 欧美性一区二区| 亚洲丶国产丶欧美一区二区三区| 西瓜成人精品人成网站| 亚洲精品国产品国语在线app| 欧美一区二区三区精品电影| 欧美日韩亚洲一区二区三区四区 | 伊人激情综合| 久久精品成人一区二区三区| 一个色综合av| 欧美日韩国产色站一区二区三区| ●精品国产综合乱码久久久久| 午夜久久影院| 中文av一区二区| 欧美视频免费在线| 中文网丁香综合网| 日韩亚洲一区二区| 欧美激情一区二区三区在线视频| 亚洲丶国产丶欧美一区二区三区| 久久在精品线影院精品国产| 亚洲欧美日韩在线| 国产日本欧美一区二区三区| 午夜精品福利电影| 亚洲一区二区三区777| 欧美午夜精品久久久久久久| 中日韩美女免费视频网址在线观看 | 国内成+人亚洲| 久久精品论坛| 久久精品人人做人人爽电影蜜月| 国产无遮挡一区二区三区毛片日本| 欧美一区二区三区免费看| 亚洲在线观看视频| 国产一区二区三区的电影 | 亚洲人成人一区二区三区| 免费影视亚洲| 一区二区三区视频在线播放| 日韩亚洲欧美综合| 国产精品呻吟| 你懂的视频一区二区| 欧美成人免费在线| 中文欧美字幕免费| 午夜免费久久久久| 亚洲电影免费在线| 在线成人av.com| 亚洲精品美女| 亚洲另类黄色| 国产精品青草综合久久久久99 | 亚洲第一精品夜夜躁人人爽| 欧美精品激情在线观看| 亚洲制服av| 久久精品国产99| 99综合在线| 午夜精品一区二区三区在线视| 国色天香一区二区| 亚洲三级毛片| 国产一区二区三区自拍| 亚洲高清一区二区三区| 国产精品久久久久久影院8一贰佰| 久久久久久久久久久久久久一区| 老司机精品福利视频| 亚洲伊人伊色伊影伊综合网| 久久久之久亚州精品露出| 中国成人黄色视屏| 久久久久国内| 午夜久久久久久| 欧美精品性视频| 久久精品国内一区二区三区| 欧美激情一区二区三区高清视频| 欧美中文字幕在线| 欧美日韩精品久久久| 久久亚洲国产精品日日av夜夜| 欧美日韩精品欧美日韩精品 | 影音先锋另类| 亚洲嫩草精品久久| 99re6这里只有精品| 久久九九99视频| 欧美一级专区| 欧美视频一区| 亚洲精品色图| 亚洲乱码国产乱码精品精可以看| 欧美一级专区| 欧美一区二区三区的| 欧美日韩精品一区二区在线播放 | 欧美在线网站| 亚洲欧美日本精品| 欧美激情一区二区三区高清视频 | 亚洲精品免费网站| 亚洲国产一区二区a毛片| 欧美一级午夜免费电影| 亚洲欧美国产毛片在线| 欧美精品一区在线观看| 欧美激情五月| 一区免费观看| 欧美一区二区三区久久精品| 亚洲精品久久7777| 伊人久久大香线蕉综合热线| 欧美亚洲在线视频| 欧美一区亚洲| 国产欧美精品在线观看| 一级日韩一区在线观看| 一本色道久久综合亚洲精品按摩| 久久久精品国产免费观看同学| 欧美亚洲一区| 国产日产欧美一区| 亚洲欧美综合| 久久亚洲风情| 亚洲大胆人体在线| 免费观看国产成人| 亚洲人成7777| 亚洲线精品一区二区三区八戒| 欧美aⅴ99久久黑人专区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲精品中文字幕在线观看| 亚洲最新合集| 欧美视频一区在线| 亚洲自拍偷拍麻豆| 久久久久久91香蕉国产| 在线观看视频一区二区| 欧美黄色免费网站| 一区二区欧美激情| 久久久精品日韩欧美| 精品电影一区| 欧美人与性动交cc0o| 一二三区精品福利视频| 久久久久九九九| 亚洲人被黑人高潮完整版| 欧美三级资源在线| 午夜一区二区三区在线观看| 免费观看一区| 亚洲激情第一区| 欧美午夜一区二区三区免费大片 | 亚洲一区成人| 国内综合精品午夜久久资源| 欧美福利在线| 亚洲欧美一区二区三区在线| 免费高清在线一区| 亚洲一区二区三区四区中文| 国产精品欧美精品| 老鸭窝亚洲一区二区三区| 日韩亚洲一区在线播放| 久久久久久夜| 亚洲淫片在线视频| 伊人成综合网伊人222| 欧美日韩一二三区| 久久久人成影片一区二区三区 | 99精品国产在热久久| 国产色综合网| 欧美日本免费一区二区三区| 久久精品30| 一区二区三区欧美视频| 欧美99久久| 久久国产88| 亚洲综合日韩在线| 亚洲精品欧美极品| 国产欧美一区二区精品婷婷| 欧美高清视频在线 | 在线一区欧美| 韩国三级电影久久久久久| 欧美日产一区二区三区在线观看| 午夜欧美大尺度福利影院在线看| 亚洲人成网站在线播| 美日韩在线观看| 久久久精品五月天|