OpenGL應用 天空盒子 SkyBox

2022-05-05 02:15:07 字數 1116 閱讀 2919

skybox 製作3d遊戲的乙個經典技術應用。

skybox 是基於正方體模型的渲染技術。將6個方向拍下來的天空分別貼在正方體的對應面上,從內部觀察正方體就可以得到乙個密閉的天空環境

這是我們skybox貼圖。

可以把它分成上下左右前後六張圖,然後建立cubemap。標準化modelmatrix矩陣處理後的頂點位置,就可以用來在cubemap上進行取樣了。渲染skybox時不需要使用光照模型,直接使用取樣cubemap得到的顏色即可。所以需要為天空盒單獨寫乙個fragment shader。

首先準備基本的cube幾何體,建立skybox類,讓它繼承cube類,這樣就具備了渲染乙個cube的能力。然後對draw方法進行一些特殊處理。因為需要在內部觀察這個cube,所以需要讓這個cube的正面被裁剪,反面顯示出來。glcullface(gl_front);

正是用來做這件事情。渲染完後還需要將裁減狀態回歸到裁減背面。

- (void)draw:(glcontext *)glcontext
上圖中的6張圖就是我們用於生成cubemap的6張圖。

- (void

)createcubetexture

nserror *error;

self.cubetexture = [glktextureloader cubemapwithcontentsoffiles:files options:nil error:&error];

}

生成取樣向量,返回取樣結果。

precision highp float

;varying vec2 fraguv;

varying vec3 fragposition;

uniform samplercube envmap;

uniform mat4 modelmatrix;

void main(void

)

效果圖:

opengl 天空盒 ThingJS玩轉天空盒技術

在計算機的三維世界中,三維天空的繪製肯定不可能像現實生活中的天空一樣,一望無際綿延無盡 thingjs的天空盒技術是認真的。引用地圖元件指令碼之後地球相機引數就改變,需要校正天空盒。為什麼偏偏是天空盒呢?這就得問一下,天空盒的原理是什麼?opengl中天空盒的思想就是繪製乙個大的立方體,然後將觀察者...

QT與OpenGL結合實現天空盒

之前搗鼓過一段時間opengl,用的是glad加上glfw庫,由於在windows下c 開發用qt較多,所以把qt和opengl結合,因此進行了嘗試。首先qt5.8.0下有自帶的opengl控制項opengl widget,將這個控制項提公升為乙個自己寫的類myopenglbox繼承於qopengl...

關於OpenGL的天空盒的理解

參考 owed by 春夜喜雨 關於天空盒 空間概念上 可以理解為乙個盒子,內壁貼著貼圖,我們位於盒子內,盒子離我們無窮遠。我們抬頭向四面看,最遠處是這個盒子的內壁,由於我們始終位於盒子內,所以我們不會看到盒子以外的部分。opengl實現上 通常是 天空盒採用6張可以連線縫合的天空,貼圖到乙個立方體...