(此節內容對應nehe教程第23課)
把環境紋理包裹在你的3d模型上,讓它看起來象反**周圍的場景一樣。
球體環境對映是乙個建立快速金屬反射效果的方法
首先,你需要一幅球體環境對映圖,用來把它對映到球體上。在photoshop中開啟一幅圖並選擇所有的畫素,建立它的乙個複製。
接著,我們把影象變為2的冪次方大小,一般為128x128或256x256。
最後使用扭曲(distort)濾鏡,並應用球體效果。然後把它儲存為reflect.bmp檔案。
如右圖上面的為背景的,下面為經過球面濾鏡處理過的,用於進行球面貼圖的紋理
對於球面對映往往我們希望背景是不變的,前面球面是可以轉動的,因此適當的push 與pop 檢視模型 可以帶到效果
原始 處理後 合成後效果
#include "header.h"
int part1;
int part2;
int p1=0;
int p2=1;
glfloat xrot;
glfloat yrot;
glfloat xspeed;
glfloat yspeed;
glfloat z=-10.0f;
gluquadricobj *quadratic;
glfloat lightambient= ;
glfloat lightdiffuse= ;
glfloat lightposition= ;
gluint filter;
gluint texture[6];
gluint object=1;
aux_rgbimagerec *loadbmp(char *filename)
file=fopen(filename,"r");
if (file)
return null;
}int loop=0;
int loadgltextures()
for (loop=0; loop<2; loop++)
free(textureimage[loop]);
}} }
return status;
}glvoid resizeglscene(glsizei width, glsizei height)
glviewport(0,0,width,height);
glmatrixmode(gl_projection);
glloadidentity();
// calculate the aspect ratio of the window
gluperspective(45.0f,(glfloat)width/(glfloat)height,0.1f,100.0f);
glmatrixmode(gl_modelview);
glloadidentity();
}int initgl(void)
glenable(gl_texture_2d);
glshademodel(gl_smooth);
glclearcolor(0.0f, 0.0f, 0.0f, 0.5f);
glcleardepth(1.0f);
glenable(gl_depth_test);
gldepthfunc(gl_lequal);
glhint(gl_perspective_correction_hint, gl_nicest);
gllightfv(gl_light1, gl_ambient, lightambient);
gllightfv(gl_light1, gl_diffuse, lightdiffuse);
gllightfv(gl_light1, gl_position,lightposition);
glenable(gl_light1);
quadratic=glunewquadric();
gluquadricnormals(quadratic, glu_smooth);
gluquadrictexture(quadratic, gl_true);
gltexgeni(gl_s, gl_texture_gen_mode, gl_sphere_map);
gltexgeni(gl_t, gl_texture_gen_mode, gl_sphere_map);
return true;
}void gldrawcube()
void drawglscene(void)
; glpopmatrix();
gldisable(gl_texture_gen_s);
gldisable(gl_texture_gen_t);
glbindtexture(gl_texture_2d, texture[filter*2]);
glpushmatrix();
gltranslatef(0.0f, 0.0f, -24.0f);
glbegin(gl_quads);
glnormal3f( 0.0f, 0.0f, 1.0f);
gltexcoord2f(0.0f, 0.0f); glvertex3f(-13.3f, -10.0f, 10.0f);
gltexcoord2f(1.0f, 0.0f); glvertex3f( 13.3f, -10.0f, 10.0f);
gltexcoord2f(1.0f, 1.0f); glvertex3f( 13.3f, 10.0f, 10.0f);
gltexcoord2f(0.0f, 1.0f); glvertex3f(-13.3f, 10.0f, 10.0f);
glend();
glpopmatrix();
xrot+=xspeed;
yrot+=yspeed;
glflush();
}void rotate()
void keyboard(unsigned char key,int x,int y)
glutpostredisplay();
break;
case 'w':
yspeed+=0.01f;
glutidlefunc(rotate);
break;
case 's':
yspeed-=0.01f;
glutidlefunc(rotate);
break;
case 'a':
xspeed+=0.01f;
glutidlefunc(rotate);
break;
case 'd':
xspeed-=0.01f;
glutidlefunc(rotate);
break;
case 'z':
z-=0.01f;
glutidlefunc(rotate);
break;
case 'x':
z+=0.01f;
glutidlefunc(rotate);
break;
case 'r':
glutidlefunc(null);
break; }}
int main(int argc,char **argv)
CUDA學習(三十三)
最大化指令吞吐量 為了最大化指令吞吐量,應用程式應 在本節中,吞吐量以每個多處理器每個時鐘週期的操作次數給出。對於32的變形大小,一條指令對應於32個操作,所以如果n是每個時鐘週期的運算元,則指令吞吐量是每個時鐘週期n 32條指令。所有的吞吐量都是針對乙個多處理器的。它們必須乘以裝置中的多處理器數量...
學習總結 三十三
1 什麼是守護程序 程序是乙個正在執行的程式,守護程序也是乙個程序,守護程序的意思就是乙個程序保護另乙個程序 2 守護程序使用場景 1 什麼是互斥鎖 互斥鎖就是互相排斥的鎖,乙個資源被鎖了,其他子程序就無法使用 2 為什麼需要互斥鎖 因為併發帶來的資源競爭問題,當多個程序同時要操作乙個資源將會導致資...
Python學習之旅(三十三)
網路通訊是兩台計算機上的兩個程序之間的通訊,而網路程式設計就是如何在程式中實現兩台計算機的通訊 p協議負責把資料從一台計算機通過網路傳送到另一台計算機 tcp協議則是建立在ip協議之上的。tcp協議負責在兩台計算機之間建立可靠連線,保證資料報按順序到達 許多常用的更高階的協議都是建立在tcp協議基礎...