[demo1].來一個(gè)最簡單的三角形吧

跳去目錄


首先,我們需要搭建一個(gè)基本的窗口

1. 初始化glut模塊
glutInit(&argc, argv);
2. 加載配置模塊

? 需要加載的有

  1. GLUT_DOUBLE 雙緩沖窗口

  2. GLUT_RGBA RGBA顏色模式(后面嘗試一下能否家在HSV顏色模式)

  3. GLUT_DEPTH 深度測(cè)試模塊

  4. GLUT_STENCIL 模版緩沖區(qū)

    /**
         * GLUT_DOUBLE 雙緩沖窗口 是指繪圖命令實(shí)際上是離屏緩存區(qū)執(zhí)行的,然后迅速轉(zhuǎn)換成窗口視圖漓摩,這種方式經(jīng)常用來生成動(dòng)畫效果
         * GLUT_RGBA RGBA顏色模式 RGBA通道,R G B A 的范圍分別為 0-1
         * GLUT_DEPTH 深度測(cè)試 標(biāo)志將一個(gè)深度緩存區(qū)分配為顯示的一部分,因此我們能夠執(zhí)行深度測(cè)試
         * GLUT_STENCIL 模版緩沖區(qū) 確保有一個(gè)可用的模版緩沖區(qū)
         */
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
    
3.設(shè)置窗口大小 (后面的視口大小盡量與視圖大小一致)
glutInitWindowSize(600, 400);
4.給這個(gè)窗口取個(gè)名字并創(chuàng)建這個(gè)窗口
glutCreateWindow("Triangle");
5.設(shè)置一個(gè)方法蜒什,用于捕獲窗口改變時(shí)的消息
/**
 * @param w 捕獲到的寬度
 * @param h 捕獲到的的高度
 */
void ChangeSize(int w, int h)
{
    
}

glutReshapeFunc(ChangeSize);
6.注冊(cè)一個(gè)方法,用于設(shè)置顯示的內(nèi)容(屏幕刷新的時(shí)候)
void RenderScene(void)
{
    
}

glutDisplayFunc(RenderScene);
7.初始化GLEW庫疤估,并檢查驅(qū)動(dòng)初始化過程中是否出現(xiàn)問題灾常,以確保OpenGL API是完整的,可用的
GLenum status = glewInit();
    if (status != GLEW_OK) {
        printf("GLEW Occur an error: %s \n", glewGetErrorString(status));
        return 1;
    }
8.設(shè)置渲染環(huán)境(準(zhǔn)備工作)
void SetupRC()
{
    
}


SetupRC();
9.加載并啟動(dòng)MainLoop配置
glutMainLoop();

至此铃拇,基本窗口就搭建完畢了钞瀑,接下來開始寫窗口內(nèi)的內(nèi)容


接下來,配置一下窗口大小發(fā)生變化時(shí)的操作

void ChangeSize(int w, int h)
{
    glViewport(0, 0, w, h)
}

當(dāng)初始化窗口或拉動(dòng)窗口邊界改變窗口大小時(shí)慷荔,將窗口大小改變?yōu)槌跏蓟拇笮』蚶瓌?dòng)到的大小雕什,如果不設(shè)置這一步的話,


然后進(jìn)行繪制的準(zhǔn)備

  1. 設(shè)置畫板的背景顏色

    //設(shè)置成了水藍(lán)色
    glClearColor(212/255.0, 242/255.0, 231/255.0, 1);
    
  2. 創(chuàng)建一個(gè)全局的著色器显晶,用來繪制圖案贷岸,并初始化

    GLShaderManager shaderManager;
    shaderManager.InitializeStockShaders()
    
  3. 設(shè)置圖形頂點(diǎn)數(shù)據(jù)

    GLfloat vTops[] = {
            -0.4, -0.3, 0,
            0.6, -0.7, 0,
            0.2, 0.5, 0
        };
    
  4. 創(chuàng)建一個(gè)全局容器,用來描繪路徑

    GLBatch triangleBatch;
    
  5. 設(shè)置繪制方式與繪制頂點(diǎn)個(gè)數(shù)磷雇,并將頂點(diǎn)數(shù)據(jù)拷貝進(jìn)容器內(nèi)

    /**
         * GL_TRIANGLES 三角形
         */
    triangleBatch.Begin(GL_TRIANGLES, 3);
    triangleBatch.CopyVertexData3f(vTops);
    
  6. 發(fā)送準(zhǔn)備結(jié)束的信號(hào)偿警,進(jìn)入繪圖階段

    triangleBatch.End();
    

最后開始畫圖

  1. 清空緩沖區(qū)(可能保留有之前的狀態(tài),需要清空)

    /**
         * GL_COLOR_BUFFER_BIT 顏色緩沖區(qū)
         * GL_DEPTH_BUFFER_BIT 深度緩沖區(qū)
         * GL_STENCIL_BUFFER_BIT 模版緩沖區(qū)
         */
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );
    
  2. 選中著色器(就像ps那樣)唯笙,并著色器的屬性(主要是設(shè)置顏色)

    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vPencil);
    
  3. 調(diào)用開始繪制的命令螟蒸,并切換顯示器的緩沖區(qū)(現(xiàn)在一般的顯示器都是雙緩沖區(qū),在顯示的時(shí)候會(huì)進(jìn)行新的繪制崩掘,繪制完畢后會(huì)顯示這次的繪制七嫌,并切換緩沖區(qū)并進(jìn)行新的繪制)

    triangleBatch.Draw();
    glutSwapBuffers();
    
  4. 這個(gè)時(shí)候,三角形就出現(xiàn)在屏幕上啦 ???????? Nice Job~

Triangle.png

Demo在這里


跳去目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呢堰,一起剝皮案震驚了整個(gè)濱河市抄瑟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖皮假,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋拟,死亡現(xiàn)場離奇詭異,居然都是意外死亡惹资,警方通過查閱死者的電腦和手機(jī)贺纲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褪测,“玉大人猴誊,你說我怎么就攤上這事∥甏耄” “怎么了懈叹?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長分扎。 經(jīng)常有香客問我澄成,道長,這世上最難降的妖魔是什么畏吓? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任墨状,我火速辦了婚禮,結(jié)果婚禮上菲饼,老公的妹妹穿的比我還像新娘肾砂。我一直安慰自己,他們只是感情好宏悦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布镐确。 她就那樣靜靜地躺著,像睡著了一般肛根。 火紅的嫁衣襯著肌膚如雪辫塌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天派哲,我揣著相機(jī)與錄音臼氨,去河邊找鬼。 笑死芭届,一個(gè)胖子當(dāng)著我的面吹牛储矩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褂乍,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼持隧,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了逃片?” 一聲冷哼從身側(cè)響起屡拨,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后呀狼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裂允,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年哥艇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绝编。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡貌踏,死狀恐怖十饥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祖乳,我是刑警寧澤逗堵,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站眷昆,受9級(jí)特大地震影響砸捏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隙赁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梆暖。 院中可真熱鬧伞访,春花似錦、人聲如沸轰驳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽级解。三九已至冒黑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勤哗,已是汗流浹背抡爹。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芒划,地道東北人冬竟。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像民逼,于是被迫代替她去往敵國和親泵殴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348