日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ opengl 天空盒的创建

發(fā)布時間:2025/3/15 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ opengl 天空盒的创建 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

天空盒要處在最遠處,任何東西都可以遮擋天空盒,而天空盒不能去遮擋任何東西。

根據(jù)深度緩沖區(qū)(清空深度緩存區(qū)默認是1.0【白色】),如果是在視野范圍內(nèi),那么他的深度緩沖區(qū)會寫上最近一次物體的深度信息,深度緩沖區(qū)就會發(fā)生變化(深度緩沖區(qū)會被刷新)。如果又有物體,他的深度緩沖區(qū)的值比剛剛的小,就繪制出來,并且刷新深度緩沖區(qū),如果值比深度緩沖區(qū)大,那么是繪制不出來的。

如何創(chuàng)建天空盒子,讓OpenGL覺得他是在最遠處!
(注意:是讓OpenGL覺得,不是讓你覺得)
在繪制天空盒的時候,不去改變深度緩沖區(qū),讓深度緩沖區(qū),就是白色,這樣后面繪制的所有圖形,都能覆蓋天空盒。因為天空盒繪制的時候沒有改變深度緩沖區(qū)。

?

程序運行截圖如下:

?

偽代碼如下:

skybox.h

#define _CRT_SECURE_NO_WARNINGS #pragma once#include "ggl.h"class SkyBox {GLuint mTextures[6]; public:void Init(const char *imageDir);void Draw(); };

skybox.cpp

#include "skybox.h" #include "utils.h"void SkyBox::Init(const char *imageDir) {char temp[256];memset(temp, 0, 255);strcpy(temp, imageDir);strcat(temp, "front.bmp");mTextures[0] = CreateTexture2DFromBMP(temp); }void SkyBox::Draw() {glDisable(GL_DEPTH_TEST);glEnable(GL_TEXTURE_2D);glBindTexture(GL_TEXTURE_2D, mTextures[0]);glBegin(GL_QUADS);glColor4ub(255, 255, 255, 255);glTexCoord2f(0.0f, 0.0f);glVertex3f(-0.5f, -0.5f, -0.5f);glTexCoord2f(1.0f, 0.0f);glVertex3f(0.5f, -0.5f, -0.5f);glTexCoord2f(1.0f, 1.0f);glVertex3f(0.5f, 0.5f, -0.5f);glTexCoord2f(0.0f, 1.0f);glVertex3f(-0.5f, 0.5f, -0.5f);glEnd(); }

?

scene.cpp

#include "scene.h" #include "utils.h" #include "skybox.h"SkyBox skybox;void Init() {glMatrixMode(GL_PROJECTION);gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();skybox.Init("Res/"); }void Draw() {glClearColor(0.0f, 0.0f, 0.0f, 1.0f);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);skybox.Draw();glEnable(GL_DEPTH_TEST);glBegin(GL_QUADS);glColor4ub(0, 50, 200, 255);glVertex3f(-0.1f, -0.1f, -0.6f);glVertex3f(0.1f, -0.1f, -0.6f);glVertex3f(0.1f, 0.1f, -0.6f);glVertex3f(-0.1f, 0.1f, -0.6f);glEnd(); }

?

總結(jié)

以上是生活随笔為你收集整理的C++ opengl 天空盒的创建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。