各主流网站做景区宣传,个人怎么做贷款网站,网站建设人员配置是怎样的,冷门行业做网站的优势OpenGL笔记八之EBO和EBO绘制流程 —— 2024-07-07 晚上
bilibili赵新政老师的教程看后笔记
code review! 文章目录 OpenGL笔记八之EBO和EBO绘制流程1.EBO2.glDrawElements#xff1a;如果使用了ebo#xff0c;最后一个参数可以写03.glDrawElements#xff1a;如果使用了e…OpenGL笔记八之EBO和EBO绘制流程 —— 2024-07-07 晚上
bilibili赵新政老师的教程看后笔记
code review! 文章目录 OpenGL笔记八之EBO和EBO绘制流程1.EBO2.glDrawElements如果使用了ebo最后一个参数可以写03.glDrawElements如果使用了ebo假设最后一个参数是数字表示ebo内偏移量3.1.count改为3偏移量为03.2.count改为3偏移量为3 4.glDrawElements如果没有使用ebo可以直接将cpu端的indices数组传输进去(不推荐这种方式)5.main.cpp 1.EBO 代码
void prepareVAO() {//1 准备positionsfloat positions[] {-0.5f, -0.5f, 0.0f,0.5f, -0.5f, 0.0f,0.0f, 0.5f, 0.0f,0.5f, 0.5f, 0.0f,};unsigned int indices[] {0, 1, 2,2, 1, 3};//2 VBO创建GLuint vbo;glGenBuffers(1, vbo);glBindBuffer(GL_ARRAY_BUFFER, vbo);glBufferData(GL_ARRAY_BUFFER, sizeof(positions), positions, GL_STATIC_DRAW);//3 EBO创建GLuint ebo;glGenBuffers(1, ebo);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);//4 VAO创建glGenVertexArrays(1, vao);glBindVertexArray(vao);//5 绑定vbo ebo 加入属性描述信息//5.1 加入位置属性描述信息glBindBuffer(GL_ARRAY_BUFFER, vbo);glEnableVertexAttribArray(0);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, (void*)0);//5.2 加入ebo到当前的vaoglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);glBindVertexArray(0);
}对比VAO
2.glDrawElements如果使用了ebo最后一个参数可以写0
运行
关键代码
// glDrawArrays(GL_LINE_STRIP, 0, 6);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
// glBindVertexArray(0);3.glDrawElements如果使用了ebo假设最后一个参数是数字表示ebo内偏移量
3.1.count改为3偏移量为0
运行
关键代码
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);3.2.count改为3偏移量为3
运行
关键代码
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, (void*)(sizeof(int)*3));4.glDrawElements如果没有使用ebo可以直接将cpu端的indices数组传输进去(不推荐这种方式)
运行
关键代码
//5.2 加入ebo到当前的vao
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); //需要注释掉unsigned int indices[] {0, 1, 2,2, 1, 3
};
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices);5.main.cpp
代码
#include iostream#define DEBUG//注意glad头文件必须在glfw引用之前引用
#include glad/glad.h
#include GLFW/glfw3.h
#include string
#include assert.h//断言
#include wrapper/checkError.h
#include application/Application.h/*
*┌────────────────────────────────────────────────┐
*│ 目 标 学习EBO进行绘制
*│ 讲 师 赵新政(Carma Zhao)
*│ 拆分目标
*│
*│ 1 创建EBO灌入数据与vao绑定
*│ 2 练习glDrawElements
* -如果使用了ebo最后一个参数可以写0
* -如果使用了ebo假设最后一个参数是数字表示ebo内偏移量
* -如果没有使用ebo可以直接将cpu端的indices数组传输进去
*└────────────────────────────────────────────────┘
*/GLuint vao, program;void OnResize(int width, int height) {GL_CALL(glViewport(0, 0, width, height));std::cout OnResize std::endl;
}void OnKey(int key, int action, int mods) {std::cout key std::endl;
}void prepareVAO() {//1 准备positionsfloat positions[] {-0.5f, -0.5f, 0.0f,0.5f, -0.5f, 0.0f,0.0f, 0.5f, 0.0f,0.5f, 0.5f, 0.0f,};unsigned int indices[] {0, 1, 2,2, 1, 3};//2 VBO创建GLuint vbo;glGenBuffers(1, vbo);glBindBuffer(GL_ARRAY_BUFFER, vbo);glBufferData(GL_ARRAY_BUFFER, sizeof(positions), positions, GL_STATIC_DRAW);//3 EBO创建GLuint ebo;glGenBuffers(1, ebo);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);//4 VAO创建glGenVertexArrays(1, vao);glBindVertexArray(vao);//5 绑定vbo ebo 加入属性描述信息//5.1 加入位置属性描述信息glBindBuffer(GL_ARRAY_BUFFER, vbo);glEnableVertexAttribArray(0);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, (void*)0);//5.2 加入ebo到当前的vaoglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);glBindVertexArray(0);
}void prepareShader() {//1 完成vs与fs的源代码并且装入字符串const char* vertexShaderSource #version 330 core\nlayout (location 0) in vec3 aPos;\nvoid main()\n{\n gl_Position vec4(aPos.x, aPos.y, aPos.z, 1.0);\n}\0;const char* fragmentShaderSource #version 330 core\nout vec4 FragColor;\nvoid main()\n{\n FragColor vec4(1.0f, 0.5f, 0.2f, 1.0f);\n}\n\0;//2 创建Shader程序vs、fsGLuint vertex, fragment;vertex glCreateShader(GL_VERTEX_SHADER);fragment glCreateShader(GL_FRAGMENT_SHADER);//3 为shader程序输入shader代码glShaderSource(vertex, 1, vertexShaderSource, NULL);glShaderSource(fragment, 1, fragmentShaderSource, NULL);int success 0;char infoLog[1024];//4 执行shader代码编译 glCompileShader(vertex);//检查vertex编译结果glGetShaderiv(vertex, GL_COMPILE_STATUS, success);if (!success) {glGetShaderInfoLog(vertex, 1024, NULL, infoLog);std::cout Error: SHADER COMPILE ERROR --VERTEX \n infoLog std::endl;}glCompileShader(fragment);//检查fragment编译结果glGetShaderiv(fragment, GL_COMPILE_STATUS, success);if (!success) {glGetShaderInfoLog(fragment, 1024, NULL, infoLog);std::cout Error: SHADER COMPILE ERROR --FRAGMENT \n infoLog std::endl;}//5 创建一个Program壳子program glCreateProgram();//6 将vs与fs编译好的结果放到program这个壳子里glAttachShader(program, vertex);glAttachShader(program, fragment);//7 执行program的链接操作形成最终可执行shader程序glLinkProgram(program);//检查链接错误glGetProgramiv(program, GL_LINK_STATUS, success);if (!success) {glGetProgramInfoLog(program, 1024, NULL, infoLog);std::cout Error: SHADER LINK ERROR \n infoLog std::endl;}//清理glDeleteShader(vertex);glDeleteShader(fragment);
}void render() {//执行opengl画布清理操作GL_CALL(glClear(GL_COLOR_BUFFER_BIT));//1 绑定当前的programGL_CALL(glUseProgram(program));//2 绑定当前的vaoGL_CALL(glBindVertexArray(vao));//3 发出绘制指令
// glDrawArrays(GL_LINE_STRIP, 0, 6);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);glBindVertexArray(0);
}int main() {if (!app-init(800, 600)) {return -1;}app-setResizeCallback(OnResize);app-setKeyBoardCallback(OnKey);//设置opengl视口以及清理颜色GL_CALL(glViewport(0, 0, 800, 600));GL_CALL(glClearColor(0.2f, 0.3f, 0.3f, 1.0f));prepareShader();prepareVAO();while (app-update()) {render();}app-destroy();return 0;
}
文章转载自: http://www.morning.hqqpy.cn.gov.cn.hqqpy.cn http://www.morning.ayftwl.cn.gov.cn.ayftwl.cn http://www.morning.qhjkz.cn.gov.cn.qhjkz.cn http://www.morning.jhswp.cn.gov.cn.jhswp.cn http://www.morning.lltdf.cn.gov.cn.lltdf.cn http://www.morning.pqwhk.cn.gov.cn.pqwhk.cn http://www.morning.wqnc.cn.gov.cn.wqnc.cn http://www.morning.wphzr.cn.gov.cn.wphzr.cn http://www.morning.fbylq.cn.gov.cn.fbylq.cn http://www.morning.trjp.cn.gov.cn.trjp.cn http://www.morning.qnwyf.cn.gov.cn.qnwyf.cn http://www.morning.wbxbj.cn.gov.cn.wbxbj.cn http://www.morning.qwrb.cn.gov.cn.qwrb.cn http://www.morning.kflpf.cn.gov.cn.kflpf.cn http://www.morning.jfbbq.cn.gov.cn.jfbbq.cn http://www.morning.nrmyj.cn.gov.cn.nrmyj.cn http://www.morning.fhxrb.cn.gov.cn.fhxrb.cn http://www.morning.qzzmc.cn.gov.cn.qzzmc.cn http://www.morning.ltspm.cn.gov.cn.ltspm.cn http://www.morning.qnrpj.cn.gov.cn.qnrpj.cn http://www.morning.qsy36.cn.gov.cn.qsy36.cn http://www.morning.kpqjr.cn.gov.cn.kpqjr.cn http://www.morning.lmmh.cn.gov.cn.lmmh.cn http://www.morning.gbqgr.cn.gov.cn.gbqgr.cn http://www.morning.yrflh.cn.gov.cn.yrflh.cn http://www.morning.nqlx.cn.gov.cn.nqlx.cn http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn http://www.morning.lywys.cn.gov.cn.lywys.cn http://www.morning.tkjh.cn.gov.cn.tkjh.cn http://www.morning.lngyd.cn.gov.cn.lngyd.cn http://www.morning.khxwp.cn.gov.cn.khxwp.cn http://www.morning.gtqws.cn.gov.cn.gtqws.cn http://www.morning.mrttc.cn.gov.cn.mrttc.cn http://www.morning.rzmkl.cn.gov.cn.rzmkl.cn http://www.morning.kcyxs.cn.gov.cn.kcyxs.cn http://www.morning.qhln.cn.gov.cn.qhln.cn http://www.morning.kfcz.cn.gov.cn.kfcz.cn http://www.morning.zdxinxi.com.gov.cn.zdxinxi.com http://www.morning.bpmfz.cn.gov.cn.bpmfz.cn http://www.morning.sypby.cn.gov.cn.sypby.cn http://www.morning.nwrzf.cn.gov.cn.nwrzf.cn http://www.morning.rswtz.cn.gov.cn.rswtz.cn http://www.morning.ffksr.cn.gov.cn.ffksr.cn http://www.morning.kzpxc.cn.gov.cn.kzpxc.cn http://www.morning.mpwgs.cn.gov.cn.mpwgs.cn http://www.morning.csxlm.cn.gov.cn.csxlm.cn http://www.morning.hfyll.cn.gov.cn.hfyll.cn http://www.morning.fllfc.cn.gov.cn.fllfc.cn http://www.morning.ldcsw.cn.gov.cn.ldcsw.cn http://www.morning.zrhhb.cn.gov.cn.zrhhb.cn http://www.morning.yltnl.cn.gov.cn.yltnl.cn http://www.morning.pngph.cn.gov.cn.pngph.cn http://www.morning.smdkk.cn.gov.cn.smdkk.cn http://www.morning.thxfn.cn.gov.cn.thxfn.cn http://www.morning.rknhd.cn.gov.cn.rknhd.cn http://www.morning.lwdzt.cn.gov.cn.lwdzt.cn http://www.morning.rrhfy.cn.gov.cn.rrhfy.cn http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn http://www.morning.zqmdn.cn.gov.cn.zqmdn.cn http://www.morning.wtwhj.cn.gov.cn.wtwhj.cn http://www.morning.kngqd.cn.gov.cn.kngqd.cn http://www.morning.gbrdx.cn.gov.cn.gbrdx.cn http://www.morning.bdypl.cn.gov.cn.bdypl.cn http://www.morning.kmkpm.cn.gov.cn.kmkpm.cn http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn http://www.morning.jzbjx.cn.gov.cn.jzbjx.cn http://www.morning.qinhuangdjy.cn.gov.cn.qinhuangdjy.cn http://www.morning.jfjbl.cn.gov.cn.jfjbl.cn http://www.morning.21r000.cn.gov.cn.21r000.cn http://www.morning.rnzbr.cn.gov.cn.rnzbr.cn http://www.morning.mflhr.cn.gov.cn.mflhr.cn http://www.morning.fnczn.cn.gov.cn.fnczn.cn http://www.morning.qqhmg.cn.gov.cn.qqhmg.cn http://www.morning.snzgg.cn.gov.cn.snzgg.cn http://www.morning.prls.cn.gov.cn.prls.cn http://www.morning.qstjr.cn.gov.cn.qstjr.cn http://www.morning.ebpz.cn.gov.cn.ebpz.cn http://www.morning.lfjmp.cn.gov.cn.lfjmp.cn http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn