1. 程式人生 > >OpenGL入門【1 快速入門】

OpenGL入門【1 快速入門】

// OpenGL.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"

#include<iostream>




#include <GL/glut.h>
#include <GL/glaux.h> 



using namespace std;
void background(void)
{
   glClearColor(0.0,0.0,0.0,0.0);//設定背景顏色為黑色
}
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);//buffer設定為顏色可寫
    glBegin(GL_TRIANGLES);//開始畫三角形
    glShadeModel(GL_SMOOTH);//設定為光滑明暗模式
    glColor3f(1.0,0.0,0.0);//設定第一個頂點為紅色
    glVertex2f(-1.0,-1.0);//設定第一個頂點的座標為(-1.0,-1.0)
	glColor3f(0.0,1.0,0.0);//設定第二個頂點為綠色
	glVertex2f(0.0,-1.0);//設定第二個頂點的座標為(0.0,-1.0)
	glColor3f(0.0,0.0,1.0);//設定第三個頂點為藍色
	glVertex2f(-0.5,1.0);//設定第三個頂點的座標為(-0.5,1.0)
	glEnd();//三角形結束
	glFlush();//強制OpenGL函式在有限時間內執行
}

void myReshape(GLsizei w,GLsizei h)
{
	glViewport(0,0,w,h);//設定視口
	glMatrixMode(GL_PROJECTION);//指明當前矩陣為GL_PROJECTION
	glLoadIdentity();//將當前矩陣置換為單位陣
	if(w <= h)
	gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);//定義二維正視投影矩陣 
	else
	gluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);//大概是定義三個頂點的座標
	glMatrixMode(GL_MODELVIEW);//指明當前矩陣為GL_MODELVIEW

}

int main(int argc,char ** argv)
{
	/*初始化*/
	glutInit(&argc,argv);//用來初始化GLUT庫並同視窗系統對話協商
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//用來確定所建立視窗的顯示模式。本例中的引數GLUT_SINGLE 指定單快取視窗,這也是預設模式,對應的模式為GLUT_DOUBLE 雙快取視窗。引數GLUT_RGB指定顏色RGBA模式,這也是預設模式,對應的模式為GLUT_INDEX 顏色索引模式視窗。
	glutInitWindowSize(800,400);//初始化視窗的大小,第一個引數為視窗的寬度,第二個引數為視窗的高度,以畫素為單位。
	glutInitWindowPosition(200,200);// 設定初始視窗的位置,第一個引數為視窗左上角x的座標,第二個引數為視窗左上角y的座標,以畫素為單位。螢幕的左上角的座標為(0,0),橫座標向右逐漸增加,縱座標向下逐漸增加。
	/*建立視窗*/
	glutCreateWindow("Triangle");//建立頂層視窗,視窗的名字為擴號中的引數。
	/*繪製與顯示*/
	background();//自己封裝的繪製背景
	glutReshapeFunc(myReshape);//註冊當前視窗的形狀變化回撥函式。當改變視窗大小時,該視窗的形狀改變回調函式將被呼叫。在此例中就是myReshape指定形狀變化函式。
	glutDisplayFunc(myDisplay);// 註冊當前視窗的顯示回撥函式。當一個視窗的影象層需要重新繪製時,GLUT將呼叫該視窗的的顯示回撥函式。在此例中的mydisplay就是顯示回撥函式,顯示回撥函式不帶任何引數,它負責整個影象層的繪製。我們的大部分工作將集中在這個函式中。
	glutMainLoop();//•glutMainLoop 進入GLUT事件處理迴圈。glutMainLoop函式在GLUT程式中最多隻能呼叫一次,它一旦被呼叫就不再返回,並且呼叫註冊過的回撥函式。所以這個函式必須放在註冊回撥函式的後面,此例中為glutReshapeFunc, glutDisplayFunc。
	return(0);
}




現在我們對OpenGL程式的典型的程式結構有了一個瞭解。首先初始化,包括對GLUT庫的初始化和對視窗的設定及顯示模式的設定。第二,建立視窗。第三,自己創作的核心部分。第四,glutMainLoop 進入GLUT事件處理迴圈。  

·glFlush迫使OpenGL函式在有限時間裡執行。glFlush清空所有buffer,使所有發出的命令能在規定的時間內執行。一定不能忘記這一條語句。只有加了這一句,前面的命令才能執行。

glBegin和glEnd是一一對應的。這兩個函式限制了一組或多組圖元的頂點定義。在這兩個函式中間就是你所繪製的由多個頂點組成的圖元。函式的引數表明了所繪製的圖元的型別。本例中的GL_TRIANGLES 表明所繪製的圖形為三角形。  


相關推薦

OpenGL入門1 快速入門

// OpenGL.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include<iostream> #include <GL/glut.h> #include <GL/glaux.h&g

python爬蟲(四):scrapy 1. 快速上手

中文文件:http://www.scrapyd.cn/doc/   Scrapy是採用Python開發的一個快速、高層次的螢幕抓取和web抓取框架。 什麼是爬蟲框架? 爬蟲框架是實現爬蟲功能的一個軟體結構和功能元件集合。 爬蟲框架是一個半成品,能夠幫助使用者實現專業網路

swoole快速入門1建立tcp伺服器

程式程式碼 server.php //建立Server物件,監聽 127.0.0.1:9501埠 $serv = new swoole_server("127.0.0.1", 9501); //監聽連線進入事件 $serv->on('connect', func

PHP快速入門 第二節 php基本語法

1.什麼地方能寫PHP程式碼? php程式碼需要寫在php識別符號內,就是這個東西: 在我們編寫一個php程式時,必須要在這個檔案裡面寫上 2.PHP語句要不要加分號? 有的地方要加,有的地方不要加。(似乎是廢話...) 一句話搞定:有花括號的地方不要加,其他都給我加上!! 比如,if判斷,for迴

swoole快速入門3建立Web伺服器

程式程式碼 http_server.php $http = new swoole_http_server("0.0.0.0", 9501); $http->on('request', function ($request, $response) { var

swoole快速入門5設定定時器

swoole提供了類似JavaScript的setInterval/setTimeout非同步高精度定時器,粒度為毫秒級。使用也非常簡單。 程式程式碼 //每隔2000ms觸發一次 swoole_timer_tick(2000, function ($timer_id)

swoole快速入門4建立WebSocket伺服器

程式程式碼 ws_server.php //建立websocket伺服器物件,監聽0.0.0.0:9502埠 $ws = new swoole_websocket_server("0.0.0.0", 9502); //監聽WebSocket連線開啟事件 $ws->

swoole快速入門10使用非同步客戶端

PHP提供的MySQL、CURL、Redis 等客戶端是同步的,會導致伺服器程式發生阻塞。Swoole提供了常用的非同步客戶端元件,來解決此問題。編寫純非同步伺服器程式時,可以使用這些非同步客戶端。 非同步客戶端可以配合使用SplQueue實現連線池,以達到長連線複用的目的

swoole快速入門11多程序共享資料

由於PHP語言不支援多執行緒,因此Swoole使用多程序模式。在多程序模式下存在程序記憶體隔離,在工作程序內修改global全域性變數和超全域性變數時,在其他程序是無效的。 程序隔離 $fds = array(); $server->on('connect', fu

ionic3 入門1建立Ionic專案及基本配置

製作手機app基本配置 要建立Ionic專案,您需要安裝最新版本的CLI和Cordova。 npm install -g ionic cordova 完成之後,建立第一個Ionic應用程式: ionic start MyIonicProject tabs|sidemenu|

Python爬蟲入門1: CentOS環境安裝

簡介 你好,當你開啟這個文件的時候,我知道,你想要的是什麼! Python爬蟲,如何快速的學會Python爬蟲,是你最期待的事情,

ThinkPHP3.1快速入門教程

pan html manual thinkphp 教程 font 入門教程 入門 href ThinkPHP3.1快速入門教程 http://www.thinkphp.cn/info/155.html -----------------------

菜鳥入門ASP.NET Core3:準備CentOS和Nginx環境

sysconf service www post 輸入密碼 mct cnblogs kdt 提示 基本軟件 VMware虛擬機 centos:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_

菜鳥入門ASP.NET Core5:命令行配置、Json文件配置、Bind讀取配置到C#實例、在Core Mvc中使用Options

加載 中間 view tar public png 配置到 index 不同 命令行配置 我們通過vs2017創建一個控制臺項目CommandLineSample 可以看到現在項目以來的是dotnet core framework 我們需要吧a

springboot(1)——快速入門

《一》、快速入門 一、概述 springboot使用”習慣優於配置(專案中存在大量的配置,此外還內建一個習慣性的配置,讓你無須手動進行配置)”的理念讓你的專案快速執行起來, 可以不用或者只需要很少的spring配置很容易建立一個獨立執行(執行jar,內嵌Servle

Django2.1快速入門

本文轉載自劉江Django2.1新手圖文入門教程 本文面向有一些的Python基礎,但剛接觸web框架的Django初學者。 環境:Windows10 Python3.6 Pycharm2018 Django 2.1版 pip3 一、Django簡介 百度百科

hdu4549 M斐波那契數列矩陣快速F[n] = F[n-1] * F[n-2] ,求F[n]

【連結】 【題意】 F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 給出a, b, n,求出F[n] 【分析】 寫出幾項後,發現:F[n]=a^x*b^y,x,y成斐波那契數列。 且有規律:ans=a^

Zend Framework 1.10.1 快速入門之五:建立一個表單

為了使我們的留言本有用,我們需要一個可以提交新條目的表單。 我們第一件事是要建立事實表單的類。為了建立空的表單類,執行:       % zf create form Guestbook       Creating a form at application/form

Beego學習筆記(1)--快速入門

本筆記是筆者根據官網的文件加上自己的理解所整理出來的,如果有不正確的地方請指出,歡迎大家一起探討學習! 先說明一下,寫本筆記時的環境,可能環境不同,操作和反饋會有所不同 1.快速入門中的“新建專案”和“路由設定”在這裡就不贅述了,官網講的很詳細了, 傳送門:新建專案

實體框架Entity Framework 4.1快速入門

  介 紹   在舊的Entity 框架中,開發者可以從已存在的資料庫中產生業務實體的模型,這種開發方法被稱為資料庫驅動的開發方法。而在4.1的Entity Framework中,支開發者先建立實體業務類,然後再產生相關的資料庫檔案,這種開發方法可以稱為“程式碼先行”的開發方法。這種方法對於開發者來說是很有