1. 程式人生 > >opengl使用總結(包含遇到的問題以及解決之道)

opengl使用總結(包含遇到的問題以及解決之道)

1.  gluLookAt使用方法:
 glMatrixMode( GL_MODELVIEW );
    // 重置模型觀察矩陣。
    glLoadIdentity();
    // 選擇模型觀察矩陣
    gluLookAt( 3.0f, 2.5f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f );
注:在呼叫gluLookAt之前一定要記得呼叫glLoadIdentity來重置當前指定的矩陣為單位矩陣.不然就會出問題


2. 進行紋理對映時發現紋理和顏色混合了,解決之道:

要遮蔽glcolor3f的影響,只需新增:

glColor3f(1.0, 1.0, 1.0 );  //使得下面正方體的紋理對映不受最下面的正方體和四面體中的glColor3f的影響
或新增:glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

3. opengl中進行紋理貼圖時不顯示貼圖圖片,除錯時發現:
glGenTextures(6, &texture[i]); 
glBindTexture(GL_TEXTURE_2D, texture[i]);
//繫結紋理圖片後,發現texture陣列始終為0,原因是載入紋理,呼叫glGenTextures之前應該完成opengl視窗
的初始化,即完成下面呼叫:
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);  
glutInitWindowPosition(0, 0);
glutInitWindowSize(800, 600);
glutCreateWindow("Wander");
wander.load_GL_textures1(); //此時才能呼叫載入紋理函式,呼叫紋理載入子例程


1.

 glFrontFace(GL_CCW); //指定逆時針為正面

    glCullFace(GL_BACK); // 使得背面不可見

    glEnable(GL_CULL_FACE);

2.

// 金字塔物體沒進行紋理對映,所以此時不應該啟用紋理對映,否則會看不到該物體

//glEnable(GL_TEXTURE_2D);

// 啟用紋理對映,在要進行紋理對映的物體前啟用紋理對映,繪製完物體後關閉紋理對映,若在所有繪製物體前啟用,若某個物體未使用glTexCoord2f,則該物體將會看不見

3.

    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);  // Clear Screen And Depth Buffer

    glMatrixMode(GL_MODELVIEW); //設定模型觀察矩陣,作用是用於在三維空間中確定物體的位置

    glLoadIdentity(); //M=I,I為單位矩陣

    glColor3f( 1.0f, 0.0f, 0.0f );

    glBegin(GL_TRIANGLES);

    glVertex3f( 0.0f, 2.0f, 0.0f);

    glVertex3f( -1.0f, -1.0f, 0.0f);

    glVertex3f( 1.0f, -1.0f, 0.0f);

    glEnd();

    glTranslatef( 1.0f, 3.0f, 0.0f);//x平移1個單位,y平移3個單位,z保證不變,對應的矩陣:

    // 平移後,M=M*K=I*K,K為x平移1個單位,y平移3個單位,z保證不變的平移矩陣

    //glRotatef(90.0f, 0.0f, 0.0f, 1.0f ); //逆時針旋轉90

    glRotatef( -90.0f, 0.0f, 0.0f,1.0f ); //順時針旋轉90

    //旋轉後,M=M*R=K*R,R為上面對應的選擇矩陣

    /*

    K=

    1     0    0     1

    0     1    0     3

    0     0    1     0

    0     0    0     1

繞z軸旋轉@度的旋轉矩陣,R=

    [email protected]     [email protected]    0     0

    [email protected]     [email protected]     0     0

    0        0        1     0

    0        0         0    1

    @=-90代入之得:

    0     1    0     0

    -1     0    0     0

    0     0    1     0

    0     0    0     1

得M=

    0     1    0     1

    -1     0    0     3

    0     0    1     0

    0     0    0     1

然後把下面三個座標的齊次座標右乘M,即得最終的座標位置,

    P'= MP,P為原始座標對應的齊次座標,如第一個點(0.0,2.0,0.0)的齊次座標為(0.0,2.0,0.0,1.0)

得到最終的三個座標位置為:

    A1 =

    3

    3

    0

    1

    A2 =

    0

    4

    0

    1

    A3 =

    0

    2

    0

    1

最終畫出該三個點對應的三角形

    */

    glColor3f(1.0f, 0.0f, 0.0f );

    glBegin(GL_TRIANGLES);

    glVertex3f(0.0f, 2.0f, 0.0f );

    glVertex3f(-1.0f, -1.0f, 0.0f );

    glVertex3f(1.0f, -1.0f, 0.0f );

    glEnd();

結果如下:


注:OpenGL使用的是右乘

4. 紋理對映的圖片尺寸最大不能超過256*256,最好用bmp圖片

此影象的寬和高必須是2的n次方;寬度和高度最小必須是64象素;並且出於相容性的原因,影象的寬度和高度不應超過256象素。如果您的原始素材的寬度和高度不是64,128,256象素的話,使用影象處理軟體重新改變影象的大小。

我曾經說過有辦法可以繞過OpenGL對紋理寬度和高度所加的限制——64、128、256,等等。辦法就是 gluBuild2DMipmaps。據我的發現,您可以使用任意的點陣圖來建立紋理。OpenGL將自動將它縮放到正常的大小。

    gluBuild2DMipmaps(GL_TEXTURE_2D,3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB,GL_UNSIGNED_BYTE, TextureImage[0]->data);

注:好像只能載入bmp圖片,不能是其他型別的圖片

5.

/*

    目的是為了重置模型觀察矩陣。如果我們沒有重置,直接呼叫glTranslate的話,會出現意料之外的結果。

    因為座標軸已經旋轉了,很可能沒有朝著您所希望的方向。所以我們本來想要左右移動物件的,

    就可能變成上下移動了,取決於您將座標軸旋轉了多少角度。

    */

6. 預設視點位置:

視點預設的位置在(0,0,0)點,朝向是垂直螢幕向裡(即Z軸負方向)。

你在繪製物體的時候注意把物體的Z座標向後移幾個單位就看見了。

視點預設不用改,要想改,可以通過設定glLookAt函式設定

7.

glGenTextures(3, &texture[0]);                  // 建立紋理 glGenTextures函式根據紋理引數返回n個紋理索引,&texture[0]儲存紋理索引

        // 建立 Nearest濾波貼圖

        /*

        glBindTexture實際上是改變了OpenGL的這個狀態,它告訴OpenGL下面對紋理的任何操作都是對它所繫結的紋理物件的,

比如glBindTexture(GL_TEXTURE_2D,1)告訴OpenGL下面程式碼中對2D紋理的任何設定都是針對索引為1的紋理的

        */

8. OpenGL不設定顏色,直接繪製四個頂點,得到的正方形,預設會為白色;

9.  





相關推薦

opengl使用總結(包含遇到的問題以及解決

1.  gluLookAt使用方法:  glMatrixMode( GL_MODELVIEW );     // 重置模型觀察矩陣。     glLoadIdentity();     // 選擇模型觀察矩陣     gluLookAt( 3.0f, 2.5f, 5.0f,

margin的摺疊與計算以及解決

今天就來捋一捋簡單低調卻奢華的css,主要魯三個點: 一.margin的摺疊 二.margin摺疊後的計算 三.margin摺疊的解決之道 先來捋一捋margin的摺疊: 主要分為父子摺疊以及兄弟摺疊,都是垂直方向上的摺疊 父子摺疊(不一定是父子,可以是多層級的包含,只要

雲計算:為什麽說存儲是雲計算發展瓶頸之一?虛擬化是解決

雲計算 虛擬機 固態硬盤 數據庫 成本 共享存儲模型文件/記錄層(File/Record Layer)提供存儲資源訪問方法,包括:文件系統,數據庫,緩存等將用戶視圖的數據單元(文件/記錄/對象)保存到存儲空間,並記錄映射關系,負責維護命名空間、存儲空間分配性能優化,分布式系統集群管理與控制

授人以魚不如授人以漁——CPU漏洞的Symantec解決

感染 內存 manage define 如何 -s 彈性 加固 images 授人以魚不如授人以漁——CPU漏洞的Symantec解決之道 前言1月4日,國外安全研究機構公布了兩組CPU漏洞,由於漏洞嚴重而且影響範圍廣泛,引起了全球的關註,成為2018開年以來第一個信息安

紅芯為企業數據安全與隱私保護提供解決

企業辦公瀏覽器過去的一年,網絡安全領域可謂機遇與挑戰並存。一方面,《網絡安全法》的實施,讓人們在網絡安全領域感受到了“國家力量”;另一方面,網絡攻擊、信息泄漏、詐騙等安全事件屢屢爆出,不斷敲響著數據、信息安全的警鐘。 相關數據顯示,現在的網絡安全威脅正在從傳統概念上的PC端和移動端的病毒模式逐漸向數字化和破壞

一周總結《代碼整潔》讀後感

當前 領域 編程 測試驅動開發 更多 編寫 代碼整潔之道 寫代碼 能夠 讀了第五章測試驅動開發,說真的這一章我幾乎是沒看懂,可能還沒有接觸到這麽深的領域,看得我雲裏霧裏的。 1.在實際編程時,你不得不花費大量的時間來寫代碼,然後花更多的時間讓代碼編譯通過,最後再花更多的時間

一周總結《代碼整潔》讀後感1

商業價值 軟件開發 概率 簡單 是你 目的 一是 代碼整潔之道 方法 到了第十章了,對於大項目的預估也包括在了裏面。 1.預估是軟件開發人員面對的最簡單也是最可怕的活動之一了。 2.預估影響到的商業價值巨大,關乎聲譽,也給我們帶來了許多的苦惱和挫折。預估是業務人員和開發人員

ionic的actionsheet安卓樣式不正常的坑及解決

oid 技術分享 action nsh 註釋 正常的 安卓 img info 這是actionsheet該有的樣子,可是android下變成了這樣: 百度後,發現修改lonic.css,註釋這段代碼就可以了: ionic的actionsheet安卓樣

單元測試多線程解決

tac multipl 還需要 rst 測試 方法 成功 time 發的 遇到問題 曾今在開發的過程遇到一個問題,當時有一個服務是群發郵件的,由於一次發送幾十個上百個,所以就使用了多線程來操作。 在單元測試的時候,我調了這個方法測試下郵件發送,結果總是出現莫名其妙的問題,每

AngularJS進階(三十五)瀏覽器相容性解決

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

LayaAir小遊戲的坑解決

.com 如果 tex sha 版本 目前 代碼 true RoCE 版本 : LayaAir2.0.0bate4 一 : MiniAdpter.init 目前直接在代碼裏設會報錯 , 那只有在底層 laya.wxmini.js裏面設置了Ⅰ,主域 : MiniAdpter.

自助查詢解決

如果你曾經出國旅遊,尤其是去歐洲自由行,有沒有在餐館點菜的慘痛經歷?(當然金拱門、K 記不算……),面對選單上一個個似是而非的單詞,有沒有憂桑? 有沒有惆悵?有沒有很……呃,飢餓? 同樣,在做前端業務查詢時,如果你不清楚 SQL 這種“點菜”的語言,那麼怎麼去找那些欄位、設

網易雲捕效能踩坑解決上篇

本文由作者餘寶虹授權網易雲社群釋出。 從零開始設計開發一個日處理資料8億的大資料高併發實時系統,哪些效能問題需要特別注意?這裡我們一起梳理一下,本文中我將以PE,SA同學戲稱的DDOS系統—網易雲捕設計開發實踐中兩年的時間裡碰到的真實問題,踩過的坑及解決問題的方法和大家一起討論如何解決這些問題。文中不會大談

golang包管理解決——go modules初探

golang的包管理是一直是為人詬病之處,從golang1.5引入的vendor機制,到準官方工具dep,目前為止還沒一個簡便的解決方案。 不過現在go modules隨著golang1.11的釋出而和我們見面了,這是官方提倡的新的包管理,乃至專案管理機制,可以不再需要GO

Windows 環境下 Git clone pull fetch 慢 解決

問題描述: git clone、pull 特別慢  ,專案大概是370MB, 每次pull ,Receving objects:*******   20kb/s ,傳輸速度才20kb/s 左右,進度70%左右就卡頓,很捉急。糾結了大半天,網上查閱了好多帖子,最終找到

HTTPS 降級攻擊的場景剖析與解決

HTTPS 一定安全麼 HTTP 協議,本身是明文傳輸的,沒有經過任何安全處理。那麼這個時候就很容易在傳輸過程中被中間者竊聽、篡改、冒充等風險。這裡提到的中間者主要指一些網路節點,是使用者資料在瀏覽器和伺服器中間傳輸必須要經過的節點,比如 WIFI 熱點,路由器,防火牆,反

DJI新版模擬器遙控器連線不上問題解決

最近大疆官方推出了一款較之DJI GO 4 APP中的模擬器更加強大的模擬器,可是在官網下載安裝後死活連線不上遙控器,本人用的時御 air的遙控器,也在模擬器支援的遙控器範圍內,檢視使用手冊也沒辦法解決問題,懷疑是驅動的問題,但是怎麼也沒解決,最後在查閱很多資料

移動端1px產生原因及解決

產生原因     因為Retine屏的解析度始終是普通螢幕的2倍,1px的邊框在devicePixelRatio=2的retina屏下會顯示成2px,所以在高清瓶下看著1px總是感覺變胖了,關於詳細原因介紹參考大漠的文章:http://www.w3cplus.com/css

專案管理中的需求變更分析和解決

一、令人煩惱的需求變更 作為一個軟體專案經理,在專案開發進行中,你是否遇到過這樣的問題:客戶的一個電話,就推翻了之前你與客戶、與你自己的開發團隊,經過再三討論而確認定下來的需求。之後你就重新開始了和客戶、和你的開發團隊進入新一輪的需求談論中,甚至是無休止的談論,甚至要重新設

大資料從“小”做起——中小企業Big Data解決

本文是最新的拙作,希望能大家能提點意見^_^ 任何一個時代或者模式的興起,都離不開與之相關的Killer App,比如,C/S時代的SAP ERP,網際網路 1.0 時代的門戶,以及網際網路 2.0時代的搜尋和SNS等,那麼在當今雲端計算這個時代有那些Killer App呢?當然首當其衝的肯定是以VM