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失敗.

轉載于:https://www.cnblogs.com/leven20061001/archive/2012/07/31/2724698.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260567.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260567.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260567.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C/C++ 中變量的聲明、定義、初始化的區別

今天突然思考到這樣的一個問題,發現已經在學習或者編寫程序的時候壓根就沒有注意到這些,經過比較這些還是有很大的區別的。 int i;//聲明 不分配地址空間 int j1;//轉載于:https://www.cnblogs.com/kuoyan/p/3687391.html

使用python matplotlib畫圖

本文的原文連接是: http://blog.csdn.net/freewebsys/article/details/52577631 未經博主允許不得轉載。 博主地址是:http://blog.csdn.net/freewebsys 1,關于 非常簡單的畫圖類庫。 簡直就是matlab的命令了。 python設計都是非常簡單的。 在使用pyt…

碧桂園博智林機器人總部大樓_碧桂園職院新規劃曝光!將建機器人實訓大樓、新宿舍、水幕電影等...

4月10日,廣東碧桂園職業學院召開院務(擴大)會議,學院黨政班子領導和相關負責人出席。會議集中觀看了學院四期工程的規劃區介紹,并就具體方案的可行性進行了研討。在碧桂園集團董事局主席楊國強先生的帶領下,碧桂園職院正緊隨集團產…

第5章 Python 數字圖像處理(DIP) - 圖像復原與重建16 - 約束最小二乘方濾波、幾何均值濾波

標題約束最小二乘方濾波幾何均值濾波約束最小二乘方濾波 F^(u,v)[H?(u,v)∣H(u,v)∣2γ∣P(u,v)∣2]G(u,v)(5.89)\hat{F}(u,v) \bigg[\frac{H^*(u,v)}{|H(u,v)|^2 \gamma |P(u,v)|^2} \bigg]G(u,v) \tag{5.89}F^(u,v)[∣H(u,v)∣2γ∣P(u,v)∣2H?(u,v)?]G(u,v)(5.89) P(u,…

securecrt是什么工具_比較一下幾款常用的SSH工具

WX眾號:基因學苑Q群:32798724更多精彩內容等你發掘!編者按工欲善其事,必先利其器。作為生物信息分析人員,每天都需要通過SSH工具遠程登錄服務器,那么使用一款高效的連接工具就很有必要。這次我們來點評一下…

華為手機如何調時間顯示_華為手機照片如何出現時間地點天氣,教你30秒,一學就會...

閱讀本文前,請您先點擊上面的“藍色字體”,再點擊“關注”,這樣您就可以繼續免費收到文章了。每天都會有分享,都是免費訂閱,請您放心關注。 …

Dreamweaver使用詳解

1:dreamweaver的基本功能,其中各種功能的靈活使用 轉載于:https://www.cnblogs.com/snowhumen/archive/2012/08/01/2618480.html

第5章 Python 數字圖像處理(DIP) - 圖像復原與重建17 - 由投影重建圖像、雷登變換、投影、反投影、反投影重建

標題由投影重建圖像投影和雷登變換 Johann Radon反投影濾波反投影重建由投影重建圖像 本由投影重建圖像,主要是雷登變換與雷登把變換的應用,所以也沒有太多的研究,只為了保持完整性,而添加到這里。 # 自制旋轉投影圖像# 模擬一個…

NFC

NFC近場通信技術是由非接觸式射頻識別(RFID)及互聯互通技術整合演變而來,在單一芯片上結合感應式讀卡器、感應式卡片和點對點的功能,能在短距離內與兼容設備進行識別和數據交換。 場通信是一種短距高頻的無線電技術,在…

day12-nginx

nginx 前臺服務器并發大 安裝nginx useradd –s /sbin/nologin nginx tar xf nginx-xxx.tar.gz yum install –y gcc pcre-devel openssl-devel ./configure --prefix/etc/nginx --usernginx --groupnginx --with-http_ssl_module --http-log-path/var/log/nginx/access.…

python args_Python可變參數*args和**kwargs用法實例小結

本文實例講述了Python可變參數*args和**kwargs用法。分享給大家供大家參考,具體如下: 一句話簡單概括:當函數的參數不確定的時候就需要用到*args和**kwargs,前者和后者的區別在于,后者引入了”可變”key的概念&#xf…

文件組備份還原

-- 參考 USE master; GO-- 測試的DB CREATE DATABASE DB_Test ON PRIMARY(NAME DB_Test,FILENAME C:\DB_Test.mdf ), FILEGROUP FG1 (NAME DB_Test_FG1,FILENAME C:\DB_Test_fg1.ndf ), FILEGROUP FG2 (NAME DB_Test_FG2,FILENAME C:\DB_Test_fg2.ndf ) LOG ON(NAME DB_…

php調用c++

1.在/var/www中建個測試文件夾 cpp 在此文件夾中新建c文件sort.cpp,如下 編譯并測試執行通過進行以下步驟。 2.在cpp文件夾下新建文件cpp.html,如下 3.同樣在cpp下建php文件cpp.php,如下 保存。 4.程序執行如下 提交后: 轉載于:ht…

AI+無線通信——Top7 (Baseline)分享與總結

從浩哥那里轉載 https://wanghao.blog.csdn.net/article/details/115813954 比賽已經告一段落,現在我們隊兌現承諾,將比賽方案開源給大家,互勉互助,共同進步。 隊伍介紹 我們的隊伍名是Baseline,我們因分享Baseline…

拼字符串成為時間,和兩個計算時間點的中間值

拼字符串成為時間,和兩個計算時間點的中間值 select convert(datetime,2016-09-18 SUBSTRING(CONVERT(varchar(100),d_bdate, 24), 0, 9),21) from B2C_daima where d_noB04 select case when Datename(hour,d_edate)> Datename(hour,d_bdate) then convert(dat…

tornado post第3方_[33]python-Web-框架-Tornado

1.TornadoTornado:python編寫的web服務器兼web應用框架1.1.Tornado的優勢輕量級web框架異步非阻塞IO處理方式出色的抗負載能力優異的處理性能,不依賴多進程/多線程,一定程度上解決C10K問題WSGI全棧替代產品,推薦同時使用其web框架…

android 串口調試工具_樹莓派通用串口通信實驗

一、介紹對于樹莓派 3B來說,他的UART功能有三種:1、內部藍牙使用;2、控制終端使用;3、與其他設備進行串口通信。在樹莓派USB TO TTL模塊實驗中學習了通過串口對樹莓派進行控制臺控制,讓串口作為控制終端調試口即 seria…

Laravel5.2目錄結構及composer.json文件解析

目錄或文件說明|– app包含Controller、Model、路由等在內的應用目錄,大部分業務將在該目錄下進行|  |– Console命令行程序目錄|  |  |– Commands包含了用于命令行執行的類&#xff…

ichat在線客服jQuery插件(可能是歷史上最靈活的)

ichat是一款開源免費在線客服jQuery插件,通過該插件,您可以自由的定制屬于自己的在線客服代碼。 ichat充分吸收傳統在線客服插件的優點,并加上自身的獨特設計,使得ichat可定制性異常強大。 ichat追求簡單實用,走小清新…

POJ 1007 DNA Sorting

按照字符串的逆序排序。 /*Accepted 100K 16MS C 863B 2012-08-03 08:30:48*/ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; const int MAXN 55, MAXM 110; struct str {char…