OpenGL編程低級錯誤範例手冊

看到一篇OpenGL編程的錯誤總結,對我初學來說應該比較有用,先保留,嘿嘿...

謝謝原文作者的貢獻:http://www.cnitblog.com/linghuye/archive/2005/08/13/1845.html


1.沒有glDisable(GL_TEXTURE_2D),導致基本幾何作圖全部失敗。

2.鏡頭位置沒調好,導致所有物體不可見.

3.物體位置數據錯誤,導致物體大大超出鏡頭顯示範圍.

4.紋理沒有GL_CLAMP_TO_EDGE 導致邊界拼接出現縫線. 

5.紋理沒有GL_REPEAT導致使用超出1.0紋理座標技巧失敗,顯示單色插值.

6.沒有glEnable(GL_TEXTURE_2D)導致全白紋理.

7.glEnable(GL_TEXTURE_2D)後沒有使用紋理頂點導致如glColor效果的純單色.

8. 應該在作圖循環設置燈光位置,因爲 The position is transformed by the modelview matrix when glLight is called (just as if it were a point), and it is stored in eye coordinates. 

9.燈光位置應該是4個float,3個float程序不出錯,但結果完全扭曲。

10.打開燈光卻沒設置頂點法線,到頭一場空。

11.Window Class 沒有CS_OWNDC,導致glDrawPixels失敗,如在子窗口View上進行象素寫入操作.

12.沒有設置PIXELFORMATDESCRIPTOR的cAlphaBits,導致glReadPixels讀取alpha通道數據失敗,統統爲0.

13.手動實現的多層紋理閃爍,出現線帶,沒有使用glPolygonOffset.

14.glDrawPixels 格式GL_RGB或GL_BGR_EXT的數據時崩潰,且數據有效,沒有使用glPixelStorei(GL_UNPACK_ALIGNMENT, 1);導致圖像行默認4字節對齊,導致OpenGL數據讀取越界崩潰.相應的要爲glReadPixels設置 glPixelStorei(GL_PACK_ALIGNMENT, 1);

15.glReadPixel讀取被覆蓋的OpenGL窗口部分的圖像數據時,讀出數據混亂無效,OpenGL Pixel Ownership檢測導致,標準如此.使用PixelBuffer,或強制置前OpenGL窗口解決.

16.glReadPixels讀取總是從FrameBuffer的左下往右上讀取,毫無參數可設置改變方向,真是笨到家了. 載入圖像一般還是從上到下比較容易理解.

17.使用glDepthMask(GL_FALSE)後不打開,glClear無法清除深度緩衝,導致現象:場景起始靜止正常,一旦移動出現不規則的透明無渲染區域,深度緩存邏輯混亂.

18. gluPerspective(45.0f, (GLfloat)cxPixels/(GLfloat)cyPixels, 0.1f, 2000.0f);這裏的0.1f將導致物體和地面的相交處閃爍,原因待查,至少取1.0f.

19.沒有顯示定義shiniess或shiniess爲0,在shader中對gl_FrontMaterial.shininess使用pow計算,結果不可測,黑色條帶閃爍,quite not understand.

20.紋理出現白色點狀閃爍,沒有Mipmap過濾導致!

21.任何初裝的Windows系統,多好的機器,一開始對OpenGL只支持1.1,連多重紋理都沒有,需要警惕這種機器,裝着DX9,微軟真噁心,::SwapBuffer直接崩潰,故需要檢測顯卡至少支持了1.2標準,否則要求更新顯卡驅動程序.

22.3D和2D,透視和正射模式混合時,2D模式的渲染覆蓋不了3D的渲染,原因深度測試失敗,
      a.2D下渲染時所取點深度確實大於3D點的深度.
      b.glOrtho參數錯誤,導致2D渲染所得深度值錯誤,如zNear被取負數!
      c.使用glDisable(GL_DEPTH_TEST);

23.glDrawElements崩潰,
      a.glXXXPointer設置的緩衝錯誤,頂點索引越界引用頂點數組.
      b.當前glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);硬件緩衝和內存緩衝混淆.

24.畫面上出現方塊形背景色,原因,渲染一次後,在glClear時glDepthMask沒有打開,glClear沒能clear掉depth,但clear掉顏色緩衝,depth值持續到下一次render,導致depth test沒通過,顏色畫不上.

25. 樹葉擋在物體前,樹葉間隙或蛀洞本應該透明卻呈現背景色.原因,沒有啓用Alpha過濾.一般不可能用幾何形狀勾勒出葉子的形狀,只用較大的多邊形包圍葉 子,用Alpha過濾掉空隙.此時不啓用Alpha過濾,出現Alpha爲0的三角面也被渲染,但得到的是背景圖像,並且由於Alpha爲0的三角面離視 點近,後面的物體渲染無法通過深度測試補上透明的空隙區域.

26.atlgdi.h裏有#pragma comment(lib, "opengl32.lib"),導致無源無故鏈接opengl32.lib失敗.


http://blog.csdn.net/wl_soft50/article/details/7815153

發佈了10 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章