Opengl編程低級錯誤 (轉(zhuǎn)載)
1.沒有g(shù)lDisable(GL_TEXTURE_2D),導(dǎo)致基本幾何作圖全部失敗。
2.鏡頭位置沒調(diào)好,導(dǎo)致所有物體不可見.
3.物體位置數(shù)據(jù)錯誤,導(dǎo)致物體大大超出鏡頭顯示范圍.
4.紋理沒有GL_CLAMP導(dǎo)致邊界拼接出現(xiàn)縫線.
5.紋理沒有GL_REPEAT導(dǎo)致使用超出1.0紋理坐標技巧失敗,顯示單色插值.
6.沒有g(shù)lEnable(GL_TEXTURE_2D)導(dǎo)致全白紋理.
7.glEnable(GL_TEXTURE_2D)后沒有使用紋理頂點導(dǎo)致如glColor效果的純單色.
8.應(yīng)該在作圖循環(huán)設(shè)置燈光位置,因為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.燈光位置應(yīng)該是4個float,3個float程序不出錯,但結(jié)果完全扭曲。
10.打開燈光卻沒設(shè)置頂點法線,到頭一場空。
11.Window Class 沒有CS_OWNDC,導(dǎo)致glDrawPixels失敗,如在子窗口View上進行象素寫入操作.
12.沒有設(shè)置PIXELFORMATDESCRIPTOR的cAlphaBits,導(dǎo)致glReadPixels讀取alpha通道數(shù)據(jù)失敗,統(tǒng)統(tǒng)為0.
13.手動實現(xiàn)的多層紋理閃爍,出現(xiàn)線帶,沒有使用glPolygonOffset.
14.glDrawPixels格式GL_RGB或GL_BGR_EXT的數(shù)據(jù)時崩潰,且數(shù)據(jù)有效,沒有使用glPixelStorei(GL_UNPACK_ALIGNMENT, 1);導(dǎo)致圖像行默認4字節(jié)對齊,導(dǎo)致OpenGL數(shù)據(jù)讀取越界崩潰.相應(yīng)的要為glReadPixels設(shè)置glPixelStorei(GL_PACK_ALIGNMENT, 1);
15.glReadPixel讀取被覆蓋的OpenGL窗口部分的圖像數(shù)據(jù)時,讀出數(shù)據(jù)混亂無效,OpenGL Pixel Ownership檢測導(dǎo)致,標準如此.使用PixelBuffer,或強制置前OpenGL窗口解決.
16.glReadPixels讀取總是從FrameBuffer的左下往右上讀取,毫無參數(shù)可設(shè)置改變方向,真是笨到家了. 載入圖像一般還是從上到下比較容易理解.
17.使用glDepthMask(GL_FALSE)后不打開,glClear無法清除深度緩沖,導(dǎo)致現(xiàn)象:場景起始靜止正常,一旦移動出現(xiàn)不規(guī)則的透明無渲染區(qū)域,深度緩存邏輯混亂.
18. gluPerspective(45.0f, (GLfloat)cxPixels/(GLfloat)cyPixels, 0.1f, 2000.0f);這里的0.1f將導(dǎo)致物體和地面的相交處閃爍,原因待查,至少取1.0f.
19.沒有顯示定義shiniess或shiniess為0,在shader中對gl_FrontMaterial.shininess使用pow計算,結(jié)果不可測,黑色條帶閃爍,quite not understand.
20.紋理出現(xiàn)白色點狀閃爍,沒有Mipmap過濾導(dǎo)致!
21.任何初裝的Windows系統(tǒng),多好的機器,一開始對OpenGL只支持1.1,連多重紋理都沒有,需要警惕這種機器,裝著DX9,微軟真惡心,::SwapBuffer直接崩潰,故需要檢測顯卡至少支持了1.2標準,否則要求更新顯卡驅(qū)動程序.
22.3D和2D,透視和正射模式混合時,2D模式的渲染覆蓋不了3D的渲染,原因深度測試失敗,
a.2D下渲染時所取點深度確實大于3D點的深度.
b.glOrtho參數(shù)錯誤,導(dǎo)致2D渲染所得深度值錯誤,如zNear被取負數(shù)!
c.使用glDisable(GL_DEPTH_TEST);
23.glDrawElements崩潰,
a.glXXXPointer設(shè)置的緩沖錯誤,頂點索引越界引用頂點數(shù)組.
b.當前glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);硬件緩沖和內(nèi)存緩沖混淆.
24.畫面上出現(xiàn)方塊形背景色,原因,渲染一次后,在glClear時glDepthMask沒有打開,glClear沒能clear掉depth,但clear掉顏色緩沖,depth值持續(xù)到下一次render,導(dǎo)致depth test沒通過,顏色畫不上.
25.樹葉擋在物體前,樹葉間隙或蛀洞本應(yīng)該透明卻呈現(xiàn)背景色.原因,沒有啟用Alpha過濾.一般不可能用幾何形狀勾勒出葉子的形狀,只用較大的多邊形包圍葉子,用Alpha過濾掉空隙.此時不啟用Alpha過濾,出現(xiàn)Alpha為0的三角面也被渲染,但得到的是背景圖像,并且由于Alpha為0的三角面離視點近,后面的物體渲染無法通過深度測試補上透明的空隙區(qū)域.
26.atlgdi.h里有#pragma comment(lib, "opengl32.lib"),導(dǎo)致無源無故鏈接opengl32.lib失敗.
2.鏡頭位置沒調(diào)好,導(dǎo)致所有物體不可見.
3.物體位置數(shù)據(jù)錯誤,導(dǎo)致物體大大超出鏡頭顯示范圍.
4.紋理沒有GL_CLAMP導(dǎo)致邊界拼接出現(xiàn)縫線.
5.紋理沒有GL_REPEAT導(dǎo)致使用超出1.0紋理坐標技巧失敗,顯示單色插值.
6.沒有g(shù)lEnable(GL_TEXTURE_2D)導(dǎo)致全白紋理.
7.glEnable(GL_TEXTURE_2D)后沒有使用紋理頂點導(dǎo)致如glColor效果的純單色.
8.應(yīng)該在作圖循環(huán)設(shè)置燈光位置,因為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.燈光位置應(yīng)該是4個float,3個float程序不出錯,但結(jié)果完全扭曲。
10.打開燈光卻沒設(shè)置頂點法線,到頭一場空。
11.Window Class 沒有CS_OWNDC,導(dǎo)致glDrawPixels失敗,如在子窗口View上進行象素寫入操作.
12.沒有設(shè)置PIXELFORMATDESCRIPTOR的cAlphaBits,導(dǎo)致glReadPixels讀取alpha通道數(shù)據(jù)失敗,統(tǒng)統(tǒng)為0.
13.手動實現(xiàn)的多層紋理閃爍,出現(xiàn)線帶,沒有使用glPolygonOffset.
14.glDrawPixels格式GL_RGB或GL_BGR_EXT的數(shù)據(jù)時崩潰,且數(shù)據(jù)有效,沒有使用glPixelStorei(GL_UNPACK_ALIGNMENT, 1);導(dǎo)致圖像行默認4字節(jié)對齊,導(dǎo)致OpenGL數(shù)據(jù)讀取越界崩潰.相應(yīng)的要為glReadPixels設(shè)置glPixelStorei(GL_PACK_ALIGNMENT, 1);
15.glReadPixel讀取被覆蓋的OpenGL窗口部分的圖像數(shù)據(jù)時,讀出數(shù)據(jù)混亂無效,OpenGL Pixel Ownership檢測導(dǎo)致,標準如此.使用PixelBuffer,或強制置前OpenGL窗口解決.
16.glReadPixels讀取總是從FrameBuffer的左下往右上讀取,毫無參數(shù)可設(shè)置改變方向,真是笨到家了. 載入圖像一般還是從上到下比較容易理解.
17.使用glDepthMask(GL_FALSE)后不打開,glClear無法清除深度緩沖,導(dǎo)致現(xiàn)象:場景起始靜止正常,一旦移動出現(xiàn)不規(guī)則的透明無渲染區(qū)域,深度緩存邏輯混亂.
18. gluPerspective(45.0f, (GLfloat)cxPixels/(GLfloat)cyPixels, 0.1f, 2000.0f);這里的0.1f將導(dǎo)致物體和地面的相交處閃爍,原因待查,至少取1.0f.
19.沒有顯示定義shiniess或shiniess為0,在shader中對gl_FrontMaterial.shininess使用pow計算,結(jié)果不可測,黑色條帶閃爍,quite not understand.
20.紋理出現(xiàn)白色點狀閃爍,沒有Mipmap過濾導(dǎo)致!
21.任何初裝的Windows系統(tǒng),多好的機器,一開始對OpenGL只支持1.1,連多重紋理都沒有,需要警惕這種機器,裝著DX9,微軟真惡心,::SwapBuffer直接崩潰,故需要檢測顯卡至少支持了1.2標準,否則要求更新顯卡驅(qū)動程序.
22.3D和2D,透視和正射模式混合時,2D模式的渲染覆蓋不了3D的渲染,原因深度測試失敗,
a.2D下渲染時所取點深度確實大于3D點的深度.
b.glOrtho參數(shù)錯誤,導(dǎo)致2D渲染所得深度值錯誤,如zNear被取負數(shù)!
c.使用glDisable(GL_DEPTH_TEST);
23.glDrawElements崩潰,
a.glXXXPointer設(shè)置的緩沖錯誤,頂點索引越界引用頂點數(shù)組.
b.當前glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);硬件緩沖和內(nèi)存緩沖混淆.
24.畫面上出現(xiàn)方塊形背景色,原因,渲染一次后,在glClear時glDepthMask沒有打開,glClear沒能clear掉depth,但clear掉顏色緩沖,depth值持續(xù)到下一次render,導(dǎo)致depth test沒通過,顏色畫不上.
25.樹葉擋在物體前,樹葉間隙或蛀洞本應(yīng)該透明卻呈現(xiàn)背景色.原因,沒有啟用Alpha過濾.一般不可能用幾何形狀勾勒出葉子的形狀,只用較大的多邊形包圍葉子,用Alpha過濾掉空隙.此時不啟用Alpha過濾,出現(xiàn)Alpha為0的三角面也被渲染,但得到的是背景圖像,并且由于Alpha為0的三角面離視點近,后面的物體渲染無法通過深度測試補上透明的空隙區(qū)域.
26.atlgdi.h里有#pragma comment(lib, "opengl32.lib"),導(dǎo)致無源無故鏈接opengl32.lib失敗.
posted on 2008-09-27 09:13 RedLight 閱讀(1185) 評論(1) 編輯 收藏 引用 所屬分類: 3D渲染技術(shù)