1. 程式人生 > >OpenGL實踐之第一個視窗

OpenGL實踐之第一個視窗

OpenGL實踐之第一個視窗

DionysosLai [email protected]

引言:

        OpenGL 經過多年的發展,到目前為止已經發生了全新的變化,從原本已函式為中心方法,轉變成已桌上技術為中心。引用《OpenGL權威指南》 第八版中一段話:

本書的內容是顛覆性的!對於那些已經閱讀過本書以前版本的讀者來所,這一版完全根據OpenGL應用程式開發的最新方法和技術進行了重新。本書將經典紅寶書的以函式為中心的方法,與《OpenGL著色語言》(通常也被稱作橘皮書)一書中的著色技術進行了融合。[1]

        因此,通過本系列教程,希望大家對全新的OpenGL

技術有個基本的認識,並且能夠初步入門,並在將來的時間,我們可以一起暢談這方面技術。

在閱讀本書時,最好手本能夠有《OpenGL 權威指南》一書,每篇文章結尾,會附錄書中相關知識點和閱讀頁碼等。

準備工作:

        在OpenGL中並沒有特別指定任何建立和操作視窗函式。因此每一個作業系統會專門提供一個介面,這個介面綁定了OpenGL和其視窗系統。Microsoft提供了WGLMacOS提供了CGL

        GLUT庫(OpenGL Utility Tookit)可以直接操作這些介面並在視窗中顯示圖形,有了這個庫,我們就可以從圖形介面中解放出來。GLUT原本是紅寶書第二版中的示例程式。自那以後,由於其簡單、跨平臺的特點,使其在各種應用中廣泛應用

[3] freeglutGlut庫的一個 開源實現。

配置工作:

Windows:

        解壓只用,看下文件  README.win32。使用 CMake 建立vs專案檔案。然後使用vs2013軟體編譯專案檔案。下一步開始配置工作。

include\GL裡面所有的.h檔案複製到D:\Microsoft Visual Studio 10.0\VC\include資料夾,需要建立GL資料夾

        把bin裡面的freeglut.dll複製到C:\Windows\System32資料夾裡,把freeglut.lib複製到D:\Microsoft Visual Studio 10.0\VC\lib

裡(注意,這裡是64位機器,放在資料夾SysWOW64中,同時,dlldebugrelease兩個版本,使用哪個,取決於自己專案要求)[2]

程式碼大綱:

        #include <gl/freeglut.h>

        新增freeglut 標頭檔案。使用freeglut.h檔案,就不要包含gl.h或者glu.h檔案

        glutInit(&argc, argv);

        對GLUT進行初始化,並處理所有的命令列引數。 應該在呼叫其他任何GLUT函式之前呼叫。

        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);

        配置一些GLUT模式,GLUT_DOUBLE,開啟雙緩衝模式,注意開始雙緩衝模式,在顯示時,必須呼叫glutSwapBuffers(), 與值對應是GLUT_SINGLE 單快取模式;  GLUT_RGBA開始顏色RGB模式,與之對應是GLUT_INDEX,顏色索引模式。

        glutInitWindowSize(500, 500);

        glutInitWindowPosition(100, 100);

        glutCreateWindow("01");

        配置視窗引數,並建立視窗。

        glClearColor(0.0, 0.0, 0.0, 0.0);

        渲染並不是一個簡單的過程,我們必須指定各種著色器、緩衝和標誌位等。另一方面,我們經常希望在一些渲染操作中,能夠保持同樣的一些配置引數。因此,OpenGL採用狀態機模式,並在狀態機中設定儲存標誌位和值。

        這裡,我們設定了清楚幀快取時顏色。顏色有4個通道(RGBA)值,並且值在0.0到1.0之間。

        glutDisplayFunc(display);

        視窗系統中,大部分的互動是通過回撥函式實現。這裡設定了顯示回撥(display callback),即GLUT在每次更新視窗內容的時候會自動呼叫display 函式。像回撥函式,還有其他一些回撥函式,比如使用者輸入、重設視窗尺寸等不同操作。

        glutMainLoop();

        這個函式將視窗控制權交給GLUT,開啟內部無限無限迴圈。在這個迴圈中,函式會監聽視窗和作業系統。這些監聽包括視窗重繪,使用者輸入等。在本章中,我們註冊了一個顯示顯示回撥函式,因此我們可以渲染畫面。

        void display()

        {

                glClear(GL_COLOR_BUFFER_BIT);

                glutSwapBuffers();

                glFlush();

        }

        這個我們註冊的顯示回撥函式。在這裡,我們只做了最簡單的幀緩衝清除工作,使用的顏色就是上面glClearColor介面中配置的顏色。glutSwapBuffers() 函式 是告訴GLUT 交換前快取和後快取角色。這個介面是必須呼叫的,因為我們之前GLUT模式時,開啟雙緩衝模式。

        本章教程到此結束,下一章我們將學習如何繪製一個三角形。最後,祝大家三八節快樂了。

[延伸閱讀]:

[1] 《OpenGL 程式設計指南》前言 第三版。

[4]《OpenGL 程式設計指南》前言 第三版。P10 ~P12。

相關推薦

OpenGL實踐第一視窗

OpenGL實踐之第一個視窗 DionysosLai [email protected] 引言:         OpenGL 經過多年的發展,到目前為止已經發生了全新的變化,從原本已函式為中心方法,轉變成已桌上技術為中心。引用《OpenGL權威指南》 第八版中一

opengl學習筆記-第一視窗

/* #include<glad\glad.h>一定要放在GLEW之前 */ #include<glad\glad.h> #include<GLFW\glfw3.h> #include<iostream>

OpenGL學習筆記:GLAD和第一視窗

環境 系統:Windows10 64位 家庭中文版 IDE:Visual Studio 2017 專業版 參考教程:https://learnopengl-cn.github.io/01 Getting started/03 Hello Window/ 步驟 1.獲取GLAD

(一)MFC學習建立第一視窗

環境:windows10+vs2017 需要兩個類: 1,CMyWnd,繼承自CFrameWnd(視窗框架類,視窗有就是這個類的例項化物件) 2,CMyApp,繼承自CWinApp(app類,在這個類中的InitInstance方法中例項化視窗,初始化自己的視窗型別成員變數) 使

OpenGL系列學習教程(零)---第一視窗

【寫在前面】 首先,要說明的是:這個系列將使用glfw+glad作為基本的視窗系統和opengl擴充套件,編譯器則為 VS2013。 其次,本篇從獲取、編譯、連結glfw+glad庫講起,然後建立glfw環境,並保證它能夠正確地建立OpenGL上下文並顯示視窗,所以已經搭

python3自動化實踐2第一測試指令碼編寫

場景設計: 1. 操作案例:https://www.baidu.com  2. 測試場景     開啟Baidu     輸入selenium     點選搜尋按鈕      關閉瀏覽器#-*- encoding:utf-8 -*- #匯入selenium的webdriver

OpenGL 入門基礎教程 —— 在第一視窗繪製一個三角形

首先了解緩衝區物件相關: 1:緩衝區物件的定義 GLuint vertexbuffer; //定義了一個unsigned int型別的正整形緩衝區物件2:建立緩衝區物件—建立 void glGenBuffers(GLsizei n, GLuint *buffers)

第一章: Python 第一程序

python在linux環境上安裝python3.6.2程序.到官網下載源碼包安裝:安裝python3.6.2的系統依賴包:yun -y install zlib*解壓安裝包:tar -xvf Python-3.6.2.tar 進入安裝目錄:cd Python-3.6.2添加配置,指定安裝位置:./confi

(一)shiro第一項目

ner ppi ttr pid sta 等號 res ctype tco 一、創建maven的web工程,引入shiro依賴 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w

Spark學習第一程序打包、提交任務到集群

4.4.2 2.6.0 reat apach import chmod 程序 rsa cas 1、免秘鑰登錄配置: ssh-keygen cd .ssh touch authorized_keys cat id_rsa.pub > authorized_keys ch

自動化測試學習筆記第一代碼

href 自動化 筆記 定義 imp 信息 查找 clas 驅動 實現第一個自動化代碼,控制瀏覽器打開網址,輸入信息並點擊按鈕。 ①導入selenium相關模塊 ②調用selenium的瀏覽器驅動 ③通過驅動訪問網址URL ④通過驅動操作頁面元素 ⑤通過驅動關閉瀏覽器

OpenGL學習 02 第一三角形

三角形示例程式碼,補全了LoadShader等部分(使用vs2015 控制檯程式)。 #include "stdafx.h" #include <iostream> #include <vector> using namespace std; #include <G

劍指offer第一只出現一次的字元

1.題目描述 在一個字串(0<=字串長度<=10000,全部由字母組成)中找到第一個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). 2.問題分析 第一次遍歷,統計每個字串出現的次數; 第二次遍歷,如果有那個字元出現次數為1,

Django系列第一專案搭建

一、安裝   (1)使用pip3 install django在控制檯安裝django;   (2)新增到環境變數    二、建立專案   方式1:通過命令建立  (1)建立project: 通過django-admin.py startproject mysite: mysite為自己的專案名稱

安卓學習筆記 -- (安裝環境) Android Studio安裝配置、環境搭建詳細步驟及基本使用 Android Studio和SDK官方開發工具下載 Android Studio教程從入門到精通 Android開發-第一程式:HelloWorld!

1、下載Android Studio安裝配置、環境搭建詳細步驟及基本使用    https://www.cnblogs.com/yanglh6-jyx/p/Android_AS_Configuration.html https://blog.csdn.net/k491022087/ar

2018年11月3日java學習第一程式 HelloWord以及註釋 ,API

1.用記事本寫HelloWord. .java -》javac.exe-》.class-》java.exe-》結果 main 方法是程式的入口 //單行註釋;/* */多行註釋 程式碼例項 class HelloWord { public stat

Android開發入門第一安卓工程:HelloWorld!

前提: 已安裝完畢AndroidStudio,安裝指導可以參考:https://www.jianshu.com/p/a0e0e11cac1f 開始第一個安卓工程 新建工程 第一步中如果是Kotlin,就勾選“Include Kotlin support”;否則就不勾選

LearnOpenGL-第一視窗

一 建立專案 1.新建專案 你可以建立一個cpp來執行一下main 2.引入OpenGL相關庫 3.設定連結器 4.工程引入glad.c 二 開始寫程式碼 參考例子 // 因為OpenGL只是一個標準/規範,具體的實現是由驅動開發商針對特定顯示

tensorflow第一專案MNIST資料集

首先登陸網址: http://yann.lecun.com/exdb/mnist/ 下載4個檔案  下載完之後,解壓出來到資料夾 耐心等待,網上好慢。 放到當前的路徑下:  檢視資料集驗證圖片 檢視資料集的驗證標籤 檢視資料集的測試圖片

PyQt5學習筆記01----第一視窗

寫在前面的話       最近想學習一下桌面程式開發,可是MFC臃腫複雜介面難看,而WPF無法跨平臺,似乎只剩下了QT這一個選擇。本來想借著學習python熱情,看看python下有木有什麼好看的圖形庫,怎奈我用的python3.* 不支援wxpython(才疏學淺,