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

黎明的剔透里伸出了你沁清的曖昧

Graphics|EngineDev|GameDev|2D&3D Art

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  60 隨筆 :: 1 文章 :: 18 評論 :: 0 Trackbacks
environment mapping的技術可以不依賴ray-trace而實現復雜環境我反射,這種技術使用一個或多個紋理來模擬外部環境的反射,這種技術最適合于應用到具有高亮鏡面的物體。
環境映射方法是從視點到反射物體某點P的一根光纖,根據P點的位置與法向n,計算得到反射光線r,不像光線跟蹤那樣真正去計算反射光線的最近交點,環境映射方法則用該反射光線作為一個索引,得到環境映射中的相應的環境紋理。


其中計算映射到物體的紋理是通過計算視點到正方體表面點的向量的反向量

根據http://www.cnblogs.com/sssa2000/archive/2009/03/22/1419205.html中提到的:

在一個環境中生成球面貼圖的時候,由于環境相對于球體而言無限大,所以可以把球體看成是一個單位球體。同時,有由于相機位于無限遠處,所以相機到球體上的各個點的向量可以看成是相互平行的。

wps_clip_image1

     于是很容易的想到:

     1、生成視線向量V。

     2、根據頂點法線生成反射向量R。

     3、查找R和球面的交點。

     4、根據交點求出UV坐標。

wps_clip_image2

     R可以很容易的求出。為了求出UV,需要求出R和球面的交點E在球面的位置。這個時候回到生成球面紋理圖時候的場景,由于球面是單位球面,利用單位球面的一個性質:球面上的點的歸一化法線就是該點在球面上的位置。

     我們只需要知道在生成球面紋理圖的時候,在球面上相同的點,當反射向量也為R的時候該點的法線為多少即可。

wps_clip_image3

     根據向量加法原則,法線是視線向量和反射向量的和。為了模擬視點位于無限遠處的情況,可以假象生成球面紋理圖的過程是位于View Space,這樣的話,Eye Vec就總是(0,0,1)。于是只需要把反射向量也轉化到View Space就可以得出球面的法線向量。

wps_clip_image4



也可以這樣理解:


環境貼圖的坐標和一般2D的貼圖的貼圖坐標不同,首先它需要用三維向量(x,y,z)來定位,GPU以(x,y,z)中絕對值最大的那個軸來決定要采用哪站貼圖,假如坐標為(1,0,0),X軸數值的絕對值最大,所以會采用X軸方向視角的兩貼圖的其中一個,又因為X>0,即正直,所以會用正X軸方向的貼圖。
選擇好貼圖以后,再把三維貼圖坐標轉換成正常的二維坐標,轉換方法是把絕對值最大的數值除以其他兩個數值,再把得到的結果從-1到1的范圍使用公式f(x)=(x+1.0)*0.5轉換到0~1的范圍,假如貼圖坐標是(2,0,0),那么會使用正x軸方向的貼圖,讀取坐標位置為(0.5,0.5)的像素,
繪制渲染環境代碼
 1 void draw_environment (){
 2    static GLfloat xPlane[] = 1.0f0.0f0.0f0.0f };
 3    static GLfloat yPlane[] = 0.0f1.0f0.0f0.0f };
 4    static GLfloat zPlane[] = 0.0f0.0f1.0f0.0f };
 5    
 6    glEnable (GL_TEXTURE_GEN_S);
 7    glEnable (GL_TEXTURE_GEN_T);
 8    glEnable (GL_TEXTURE_GEN_R);
 9    
10    /* Bind to cube map texture */
11    glEnable (GL_TEXTURE_CUBE_MAP_ARB);
12    glBindTexture (GL_TEXTURE_CUBE_MAP_ARB, g_uiCubemapTexture);
13    
14    //Setup auto texture coord generation 
15    glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
16    glTexGeni (GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
17    glTexGeni (GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
18    
19    glTexGenfv (GL_S, GL_OBJECT_PLANE, xPlane);
20    glTexGenfv (GL_T, GL_OBJECT_PLANE, yPlane);
21    glTexGenfv (GL_R, GL_OBJECT_PLANE, zPlane);
22    
23    glDisable (GL_DEPTH_TEST);
24    
25//    glutSolidSphere (20.0f, 60, 30);
26    glutSolidCube (20.0f);
27    
28    glEnable (GL_DEPTH_TEST);
29    
30    glDisable (GL_TEXTURE_CUBE_MAP_ARB);
31    
32    glDisable (GL_TEXTURE_GEN_S);
33    glDisable (GL_TEXTURE_GEN_T);
34    glDisable (GL_TEXTURE_GEN_R);
35}

繪制反射場景:

 1void myDispaly(){
 2         GLfloat mat[16], invmat[16];
 3     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);            
 4     glMatrixMode (GL_TEXTURE);
 5     glLoadIdentity ();
 6     glMatrixMode (GL_MODELVIEW);
 7     glLoadIdentity ();
 8     glTranslatef (0.00.0-5.0);
 9    
10    glRotated (cam_rot.x, 1.0f0.0f0.0f);
11    glRotated (cam_rot.y, 0.0f1.0f0.0f);
12    glRotated (cam_rot.z, 0.0f0.0f1.0f);        
13    draw_environment ();
14
15     
16    glEnable (GL_TEXTURE_GEN_S);
17    glEnable (GL_TEXTURE_GEN_T);
18    glEnable (GL_TEXTURE_GEN_R);
19    
20    glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
21    glTexGeni (GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
22    glTexGeni (GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
23    
24
25    
26    glEnable (GL_TEXTURE_CUBE_MAP_ARB);
27    glBindTexture (GL_TEXTURE_CUBE_MAP_ARB, g_uiCubemapTexture);
28    
29    glGetFloatv (GL_MODELVIEW_MATRIX, mat);
30    compute_matrix_inverse (mat, invmat);
31    
32    glMatrixMode (GL_TEXTURE);
33    invmat[12= 0.0f;
34    invmat[13= 0.0f;
35    invmat[14= 0.0f;
36    invmat[15= 1.0f;
37    glLoadMatrixf (invmat);
38    
39
40
41    glMatrixMode (GL_MODELVIEW);
42    glRotated(45,0,1,0);
43    glRotated(180,1,0,0);
44        glutSolidTeapot(1.0);
45    
46    
47    glDisable (GL_TEXTURE_CUBE_MAP_ARB);
48    
49    
50    glDisable (GL_TEXTURE_GEN_S);
51    glDisable (GL_TEXTURE_GEN_T);
52    glDisable (GL_TEXTURE_GEN_R);
53        glutSwapBuffers();
54}

渲染結果:



旋轉場景:



參考:
http://www.nvidia.cn/object/cube_chs.html
http://www.cnblogs.com/sssa2000/archive/2009/03/22/1419205.html

posted on 2012-02-16 17:51 情絕格調(fresmaster) 閱讀(1435) 評論(0)  編輯 收藏 引用 所屬分類: Graphics
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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精品久久久久久9| 欧美一区观看| 媚黑女一区二区| 亚洲黄色有码视频| 亚洲精品乱码| 午夜精品成人在线| 午夜在线播放视频欧美| 欧美在线91| 免费看的黄色欧美网站| 欧美日韩精品是欧美日韩精品| 欧美日韩三级电影在线| 国产精品一区在线观看| 亚洲电影自拍| 亚洲天堂av电影| 久久精品一区四区| 欧美高清在线视频| 亚洲视频在线免费观看| 久久青草久久| 国产精品入口麻豆原神| 91久久精品视频| 欧美在线一区二区| 亚洲裸体在线观看| 久久久久久久综合色一本| 欧美日韩喷水| 亚洲黄色影院| 久久久999成人| 在线亚洲观看| 欧美激情1区2区3区| 国产一区二区三区在线观看视频 | 日韩视频在线观看| 亚洲欧美日韩精品在线| 亚洲高清在线观看| 久久久久久久综合| 国产欧美在线看| 亚洲午夜激情网页| 亚洲二区视频在线| 久久精品国产第一区二区三区最新章节 | 欧美激情1区2区3区| 国产真实乱子伦精品视频| 亚洲一区二区视频| 亚洲免费高清| 欧美日韩精品免费观看| 亚洲国产欧美另类丝袜| 久久人91精品久久久久久不卡| 亚洲与欧洲av电影| 国产精品a久久久久久| 一区二区三区高清在线观看| 欧美成人精品激情在线观看| 久久久999精品| 国产亚洲欧美一区二区| 性伦欧美刺激片在线观看| 中文av一区特黄| 国产精品国产三级国产| 亚洲视频在线观看| 日韩一区二区精品在线观看| 欧美精品久久久久久久久老牛影院| 亚洲国产精品国自产拍av秋霞| 猛干欧美女孩| 麻豆av一区二区三区| 亚洲高清在线观看| 欧美激情一区二区三区| 男人的天堂亚洲| 日韩午夜在线视频| 99视频精品在线| 国产精品亚洲精品| 久久久久久久999| 久久久精品一区二区三区| 亚洲第一福利在线观看| 亚洲高清在线精品| 欧美日韩综合视频| 欧美一区在线视频| 久久精品99久久香蕉国产色戒| 一区在线观看| 亚洲国产综合视频在线观看| 欧美巨乳在线观看| 午夜亚洲福利在线老司机| 欧美一区二区三区视频在线观看| 国内精品**久久毛片app| 免费欧美在线| 欧美日韩一区二区三区高清| 欧美主播一区二区三区| 欧美成人综合一区| 欧美+亚洲+精品+三区| 夜夜嗨一区二区| 亚洲欧美日韩中文播放| 永久免费精品影视网站| 亚洲精品国产视频| 国产精品视频内| 欧美成人精品影院| 国产精品成人av性教育| 久久一区二区三区超碰国产精品| 欧美精品偷拍| 久久久久久一区| 欧美日韩黄色一区二区| 久久国产欧美| 欧美另类极品videosbest最新版本| 午夜精品999| 欧美大片专区| 久久国产精品久久精品国产| 欧美日本国产精品| 蜜桃伊人久久| 国产精品婷婷| 亚洲欧洲一区| 亚洲国产欧美日韩精品| 亚洲一区中文字幕在线观看| 亚洲精品综合精品自拍| 欧美亚洲视频在线看网址| 99re视频这里只有精品| 久久久久国产一区二区三区四区 | 欧美日韩国产综合一区二区| 久久网站热最新地址| 国产精品mv在线观看| 欧美黄色片免费观看| 国内精品福利| 亚洲一区二区在线免费观看视频| 亚洲激情一区二区| 欧美在线观看视频在线| 午夜精彩视频在线观看不卡| 欧美日韩免费观看中文| 亚洲国产天堂久久综合网| 红桃视频国产精品| 午夜视频一区| 欧美有码视频| 国产精品一区二区你懂的| 一本色道久久99精品综合| 99视频超级精品| 欧美暴力喷水在线| 亚洲国产91| 亚洲精品日韩精品| 欧美成人精品在线| 亚洲黄色免费网站| 亚洲精品一品区二品区三品区| 老司机aⅴ在线精品导航| 美女久久一区| 亚洲激情国产| 欧美美女视频| 在线亚洲精品| 欧美一区日本一区韩国一区| 国产女主播一区| 欧美在线视频不卡| 久久免费视频这里只有精品| 韩国成人理伦片免费播放| 久久精品久久99精品久久| 久热re这里精品视频在线6| 一区久久精品| 欧美高清视频一区二区| 亚洲精品免费在线| 欧美丝袜一区二区三区| 亚洲午夜精品网| 香蕉尹人综合在线观看| 国产亚洲成av人在线观看导航| 久久国产乱子精品免费女| 美女日韩欧美| 日韩亚洲欧美中文三级| 国产精品久久亚洲7777| 午夜精品免费视频| 噜噜噜噜噜久久久久久91| 亚洲韩日在线| 欧美日韩午夜视频在线观看| 亚洲综合首页| 美女精品自拍一二三四| 99视频超级精品| 国产亚洲欧美aaaa| 欧美精品三区| 久久精品国产第一区二区三区最新章节| 另类av一区二区| 一本色道久久综合亚洲91| 国产美女高潮久久白浆| 噜噜噜在线观看免费视频日韩| 日韩午夜视频在线观看| 久久亚洲一区| 亚洲午夜在线| 亚洲人成7777| 国产午夜精品在线| 欧美日韩精品中文字幕| 久久九九精品99国产精品| 99视频有精品| 欧美成人一区二区三区在线观看| 一本色道久久综合亚洲精品按摩| 国产视频一区免费看| 欧美日韩国产精品成人| 久久精品国产第一区二区三区最新章节 | 1769国内精品视频在线播放| 欧美少妇一区二区| 久热re这里精品视频在线6| 亚洲伊人色欲综合网| 最新日韩精品| 免费观看亚洲视频大全| 欧美一区午夜精品| 亚洲午夜在线观看| 亚洲毛片在线观看| 在线精品视频一区二区| 国产欧美日韩一区| 欧美揉bbbbb揉bbbbb| 欧美国产先锋| 欧美α欧美αv大片| 久久夜色精品一区| 久久激五月天综合精品|