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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

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

2019-11-10 17:48:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(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;}

實(shí)現(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個(gè)角點(diǎn),邊長(zhǎng)為2,中心為原點(diǎn)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,};//每個(gè)頂點(diǎn)的顏色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, //<<--這是重啟動(dòng)的索引 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è)置元素?cái)?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è)置頂點(diǎn)屬性 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 //如果開(kāi)啟了圖元重啟動(dòng),那么只需要調(diào)用一次繪制命令 glEnable(GL_PRIMITIVE_RESTART); //void glPrimitiveRestartIndex(GLuint index); //設(shè)置一個(gè)頂點(diǎn)數(shù)組元素的索引值,用來(lái)指定渲染過(guò)程中,從什么地方啟動(dòng)新的圖元繪制。如果在處理定點(diǎn)數(shù)組元素索引的過(guò)程中 //遇到了一個(gè)符合該索引的數(shù)值,那么系統(tǒng)不會(huì)處理它對(duì)應(yīng)的頂點(diǎn)數(shù)據(jù),而是終止當(dāng)前的圖元繪制,并且從下一個(gè)頂點(diǎn)重新開(kāi)始渲染 //同一類型的圖元集合。 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ā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 桐乡市| 大荔县| 喀喇| 邵阳县| 荆州市| 清苑县| 长垣县| 那曲县| 潼关县| 湘乡市| 霸州市| 郓城县| 长子县| 怀化市| 赞皇县| 喀喇沁旗| 天气| 仪征市| 浦县| 恩平市| 舞钢市| 南陵县| 金华市| 龙岩市| 丰县| 泽库县| 渝北区| 辽宁省| 赣州市| 霍林郭勒市| 会同县| 措勤县| 库伦旗| 临澧县| 罗平县| 察雅县| 神木县| 连州市| 平阴县| 巴马| 阿克|