《OpenGL超级宝典第5版》学习笔记(一)—— 第一个OpenGL程序
生活随笔
收集整理的這篇文章主要介紹了
《OpenGL超级宝典第5版》学习笔记(一)—— 第一个OpenGL程序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
// GLTools庫(kù)包含了一個(gè)用于操作矩陣和向量的3D數(shù)學(xué)庫(kù),并依靠GLEW獲得OpenGL3.3中用來(lái)產(chǎn)生和渲染一些簡(jiǎn)單3D對(duì)象的函數(shù), // 以及對(duì)視覺(jué)平截頭體、相機(jī)類和變換矩陣進(jìn)行管理的函數(shù)的充分支持。 #include <GLTools.h>// GLShaderManager為GLTools的著色器管理器類。沒(méi)有著色器,我們就不能再OpenGL(核心架構(gòu))中進(jìn)行著色。著色器管理器類不僅允許我們創(chuàng)建并管理著色器, // 還提供一組“存儲(chǔ)著色器”(Stock Shader),它們能夠進(jìn)行一些初步和基本的渲染操作。 #include <GLShaderManager.h>// 判斷程序是在Mac上還是在Windows上建立,并選擇對(duì)應(yīng)的函數(shù)庫(kù)。 #ifdef _APPLE_ #include <glut/glut.h> #else #define FREEGLUT_STATIC #include <GL/glut.h> #endifGLBatch trangleBatch; GLShaderManager shaderManager;void ChangeSize(int w, int h) {// 設(shè)置視口大小。glViewport(0, 0, w, h); }void SetupRc() {// 用當(dāng)前顏色清除窗口glClearColor(0.0f, 0.0f, 1.0f, 1.0f);// 初始化著色器 shaderManager.InitializeStockShaders();// 在笛卡爾坐標(biāo)系中指定三角形三個(gè)頂點(diǎn)的坐標(biāo)。GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,0.5f, 0.0f, 0.0f,0.0f, 0.5f, 0.0f, };// 建立三角形的批次。trangleBatch.Begin(GL_TRIANGLES, 3);trangleBatch.CopyVertexData3f(vVerts);trangleBatch.End(); }void RenderScene(void) {// 清除緩沖區(qū)(顏色緩沖區(qū)、深度緩沖區(qū)、模板緩沖區(qū))。glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);// 指定三角形的顏色為紅色。GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };// 將顏色傳遞到存儲(chǔ)著色器,即GLT_SHADER_IDENTITY著色器,這個(gè)著色器只是使用指定顏色以默認(rèn)笛卡爾坐標(biāo)系在屏幕上渲染幾何圖形。 shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);// 指示將幾何圖形提交到著色器。 trangleBatch.Draw();// 啟用雙緩沖進(jìn)行繪制。 glutSwapBuffers();}int main(int argc, char* argv[]) {// 設(shè)置當(dāng)前工作目錄,在Windows中并不是必要的。gltSetWorkingDirectory(argv[0]);// 初始化GLUT庫(kù)。glutInit(&argc, argv);// 在創(chuàng)建窗口時(shí)使用下列類型的顯示模式:使用雙緩沖窗口、RGBA顏色模式、啟用深度測(cè)試以及模板測(cè)試。glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);// 設(shè)置窗口大小。glutInitWindowSize(800, 600);// 創(chuàng)建一個(gè)以“Triangle”為標(biāo)題的窗口。glutCreateWindow("Triangle");// 窗口大小改變的回調(diào)函數(shù)。 glutReshapeFunc(ChangeSize);// 窗口重繪的回調(diào)函數(shù)。 glutDisplayFunc(RenderScene);// 重新調(diào)用GLEW庫(kù)初始化OpenGL驅(qū)動(dòng)程序中所有丟失的入口點(diǎn),以確保OpenGL API對(duì)我們來(lái)說(shuō)完全可用。GLenum err = glewInit();if (GLEW_OK != err){fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));return -1;}// 創(chuàng)建并初始化渲染環(huán)境。 SetupRc();// 啟用主循環(huán)。 glutMainLoop();return 0 ;} View Code程序運(yùn)行結(jié)果:
?
轉(zhuǎn)載于:https://www.cnblogs.com/ppffs/p/3230213.html
總結(jié)
以上是生活随笔為你收集整理的《OpenGL超级宝典第5版》学习笔记(一)—— 第一个OpenGL程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Storm-源码分析-Stats (ba
- 下一篇: HDOJ 1175 连连看 DFS