国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Opengl學(xué)習(xí)程序之圖元重啟動

2019-11-09 19:56:27
字體:
供稿:網(wǎng)友

triangles.vert

#version 330layout(location = 0)in vec4 position;layout(location = 1)in vec4 color;out vec4 vs_fs_color;void main(void){ vs_fs_color = color; gl_Position = position;}

triangles.frag

#version 330in vec4 vs_fs_color;layout(location = 0)out vec4 color;void main(void){ color = vs_fs_color;}

實現(xiàn)程序:

#include "stdafx.h"#include<iostream>using namespace std;#include "vgl.h"#include "LoadShaders.h"#include "vmath.h"#define USE_PRIMITIVE_RESTART 1//設(shè)置立方體的8個角點,邊長為2,中心為原點static const GLfloat cube_positions[] ={ -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,};//每個頂點的顏色static const GLfloat cube_colors[] ={ 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,};//三角形條帶的索引static const GLushort cube_indices[] ={ 0, 1, 2, 3, 6, 7, 4, 5, //第一組條帶 0xFFFF, //<<--這是重啟動的索引 2, 6, 0, 4, 1, 5, 3, 7 //第二組條帶};enum{ Arrayebo, Numebo };enum{ Arrayvao, Numvao };enum{ Arrayvbo, Numvbo };GLuint ebo[Numebo];GLuint vao[Numvao];GLuint vbo[Numvbo];void init(void){ ShaderInfo shaders[] = { { GL_VERTEX_SHADER, "triangles.vert" }, { GL_FRAGMENT_SHADER, "triangles.frag" }, { GL_NONE, NULL } }; GLuint program = LoadShaders(shaders); glUseProgram(program); //設(shè)置元素數(shù)組緩存 glGenBuffers(Numebo, ebo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[Arrayebo]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(cube_indices), cube_indices, GL_STATIC_DRAW); //設(shè)置頂點屬性 glGenVertexArrays(Numvao, vao); glBindVertexArray(vao[Arrayvao]); glGenBuffers(Numvbo,vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo[Arrayvbo]); glBufferData(GL_ARRAY_BUFFER, sizeof(cube_positions) + sizeof(cube_colors), NULL, GL_STATIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(cube_positions), cube_positions); glBufferSubData(GL_ARRAY_BUFFER, sizeof(cube_positions), sizeof(cube_colors), cube_colors); glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL); glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)sizeof(cube_positions)); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1);}void display(void){ glClear(GL_COLOR_BUFFER_BIT); //設(shè)置使用glDrawElements glBindVertexArray(vao[Arrayvao]); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[Arrayebo]);#if USE_PRIMITIVE_RESTART //如果開啟了圖元重啟動,那么只需要調(diào)用一次繪制命令 glEnable(GL_PRIMITIVE_RESTART); //void glPrimitiveRestartIndex(GLuint index); //設(shè)置一個頂點數(shù)組元素的索引值,用來指定渲染過程中,從什么地方啟動新的圖元繪制。如果在處理定點數(shù)組元素索引的過程中 //遇到了一個符合該索引的數(shù)值,那么系統(tǒng)不會處理它對應(yīng)的頂點數(shù)據(jù),而是終止當(dāng)前的圖元繪制,并且從下一個頂點重新開始渲染 //同一類型的圖元集合。 glPrimitiveRestartIndex(0xFFFF); glDrawElements(GL_TRIANGLE_STRip, 17,GL_UNSIGNED_SHORT, NULL);#else glDrawElements(GL_TRIANGLE_STRIP, 8, GL_UNSIGNED_SHORT, NULL); glDrawElements(GL_TRIANGLE_STRIP, 8, GL_UNSIGNED_SHORT, (const GLvoid*)(9*sizeof(GLushort)));#endif}int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(512, 512); glutInitContextVersion(3, 3); glutCreateWindow(argv[0]); glewExperimental = GL_TRUE; if (glewInit()) { cerr << "Unable to initialize GLEW ... exiting" << endl; exit(EXIT_FAILURE); } init(); glutDisplayFunc(display); glutMainLoop();}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 邓州市| 稻城县| 荆州市| 英吉沙县| 垣曲县| 环江| 易门县| 三台县| 遂平县| 淳化县| 潢川县| 桐柏县| 淮安市| 松滋市| 乐昌市| 崇州市| 三台县| 准格尔旗| 永嘉县| 巴楚县| 淮阳县| 大名县| 四川省| 绿春县| 射阳县| 金堂县| 吴川市| 香港 | 龙口市| 镇安县| 林州市| 裕民县| 滁州市| 唐海县| 肥西县| 环江| 临武县| 石楼县| 开平市| 资阳市| 阳曲县|