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

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

常用鏈接

留言簿(48)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 402367
  • 排名 - 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 閱讀(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>
            亚洲女与黑人做爰| 亚洲激情午夜| 国产日韩欧美成人| 国产精品女人毛片| 国产视频久久网| 国产精品国产自产拍高清av王其| 欧美一级精品大片| 欧美有码在线观看视频| 久久久久久日产精品| 欧美ed2k| 国产精品私拍pans大尺度在线| 国产一区二区三区高清播放| 亚洲国产成人porn| 亚洲网站啪啪| 久久人人爽爽爽人久久久| 亚洲国产另类久久精品| 亚洲一区在线播放| 美日韩精品视频| 国产精品蜜臀在线观看| 亚洲高清视频一区| 香蕉久久精品日日躁夜夜躁| 亚洲成人在线视频播放 | 欧美超级免费视 在线| 欧美激情亚洲另类| 国产日产亚洲精品| 99一区二区| 久久亚洲私人国产精品va| 日韩一区二区免费看| 久久久人成影片一区二区三区| 欧美视频二区36p| 亚洲国产精品久久精品怡红院| 午夜国产精品视频免费体验区| 欧美成人午夜激情在线| 午夜精品视频在线观看| 欧美日韩国产综合网| 伊人精品在线| 久久爱另类一区二区小说| 亚洲精品在线一区二区| 蜜桃久久av一区| 国产真实乱偷精品视频免| 亚洲一区二区三区久久| 亚洲国产成人porn| 另类成人小视频在线| 国产一区久久| 午夜精品一区二区在线观看| 亚洲精品久久久久久一区二区 | 亚洲女人小视频在线观看| 亚洲第一精品电影| 久久―日本道色综合久久| 国产一区二区福利| 久久se精品一区二区| 亚洲一区二区精品视频| 欧美日产国产成人免费图片| 亚洲高清自拍| 欧美激情在线免费观看| 99精品免费视频| 亚洲综合国产精品| 亚洲一区二区三区视频| 亚洲欧洲精品一区二区精品久久久 | 狠狠干综合网| 久久久久久久一区| 久久成人精品无人区| 韩国视频理论视频久久| 久久免费视频网站| 久久精品免费播放| 亚洲高清一区二| 亚洲啪啪91| 国产精品播放| 久久av一区二区| 久久亚洲春色中文字幕| 亚洲精品久久久久| 一本色道久久88精品综合| 国产精品久线观看视频| 久久精品盗摄| 美腿丝袜亚洲色图| 一本色道婷婷久久欧美| 中日韩美女免费视频网址在线观看| 国产精品久久久久久久免费软件| 欧美一级日韩一级| 久久亚洲综合色| av成人免费观看| 亚洲愉拍自拍另类高清精品| 国产综合精品一区| 91久久精品一区二区三区| 国产精品成人播放| 美女尤物久久精品| 欧美日韩一区在线播放| 久久精品综合一区| 欧美激情一区二区三区在线视频观看| 亚洲一区二区三区免费观看| 久久精品91久久香蕉加勒比| 亚洲欧洲日本在线| 亚洲一区国产一区| 亚洲欧洲日产国产网站| 亚洲综合色激情五月| 亚洲国产精彩中文乱码av在线播放| 亚洲国产精品视频| 国内精品久久久久久久影视麻豆| 91久久国产综合久久蜜月精品| 国产精品视频99| 亚洲国产精品精华液2区45| 国产精品久久久久久久一区探花| 美日韩精品视频免费看| 国产精品电影在线观看| 欧美a级理论片| 国产精品一区二区在线观看网站 | 欧美一区成人| 在线一区视频| 麻豆91精品| 欧美中文字幕精品| 欧美日韩精品欧美日韩精品一| 玖玖在线精品| 国产午夜一区二区三区| 一区二区三区鲁丝不卡| 亚洲三级免费电影| 久久久久久一区二区| 欧美一区二区三区四区夜夜大片| 免费成人高清视频| 久久综合久久综合久久| 香蕉久久一区二区不卡无毒影院| 欧美成人精品在线| 猫咪成人在线观看| 国产日韩精品视频一区二区三区| 夜夜嗨av一区二区三区四季av | 久久久青草婷婷精品综合日韩| 国产精品九九| 一区二区三区视频在线观看 | 女仆av观看一区| 国产专区欧美精品| 先锋影音网一区二区| 欧美一区二区三区免费看| 欧美三级在线| av不卡在线看| 亚洲一区二区免费| 欧美亚洲第一区| 99精品福利视频| 亚洲一级高清| 国产精品家教| 午夜亚洲视频| 久久久免费精品视频| 影音先锋成人资源站| 久久中文字幕导航| 亚洲第一精品夜夜躁人人躁| 最新国产拍偷乱拍精品| 欧美风情在线观看| 91久久国产综合久久| 亚洲一级片在线观看| 国产精品久久久久三级| 亚洲欧美在线一区二区| 久久久久久久久久久久久女国产乱| 国产主播一区| 欧美激情日韩| 亚洲一区二区三区久久| 久久久国产精彩视频美女艺术照福利| 国色天香一区二区| 欧美sm重口味系列视频在线观看| 亚洲精品男同| 欧美在线网址| 亚洲欧洲综合另类在线| 国产精品jvid在线观看蜜臀| 久久av资源网站| 91久久久久久久久| 性欧美激情精品| 亚洲国产精品999| 国产精品成人在线| 久久久久久久久久久一区| 亚洲第一搞黄网站| 午夜精品久久久久久99热软件| 激情综合久久| 欧美图区在线视频| 久久婷婷蜜乳一本欲蜜臀| 日韩视频在线播放| 久久手机精品视频| 亚洲一区在线观看免费观看电影高清 | 欧美在线|欧美| 亚洲人成人一区二区在线观看| 亚洲欧美综合v| 亚洲日本视频| 国产一区视频观看| 欧美深夜福利| 麻豆国产精品777777在线 | 日韩视频在线一区| 欧美在线一二三四区| 亚洲精品美女免费| 国产香蕉97碰碰久久人人| 欧美片在线播放| 久久夜色精品亚洲噜噜国产mv| 亚洲视频一二区| 亚洲人成网站999久久久综合| 久久久噜噜噜久久久| 亚洲欧美福利一区二区| 亚洲每日更新| 亚洲国产一区二区三区青草影视 | 欧美福利视频网站| 久久久欧美一区二区| 亚洲男同1069视频| 一区二区三区欧美亚洲| 亚洲人午夜精品免费| 欧美成人激情视频免费观看| 久久久999成人|