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

  C++博客 :: 首頁 :: 聯系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 402860
  • 排名 - 59

最新評論

閱讀排行榜

評論排行榜

這一課我們將介紹體積霧,為了運行這個程序,你的顯卡必須支持擴展"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;                               
 
 
 下面的代碼設置霧的顏色和攝像機在Z方向的深度 
 
 

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

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

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

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

PFNGLFOGCOORDFEXTPROC glFogCoordfEXT = NULL;                    // 設置霧坐標函數指針為NULL

GLuint    texture[1];                            // 紋理

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

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

    // 返回擴展字符串
    char* glextstring=(char *)malloc(strlen((char *)glGetString(GL_EXTENSIONS))+1);
    strcpy (glextstring,(char *)glGetString(GL_EXTENSIONS));       

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

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

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

    return TRUE;
}

  
 下面的代碼初始化OpenGL,并設置霧氣的參數。 
  

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

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

    if (!BuildTexture("data/wall.bmp", texture[0]))                // 創建紋理
        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);           
  
 下面的代碼設置霧氣的屬性
最后一個設置為霧氣基于頂點的坐標,這運行我們把霧氣放置在場景中的任意地方。
 
  

    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);        //設置霧氣是基于頂點的坐標的

    camz =    -19.0f;                               

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

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

    glTranslatef(0.0f, 0.0f, camz);                       

  
 下面的代碼繪制四邊形組成的墻,并設置每個頂點的紋理坐標和霧坐標 
  

    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 ();                                                                                                  
}

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

 
 
posted on 2008-01-04 21:18 sdfasdf 閱讀(1797) 評論(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>
            欧美在线综合| 久久婷婷蜜乳一本欲蜜臀| 久久噜噜噜精品国产亚洲综合| 欧美日本在线播放| 亚洲第一精品久久忘忧草社区| av成人免费在线观看| 欧美风情在线观看| 久久一二三国产| 国产色婷婷国产综合在线理论片a| 亚洲在线观看视频| 日韩亚洲欧美在线观看| 欧美日韩国语| 在线亚洲伦理| 亚洲激情社区| 免费一级欧美片在线观看| 在线免费日韩片| 亚洲欧洲一区二区三区在线观看 | 在线激情影院一区| 久久久免费av| 久久精品导航| 欧美在线亚洲综合一区| 亚洲伦伦在线| 亚洲国产一区二区精品专区| 欧美成人激情视频| 99视频在线精品国自产拍免费观看| 亚洲国产黄色| 欧美日韩亚洲系列| 性欧美1819性猛交| 亚洲欧美日韩精品久久久久| 国产专区综合网| 欧美高清在线一区| 欧美精品在线观看| 久久精品日产第一区二区三区| 久久aⅴ国产紧身牛仔裤| 国产日产欧产精品推荐色| 久久久久一区二区三区四区| 久久国产精品免费一区| 日韩一级精品| 亚洲一二三区精品| 久久精品论坛| 99re热这里只有精品免费视频| a4yy欧美一区二区三区| 亚洲大片一区二区三区| 99热在线精品观看| 亚洲电影在线看| 亚洲精品在线看| 欧美日本高清一区| 久久免费视频在线| 欧美日韩一区二区在线观看| 免费成人毛片| 国产精品yjizz| 亚洲综合清纯丝袜自拍| 久久久久久伊人| 一本久道久久久| 久久久99精品免费观看不卡| 一区二区日韩| 欧美一区二区三区的| 日韩一区二区久久| 亚洲欧美日韩一区二区在线 | 久久精品视频免费观看| 亚洲日本中文字幕| 欧美一区亚洲一区| 国产精品99久久久久久白浆小说| 欧美.日韩.国产.一区.二区| 午夜日韩视频| 国产精品稀缺呦系列在线| 亚洲国产综合视频在线观看| 久久久水蜜桃av免费网站| 欧美一区2区三区4区公司二百| 欧美激情免费在线| 亚洲电影激情视频网站| 欧美一级视频免费在线观看| 亚洲字幕一区二区| 亚洲欧美另类中文字幕| 亚洲综合第一| 久久久在线视频| 国产亚洲精品资源在线26u| 狠狠做深爱婷婷久久综合一区| 欧美在线视频一区二区| 中国亚洲黄色| 欧美激情中文字幕在线| 亚洲人体影院| 亚洲国产日韩欧美在线动漫| 一区二区三区精密机械公司| 日韩亚洲欧美成人一区| 久久久久久久国产| 欧美国产精品va在线观看| 精品二区视频| 亚洲高清不卡一区| 欧美精品一级| 欧美1区免费| 亚洲国产精品精华液2区45| 亚洲视频在线观看三级| 亚洲你懂的在线视频| 亚洲国产精品久久精品怡红院| 在线国产日韩| 蜜桃av综合| 鲁大师成人一区二区三区| 激情综合在线| 香蕉久久夜色精品国产使用方法| 欧美一区二区精品在线| 国产午夜精品全部视频播放| 欧美亚洲综合久久| 老色批av在线精品| 亚洲国产免费看| 欧美性猛交xxxx免费看久久久 | 久久精品国产亚洲精品| 欧美jizzhd精品欧美巨大免费| 亚洲精品久久久蜜桃| 欧美一区二区三区免费视频| 欧美日韩另类丝袜其他| 亚洲香蕉网站| 在线亚洲电影| 国产精品影院在线观看| 一本色道久久综合狠狠躁篇的优点| 亚洲视频日本| 国产午夜精品麻豆| 久久蜜桃香蕉精品一区二区三区| 欧美国产日韩a欧美在线观看| 亚洲精品一区在线| 国产精品久久久久毛片软件 | 亚洲字幕一区二区| 国产一区视频在线看| 欧美日本一区二区高清播放视频| 亚洲女同性videos| 久久久久久亚洲精品杨幂换脸 | 久久只有精品| 99一区二区| 精品99一区二区| 一本色道久久| 久久久久九九视频| 亚洲欧美美女| 亚洲国产老妈| 欧美 日韩 国产 一区| 亚洲制服丝袜在线| 日韩图片一区| 精品av久久久久电影| 国产精品丝袜xxxxxxx| 你懂的一区二区| 一本色道久久综合亚洲精品小说| 久久在线观看视频| 在线亚洲免费| 亚洲网站在线观看| 亚洲欧洲免费视频| 亚洲高清视频中文字幕| 国产丝袜美腿一区二区三区| 久久精品国产综合精品| 亚洲视频在线二区| 亚洲欧洲在线一区| 欧美成人午夜免费视在线看片| 亚洲嫩草精品久久| 夜夜狂射影院欧美极品| 一区免费视频| 欧美日韩中文字幕日韩欧美| 蜜桃av一区| 久久久久亚洲综合| 欧美一区二区视频在线| 亚洲综合成人在线| 在线视频欧美日韩精品| 亚洲精品一区在线| 亚洲国产精品久久久久秋霞蜜臀 | 麻豆freexxxx性91精品| 欧美一级视频免费在线观看| 免费日韩av片| 牛牛影视久久网| 欧美一级视频免费在线观看| 99v久久综合狠狠综合久久| 亚洲人成人一区二区三区| 亚洲国内自拍| 欧美午夜在线观看| 亚洲五月六月| 蘑菇福利视频一区播放| 亚洲视频电影在线| 亚洲高清激情| 国产九区一区在线| 久热这里只精品99re8久| 久久久久久一区二区| 久久精品二区三区| 欧美一区二区三区视频在线观看| 性欧美xxxx视频在线观看| 久久精品91久久香蕉加勒比 | 欧美亚洲视频一区二区| 午夜国产精品视频| 久久亚洲综合色一区二区三区| 亚洲一区二区三区影院| 亚洲尤物精选| 亚洲一区二区三区精品在线观看 | 蜜桃av一区| 欧美日韩日本国产亚洲在线| 国产精品大片wwwwww| 国产精品青草久久| 国内精品亚洲| 亚洲三级免费| 亚洲欧美日韩视频二区| 久久精品亚洲国产奇米99| 亚洲欧美日韩一区二区| 麻豆久久婷婷| 日韩午夜激情电影| 欧美一区免费| 欧美另类videos死尸|