[demo1].來一個最簡單的三角形吧

跳去目錄


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

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

? 需要加載的有

  1. GLUT_DOUBLE 雙緩沖窗口

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

  3. GLUT_DEPTH 深度測試模塊

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

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

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

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


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

至此,基本窗口就搭建完畢了,接下來開始寫窗口內的內容


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

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

當初始化窗口或拉動窗口邊界改變窗口大小時,將窗口大小改變?yōu)槌跏蓟拇笮』蚶瓌拥降拇笮?,如果不設置這一步的話,


然后進行繪制的準備

  1. 設置畫板的背景顏色

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

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

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

    GLBatch triangleBatch;
    
  5. 設置繪制方式與繪制頂點個數(shù),并將頂點數(shù)據(jù)拷貝進容器內

    /**
         * GL_TRIANGLES 三角形
         */
    triangleBatch.Begin(GL_TRIANGLES, 3);
    triangleBatch.CopyVertexData3f(vTops);
    
  6. 發(fā)送準備結束的信號,進入繪圖階段

    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那樣),并著色器的屬性(主要是設置顏色)

    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vPencil);
    
  3. 調用開始繪制的命令,并切換顯示器的緩沖區(qū)(現(xiàn)在一般的顯示器都是雙緩沖區(qū),在顯示的時候會進行新的繪制,繪制完畢后會顯示這次的繪制,并切換緩沖區(qū)并進行新的繪制)

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

Triangle.png

Demo在這里


跳去目錄

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容