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

  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>
            欧美午夜不卡视频| 久久久久久久激情视频| 亚洲高清在线观看| 久久视频国产精品免费视频在线| 国产精品视频一二三| 欧美一级午夜免费电影| 亚洲女人小视频在线观看| 国产精品入口福利| 欧美伊人久久大香线蕉综合69| 午夜精品视频在线| 在线精品视频免费观看| 亚洲大片av| 国产精品xvideos88| 欧美一区二区成人| 久久视频在线视频| 一区二区三区国产在线| 亚洲欧美日韩综合aⅴ视频| 欧美成人免费全部| 亚洲一区二区三区在线| 先锋影音久久| 亚洲精选中文字幕| 亚洲资源在线观看| 1204国产成人精品视频| 亚洲精选视频免费看| 国产精品推荐精品| 欧美大片va欧美在线播放| 欧美日韩国产免费| 久久精品毛片| 欧美久久久久久| 久久精品国产久精国产思思| 久久综合婷婷| 欧美一区深夜视频| 欧美高清在线视频观看不卡| 午夜精品久久久久久久久| 久热精品视频| 欧美在线www| 欧美日韩一卡| 欧美www视频在线观看| 国产精品丝袜xxxxxxx| 亚洲成人在线视频网站| 免费亚洲一区二区| 国产精品av免费在线观看| 欧美成人小视频| 国产视频一区欧美| 亚洲视频播放| 亚洲伦理中文字幕| 久久夜色精品国产欧美乱极品 | 久久不射电影网| 午夜激情综合网| 久久久亚洲人| 欧美在线资源| 国产精品爱啪在线线免费观看| 欧美高清视频一区二区| 国语自产在线不卡| 午夜影视日本亚洲欧洲精品| 亚洲性视频网站| 欧美精品在线视频| 亚洲国产精品久久久久| 在线观看视频一区| 欧美在线观看www| 久久成人一区二区| 国产欧美日韩精品在线| 亚洲在线不卡| 先锋资源久久| 国产欧美日韩伦理| 午夜久久一区| 久久久久久久久久码影片| 国产精品自拍在线| 欧美影院一区| 久久尤物视频| 在线观看欧美| 欧美成人精品三级在线观看| 亚洲国产另类精品专区| 亚洲乱码日产精品bd| 欧美精品日韩一区| 一区二区精品在线| 欧美一区二区三区婷婷月色| 国产视频一区在线观看| 久久国产精品久久精品国产| 免费观看日韩av| 亚洲国产婷婷| 欧美日韩免费一区| 亚洲午夜精品久久久久久浪潮| 午夜精品成人在线| 激情亚洲成人| 欧美福利视频| 亚洲一级在线观看| 久久久99免费视频| 91久久综合亚洲鲁鲁五月天| 欧美精品情趣视频| 亚洲男人第一av网站| 免费成人美女女| 亚洲视频精品| 伊人久久av导航| 欧美黄污视频| 欧美亚洲日本网站| 欧美国产免费| 亚洲欧美日韩在线一区| 永久久久久久| 欧美三级视频在线播放| 欧美在线一级va免费观看| 欧美激情第10页| 亚洲欧美视频在线观看| 亚洲福利国产精品| 国产精品毛片在线看| 久久久久久久久久久久久女国产乱| 亚洲国产精品久久91精品| 亚洲欧美日韩一区二区| 亚洲国产影院| 国产亚洲二区| 欧美日韩中文字幕| 美女图片一区二区| 亚洲尤物视频网| 欧美高清视频一区二区| 久久国产99| 亚洲视频导航| 亚洲免费高清视频| 一区在线观看| 国产麻豆精品视频| 欧美色图五月天| 欧美成人精品影院| 久久av一区二区三区漫画| 中文久久乱码一区二区| 亚洲国产一成人久久精品| 老司机精品视频网站| 欧美亚洲视频一区二区| 亚洲午夜高清视频| 日韩视频在线观看免费| 伊人久久婷婷| 国产一区二区三区在线免费观看 | 母乳一区在线观看| 欧美一级淫片播放口| 亚洲一二三级电影| 日韩亚洲欧美在线观看| 亚洲精品免费一区二区三区| 免费日韩视频| 欧美在线免费| 欧美一级午夜免费电影| 亚洲一区在线免费| 一区二区久久久久| 一本到高清视频免费精品| 亚洲日本中文| 亚洲精品一区二区三区在线观看| 国产综合久久久久久鬼色| 国产亚洲永久域名| 国产一区二区三区在线观看免费| 国产人久久人人人人爽| 国产精品一区二区男女羞羞无遮挡| 欧美午夜不卡视频| 国产精品夫妻自拍| 国产精品免费一区二区三区在线观看| 欧美日韩在线高清| 国产精品夜夜夜| 国产日韩欧美精品| 精品69视频一区二区三区| 亚洲第一综合天堂另类专| 136国产福利精品导航网址| 精品91在线| 日韩视频一区二区在线观看| 99精品热视频只有精品10| 亚洲无玛一区| 性娇小13――14欧美| 久久精品国产一区二区三| 久久综合九色综合欧美狠狠| 欧美国产精品劲爆| 99国产精品久久久久久久| 亚洲免费一在线| 欧美在线观看网站| 免费成人av资源网| 欧美午夜www高清视频| 国产一区二区三区高清| 91久久久久| 亚洲欧美电影在线观看| 久久综合色一综合色88| 亚洲国产一区二区精品专区| 亚洲无限av看| 久久美女艺术照精彩视频福利播放| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久精品欧美| 亚洲国产精品第一区二区三区| 亚洲精选在线观看| 欧美一区二区免费视频| 欧美福利小视频| 国产亚洲欧美一区| 一区二区免费在线观看| 久久久久中文| 99精品久久免费看蜜臀剧情介绍| 欧美有码在线视频| 欧美色123| 亚洲激情综合| 久久久蜜桃精品| 一区二区三区成人| 欧美mv日韩mv国产网站app| 国产精品国产三级国产a| 亚洲电影免费在线观看| 欧美在线影院在线视频| 亚洲美女精品一区| 免费一级欧美片在线观看| 国产日韩欧美成人| 亚洲自拍电影|