glcleardepth(1.0);
// 1.0是最大深度([0.0,1.0])
glclear(gl_depth_buffer_bit);
glenable(gl_depth_test);
// 最好在display()中呼叫
以下面的**為例:
glfloat vertexarr1 = ;
int vertarrsize = 6;
......
glclear(gl_color_buffer_bit);
glclear(gl_depth_buffer_bit);
glenable(gl_depth_test);
glmatrixmode(gl_projection);
glloadidentity();
gluperspective(45.0, 1.0, 0.1, 500.0);
glmatrixmode(gl_modelview);
glloadidentity();
glulookat(0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glcolor3f(1.0, 0.0, 0.0);
glbegin(gl_********s);
for(int i=0; i<3; i++)
glend();
glcolor3f(0.0, 1.0, 0.0);
glbegin(gl_********s);
for(int i=3; i<6; i++)
glend();
glflush();
如果不使用glenable(gl_depth_test),則繪製的結果是綠色三角形在紅色三角形之上;
這同時說明了opengl的繪製順序與**中的出現順序相反。
**如下:
#include #include #include #pragma comment(lib,"glut32.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment(lib,"opengl32.lib")
#include #include using namespace std;
glfloat vertexarr1 =
;int vertarrsize = 6;
double calcdist(gldouble _x,gldouble _y,gldouble _z,gldouble _wx0,gldouble _wy0,gldouble _wz0,gldouble _wx1,gldouble _wy1,gldouble _wz1)
int findclosestpt(gldouble _wx0,gldouble _wy0,gldouble _wz0,gldouble _wx1,gldouble _wy1,gldouble _wz1)
{ double mindis;
int mindispos;
mindispos = 0;
mindis = calcdist((double)vertexarr1[0], (double)vertexarr1[1], (double)vertexarr1[2], _wx0, _wy0, _wz0, _wx1, _wy1, _wz1);
for(int i=1; i
執行結果如下:
opengl 深度詳解 OpenGL之深度測試
深度緩衝是在三維圖形中處理影象深度座標 個人認為可以理解成距離我們觀察攝像機遠近的距離 的過程 from wiki 這聽起來不好理解啊啊啊啊。所以就舉個栗子嘍xd,就好比我可能要按由近到遠順序渲染兩個面 實際上是任意順序,我是說假如按這個順序 近處的麵先渲染,之後渲染遠處的面,但是如果沒有開啟深度測...
OpenGL學習09 裁剪平面ClipPlane
除了視景體的6個裁剪平面 左 右 底 頂 近和遠 之外,還可以另外再指定最多可達6個的其他裁剪平面,對視景體施加進一步的限制。每個平面都是由它的方程式ax by cz d 0的係數所指定的。裁剪平面會根據模型和檢視矩陣自動執行適當的變換。最終的裁剪區域將是視景體與其他裁剪平面定義的所有半空間的交集。...
openGL 深度測試
opengl裡常出現深度測試,一直不清楚。今天就來弄清楚。1 什麼是深度?深度其實就是該象素點在3d世界中距離攝象機的距離 繪製座標 深度快取中儲存著每個象素點 繪製在螢幕上的 的深度值!深度值 z值 越大,則離攝像機越遠。深度值是存貯在深度快取裡面的,我們用深度快取的位數來衡量深度快取的精度。深度...