天天看點

[OpenGL]環境搭建以及OpenGL初識 OpenGL初識 OpenGL環境搭建

想往遊戲行業發展的話,經常被提及到的就是OpenGL和DirectX,這兩者聽起來感覺是一門挺高深的技術,今天我也開始摸索學習OpenGL,那麼OpenGL到底是什麼?它和DirectX有什麼差別和聯系?

OpenGL隻是一套圖形函數庫

DirectX包含圖形、聲音、輸入、網絡等子產品。

但就圖形而論,DirectX的圖形庫性能不如OpenGL,OpenGL穩定,可以跨平台使用,DirectX隻支援Windows平台,是以OpenGL還是有它的優勢!OpenGL ES是OpenGL的嵌入裝置版本,為了适合潛入裝置性能要求較高,進而OpenGL ES删減了一些低性能的操作方式。

與C語言緊密結合

強大的可移植性

套性能的圖形渲染

官網:http://www.opengl.org/

OpenGL ES 1.X:

OpenGL ES 2.X:

2.glut.h放在了C:\Program Files\Windows Kits\8.0\Include\um\gl 目錄下(通過在C槽搜尋GL.h得來)

3.glut.lib和glut32.lib放到 E:\Microsoft Visual Studio 11.0\VC\lib

4.glut.dll和glut32.dll放到"C:\Windows\System32"

5.建立空白工程,随便.c或者.cpp

代碼如下:

#include <gl\glut.h> //包含OpenGL實用庫,這是GLUT頭檔案好含<GL/gl.h>和<GL/glu.h>  

//畫圖函數  

void myDisplay(void)  

{  

    //清除函數  

    glClear(GL_COLOR_BUFFER_BIT);//masks是bit位的,用于标示要被清除的緩沖區。 這個參數有四種:GL_COLOR_BUFFER_BIT,  GL_DEPTHBUFFER_BIT,GL_ACCUM_BUFFER_BIT  和 GL_STENCIL_BUFFER_BIT。//(顔色緩沖,深度緩沖,累加器緩沖,模闆緩沖?)  

    /*GL_COLOR_BUFFER_BIT 

        Indicates the buffers currently enabled for color writing.     指出緩沖區目前可用于寫入顔色 

    GL_DEPTH_BUFFER_BIT 

        Indicates the depth buffer.                                                   指出是深度緩沖區 

    GL_ACCUM_BUFFER_BIT 

        Indicates the accumulation buffer.                                       指出累加緩沖區 

    GL_STENCIL_BUFFER_BIT 

        Indicates the stencil buffer.                                                  指出模闆緩沖區*/  

    //繪制一個矩形,四個參數标示了位于對角線(左上角)上的兩個點的橫、縱坐标。  

    //glRectf(0, 0, 0.5f, 0.5f);  

    glRectf(0.5, 0.5, 1, 1);  

    glRectf(0,0,-0.5f,0.5f);  

    //繪制四個點  

    glBegin(GL_POINTS);  

    glVertex2f(0.0f,0.0f);  

    glVertex2f(0.5f,0.0f);  

    glVertex2f(0.0f,-0.5f);  

    glVertex2f(0.5f,-0.5f);  

    glEnd();  

    //繪制兩條線  

    glBegin(GL_LINES);  

    glVertex2f(-1,0.0f);  

    glVertex2f(-0.5f,0.0f);  

    glVertex2f(-0.75f,0);  

    glVertex2f(-0.75f,-0.5f);  

    glVertex2f(-0.85f,-0.4f);  

    //保證前面的OpenGL指令會立即執行(而不會讓他們在緩沖區等待)  

    glFlush(); //glFlush()清空緩沖區,将指令送往緩硬體立即執行,但是它是将指令傳送完畢之後立即傳回,不會等待指令執行完畢。當調用glFlush時,物體會一個一個地出現在螢幕上。  

    //glFinish(); //将緩沖區的指令立即送往硬體執行,但是要一直等到硬體執行完這些指令之後才傳回。glFinish通常會帶來性能上的損失,GPU和CPU并行性能喪失。Direct3D不支援Finish的概念。  

}  

int main(int argc, char *argv[])  

    //對GLUT進行初始化,必須在其他GLUT之前調用一次,格式比較死闆,一般就照着寫一次即可。  

    glutInit(&argc, argv);  

    //設定顯示方式,GLUT_RGB标示使用RGB顔色,GLUT_SINGLE表示使用單緩沖,與之對應的還有GLUT_DOUBLE(使用雙緩沖)  

    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);  

    //建立視窗在螢幕中的位置  

    glutInitWindowPosition(100, 100);  

    //初始化預設的大小  

    glutInitWindowSize(400, 400);  

    //根據前面的資訊建立視窗,參數為視窗的标題。注意:這裡視窗建立後并不會立馬顯示到螢幕上,需要執行glutMainLoop()才會顯示到螢幕上  

    glutCreateWindow("Hello OpenGL-Create By 丁小未");  

    //設定一個函數,當需要進行畫圖時候,這個函數就會被調用  

    glutDisplayFunc(&myDisplay);   

    //進行消息循環,了解為可以顯示視窗  

    glutMainLoop();  

    return 0;  

效果圖:

部分解釋參考每行代碼之後的注釋。

本文轉蓬萊仙羽 51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1429146,如需轉載請自行聯系原作者

繼續閱讀