亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

OpenGL 學習筆記3_5(緩沖區相關) 模板緩沖區待詳細分析

2019-11-11 03:27:58
字體:
來源:轉載
供稿:網友

藍寶書 第三章

單緩沖與雙緩沖

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);單緩沖 相關代碼見例3.12

直接將圖像改變顯示在畫布上,使用glFlush()提交緩沖

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);雙緩沖

一般圖像改變在后臺緩沖區,使用glutSwapBuffers()將后臺緩沖提交至前臺緩沖區

void glDrawBuffer(Glenummode) 該函數可設置當前改變前臺緩沖區還是后臺緩沖區

glDrawBuffer(GL_FRONT)  前臺

glDrawBuffer(GL_BACK)  后臺

顏色緩沖區與深度緩沖區

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH)

上述語句初始化了顏色緩沖區、雙緩沖區以及深度緩沖區

若未啟用深度緩沖區(glDisable(GL_DEPTH_TEST)),則深度數據也會寫入顏色緩沖區,使用glDepthMask(GL_FALSE)禁止寫入,第六章詳細講解

剪刀盒(類似于opencv的感興趣區域)

只對剪刀盒范圍內進行處理

glEnable(GL_SCISSOR_TEST);啟用剪刀盒

void glScissor(GLintx, GLint y, GLsizeiwidth, GLsizei height); 設置剪刀盒范圍

相關代碼見例3.13

模板緩沖區

類似于噴油漆,在紙上鏤空一個模板,再噴上油漆,下面的紙上只有鏤空部分才有顏色。

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_STENCIL);初始化模板緩沖區glEnable(GL_STENCIL_TEST);啟用模板緩沖區

void glStencilFunc(GLenumfunc, GLint ref, GLuint mask);設置模板參考:

點擊打開鏈接

點擊打開鏈接

相關代碼見例3.14

例3.12 單緩沖區示例(單擊窗口進行新的緩沖,增大了圖形半徑)

#include <windows.h>  #include <math.h>  #include <GL/GL.h>  #include <GL/GLU.h>  #include <GL/glut.h>  #define GL_PI 3.1415f  // This function does any needed initialization on the rendering  void RenderScene(void){	static GLdouble dRadius = 15;	static GLdouble dAngle = 0.0;	// Clear blue window	glClearColor(0.0f, 0.0f, 1.0f, 0.0f);	if (dAngle == 0.0)		glClear(GL_COLOR_BUFFER_BIT);	glBegin(GL_POINTS);	glVertex2d(dRadius * cos(dAngle), dRadius * sin(dAngle));	glEnd();	dRadius *= 1.01;	dAngle += 0.2;	if (dAngle > 30.0)	{		dRadius = 15;		dAngle = 0.0;	}	glFlush();}void SetuPRC(){	// Black background	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);	// Set drawing color to red	glColor3f(1.0f, 0.0f, 0.0f);	//glPolygonMode(GL_BACK, GL_LINE);	//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 	// Enable polygon stippling	//glEnable(GL_POLYGON_STIPPLE);	// Specify a specific stipple pattern	//glPolygonStipple(fire);}void ChangeSize(GLsizei w, GLsizei h){	GLfloat nRange = 100.0f;	// Prevent a divide by zero  	if (h == 0)		h = 1;	// Set Viewport to window dimensions  	glViewport(0, 0, w, h);	// Reset projection matrix stack  	glMatrixMode(GL_PROJECTION);	glLoadIdentity();	// Establish clipping volume (left, right, bottom, top, near, far)  	if (w <= h)		glOrtho(-nRange, nRange, -nRange*h / w, nRange*h / w, -nRange, nRange);	else		glOrtho(-nRange*w / h, nRange*w / h, -nRange, nRange, -nRange, nRange);	// Reset Model view matrix stack  	glMatrixMode(GL_MODELVIEW);	glLoadIdentity();}int main(int argc, char* argv[]){	glutInit(&argc, argv);	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);	glutInitWindowSize(800, 600);	glutCreateWindow("Bounce");	glutDisplayFunc(RenderScene);//顯示回調函數  	glutReshapeFunc(ChangeSize);//窗口大小變形回調函數  	SetupRC();	glutMainLoop();	return 0;}例3.13 剪刀盒示例

#include <windows.h>  #include <math.h>  #include <GL/GL.h>  #include <GL/GLU.h>  #include <GL/glut.h>  #define GL_PI 3.1415f  // This function does any needed initialization on the rendering  void RenderScene(void){	glClearColor(0.0f, 0.0f, 1.0f, 0.0f);	glClear(GL_COLOR_BUFFER_BIT);	// Now set scissor to smaller red sub region	glClearColor(1.0f, 0.0f, 0.0f, 0.0f);	glScissor(100, 100, 600, 400);	glEnable(GL_SCISSOR_TEST);	glClear(GL_COLOR_BUFFER_BIT);	// Finally, an even smaller green rectangle	glClearColor(0.0f, 1.0f, 0.0f, 0.0f);	glScissor(200, 200, 400, 200);	glClear(GL_COLOR_BUFFER_BIT);	// Turn scissor back off for next render	glDisable(GL_SCISSOR_TEST);	glutSwapBuffers();}void SetupRC(){	// Black background	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);	// Set drawing color to red	glColor3f(1.0f, 0.0f, 0.0f);	//glPolygonMode(GL_BACK, GL_LINE);	//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 	// Enable polygon stippling	//glEnable(GL_POLYGON_STIPPLE);	// Specify a specific stipple pattern	//glPolygonStipple(fire);}void ChangeSize(GLsizei w, GLsizei h){	GLfloat nRange = 100.0f;	// Prevent a divide by zero  	if (h == 0)		h = 1;	// Set Viewport to window dimensions  	glViewport(0, 0, w, h);	// Reset projection matrix stack  	glMatrixMode(GL_PROJECTION);	glLoadIdentity();	// Establish clipping volume (left, right, bottom, top, near, far)  	if (w <= h)		glOrtho(-nRange, nRange, -nRange*h / w, nRange*h / w, -nRange, nRange);	else		glOrtho(-nRange*w / h, nRange*w / h, -nRange, nRange, -nRange, nRange);	// Reset Model view matrix stack  	glMatrixMode(GL_MODELVIEW);	glLoadIdentity();}int main(int argc, char* argv[]){	glutInit(&argc, argv);	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);	glutInitWindowSize(800, 600);	glutCreateWindow("Bounce");	glutDisplayFunc(RenderScene);//顯示回調函數  	glutReshapeFunc(ChangeSize);//窗口大小變形回調函數  	SetupRC();	glutMainLoop();	return 0;}例3.14 模板示例
#include <windows.h>  #include <math.h>  #include <GL/GL.h>  #include <GL/GLU.h>  #include <GL/glut.h>  #define GL_PI 3.1415f  // This function does any needed initialization on the rendering  void RenderScene(void){	GLdouble dRadius = 0.1; // Initial radius of spiral	GLdouble dAngle; // Looping variable	// Clear blue window	glClearColor(0.0f, 0.0f, 1.0f, 0.0f);	// Use 0 for clear stencil, enable stencil test	glClearStencil(0.0f);	glEnable(GL_STENCIL_TEST);	// Clear color and stencil buffer	glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);	// All drawing commands fail the stencil test, and are not	// drawn, but increment the value in the stencil buffer.	glStencilFunc(GL_NEVER, 0x0, 0x0);	glStencilOp(GL_INCR, GL_INCR, GL_INCR);	// Spiral pattern will create stencil pattern	// Draw the spiral pattern with white lines. We	// make the lines white to demonstrate that the	// stencil function prevents them from being drawn	glColor3f(1.0f, 1.0f, 1.0f);	glBegin(GL_LINE_STRIP);	for (dAngle = 0; dAngle < 400.0; dAngle += 0.1)	{		glVertex2d(dRadius * cos(dAngle), dRadius * sin(dAngle));		dRadius *= 1.002;	}	glEnd();	// Now, allow drawing, except where the stencil pattern is 0x1	// and do not make any further changes to the stencil buffer	glStencilFunc(GL_NOTEQUAL, 0x1, 0x1);	glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);	// Now draw red bouncing square	// (x and y) are modified by a timer function	glColor3f(1.0f, 0.0f, 0.0f);	glRectf(0, 0, 100, 100);	// All done, do the buffer swap	glutSwapBuffers();}void SetupRC(){	// Black background	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);	// Set drawing color to red	glColor3f(1.0f, 0.0f, 0.0f);	//glPolygonMode(GL_BACK, GL_LINE);	//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 	// Enable polygon stippling	//glEnable(GL_POLYGON_STIPPLE);	// Specify a specific stipple pattern	//glPolygonStipple(fire);}void ChangeSize(GLsizei w, GLsizei h){	GLfloat nRange = 100.0f;	// Prevent a divide by zero  	if (h == 0)		h = 1;	// Set Viewport to window dimensions  	glViewport(0, 0, w, h);	// Reset projection matrix stack  	glMatrixMode(GL_PROJECTION);	glLoadIdentity();	// Establish clipping volume (left, right, bottom, top, near, far)  	if (w <= h)		glOrtho(-nRange, nRange, -nRange*h / w, nRange*h / w, -nRange, nRange);	else		glOrtho(-nRange*w / h, nRange*w / h, -nRange, nRange, -nRange, nRange);	// Reset Model view matrix stack  	glMatrixMode(GL_MODELVIEW);	glLoadIdentity();}int main(int argc, char* argv[]){	glutInit(&argc, argv);	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);	glutInitWindowSize(800, 600);	glutCreateWindow("Bounce");	glutDisplayFunc(RenderScene);//顯示回調函數  	glutReshapeFunc(ChangeSize);//窗口大小變形回調函數  	SetupRC();	glutMainLoop();	return 0;}


上一篇:刪數問題

下一篇:洛谷P1433 吃奶酪

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人亚洲综合91| 久久久噜噜噜久久中文字免| 国产亚洲精品美女久久久| 成人精品一区二区三区电影免费| 国色天香2019中文字幕在线观看| 国产精品一区二区三区免费视频| 亚洲男人的天堂网站| 欧美一乱一性一交一视频| 国产精品男女猛烈高潮激情| 亚洲美女中文字幕| 亚洲尤物视频网| 色综合天天综合网国产成人网| 91香蕉国产在线观看| 国产日韩av高清| 色悠久久久久综合先锋影音下载| 成人网址在线观看| 久久免费少妇高潮久久精品99| 亚洲久久久久久久久久| 色久欧美在线视频观看| 久久免费视频观看| 91精品国产91久久久| 国产精品va在线播放我和闺蜜| 亚洲爱爱爱爱爱| 亚洲a级在线播放观看| 日本精品久久久久影院| 国产精品人成电影在线观看| 成人免费大片黄在线播放| 久久久久久久久久久国产| 国产精品一区二区三区免费视频| 欧美黑人一区二区三区| 国产亚洲a∨片在线观看| 成人免费网站在线观看| 精品高清美女精品国产区| 日韩欧美在线免费| 庆余年2免费日韩剧观看大牛| 国产亚洲精品美女久久久久| 亚洲免费视频一区二区| 国产精品18久久久久久首页狼| 日韩免费av在线| 国产精品18久久久久久麻辣| 好吊成人免视频| 国产精品主播视频| 日韩成人在线视频观看| 精品国产乱码久久久久久天美| 日本久久久久亚洲中字幕| 成人乱色短篇合集| 国产在线不卡精品| 欧美日韩国产第一页| 久久免费视频网站| 国产精品久久久久久久久影视| 国产精品a久久久久久| 中文字幕日韩av电影| 欧美日韩亚洲成人| 亚洲国产成人一区| 亚洲国产精品人久久电影| 国产一区欧美二区三区| 91精品国产高清久久久久久91| 亚洲精品日韩在线| 亚洲老头同性xxxxx| 琪琪亚洲精品午夜在线| 91高清视频免费观看| 中文字幕不卡在线视频极品| 欧美在线视频网| 久久久久久成人| 国产日韩欧美自拍| 日韩av成人在线| 在线观看成人黄色| 欧美精品生活片| 成人精品在线视频| 18久久久久久| 91麻豆国产语对白在线观看| 久久伊人精品视频| 国产一区二区三区在线观看视频| 欧美激情综合亚洲一二区| 亚洲欧美日韩国产成人| 日韩中文字幕视频| 中文字幕精品久久久久| 在线播放国产精品| 欧美电影免费观看电视剧大全| 成人激情春色网| 欧美最猛性xxxx| 午夜精品一区二区三区在线| 国产在线观看91精品一区| 91九色精品视频| 日本三级久久久| 91精品国产91久久| 亚洲性猛交xxxxwww| 亚洲毛片在线观看| 欧美在线视频一区二区| 亚洲自拍偷拍色片视频| 国产成人精品在线| 日韩免费av一区二区| 国产精品精品一区二区三区午夜版| 亚洲影视中文字幕| 九九热这里只有在线精品视| 欧美日韩视频免费播放| 亚洲三级免费看| 欧美日韩国产在线看| 亚洲男人的天堂在线播放| 亚洲精品国产精品国自产观看浪潮| 欧美大片在线免费观看| 欧美成人久久久| 91精品国产91久久久久久不卡| 伊人伊成久久人综合网小说| 国外成人免费在线播放| 久久久av免费| 国产精品久久综合av爱欲tv| 国产成人在线视频| 成人亲热视频网站| 亚洲第一网站免费视频| 国产精品香蕉在线观看| 亚洲精品大尺度| 国产精品一久久香蕉国产线看观看| 午夜精品在线观看| 中文字幕国产精品久久| 国产精品视频精品视频| 欧美日韩免费在线| 亚洲第一精品久久忘忧草社区| 国产欧美欧洲在线观看| 91超碰中文字幕久久精品| **欧美日韩vr在线| 亚洲色图校园春色| 欧洲亚洲妇女av| 精品国产一区二区三区在线观看| 久久久精品一区二区三区| 久久综合久中文字幕青草| 国产成人在线亚洲欧美| 亚洲女人被黑人巨大进入al| 日韩中文字在线| 国产成人精品电影久久久| 国产成人综合一区二区三区| 亚洲国产毛片完整版| xvideos成人免费中文版| 欧美性一区二区三区| 一本色道久久88综合亚洲精品ⅰ| 国产精品久久久久aaaa九色| 国产男女猛烈无遮挡91| 国内精品中文字幕| 亚洲国产精品悠悠久久琪琪| 亚洲成人亚洲激情| 国产欧美精品一区二区三区介绍| 亚洲视频在线播放| 日韩av综合网站| 91网站在线免费观看| 激情久久av一区av二区av三区| 2019中文字幕全在线观看| 欧美成人手机在线| 国产亚洲在线播放| 国产成人综合亚洲| 国产噜噜噜噜久久久久久久久| 91影院在线免费观看视频| 国产精品免费一区二区三区都可以| 91老司机精品视频| 欧美日韩不卡合集视频| 欧美日韩美女在线观看| 亚洲18私人小影院| 国产一区二区三区丝袜| 北条麻妃一区二区在线观看| 欧美成人剧情片在线观看| 国产精品观看在线亚洲人成网| 欧美一级电影免费在线观看| 日韩精品极品在线观看播放免费视频| 欧美孕妇性xx| 欧美性20hd另类|