C++ opengl 天空盒的创建
生活随笔
收集整理的這篇文章主要介紹了
C++ opengl 天空盒的创建
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
天空盒要處在最遠處,任何東西都可以遮擋天空盒,而天空盒不能去遮擋任何東西。
根據深度緩沖區(清空深度緩存區默認是1.0【白色】),如果是在視野范圍內,那么他的深度緩沖區會寫上最近一次物體的深度信息,深度緩沖區就會發生變化(深度緩沖區會被刷新)。如果又有物體,他的深度緩沖區的值比剛剛的小,就繪制出來,并且刷新深度緩沖區,如果值比深度緩沖區大,那么是繪制不出來的。
如何創建天空盒子,讓OpenGL覺得他是在最遠處!
(注意:是讓OpenGL覺得,不是讓你覺得)
在繪制天空盒的時候,不去改變深度緩沖區,讓深度緩沖區,就是白色,這樣后面繪制的所有圖形,都能覆蓋天空盒。因為天空盒繪制的時候沒有改變深度緩沖區。
?
程序運行截圖如下:
?
偽代碼如下:
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(); }?
總結
以上是生活随笔為你收集整理的C++ opengl 天空盒的创建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt学习笔记-基于QGraphicsSc
- 下一篇: C++ STL list的大小