如何制作一个网站做淘宝券,外贸营销网站建设公司排名,厦门市建设与管理局 官方网站,扁平化色彩网站几何数据#xff1a;vao和vbo 材质程序#xff1a;vs和fs(顶点着色器和片元着色器) 接下来只需要告诉GPU#xff0c;使用几何数据和材质程序来进行绘制。
#include glad/glad.h//glad必须在glfw头文件之前包含
#include GLFW/glfw3.h
#include iostrea…几何数据vao和vbo 材质程序vs和fs(顶点着色器和片元着色器) 接下来只需要告诉GPU使用几何数据和材质程序来进行绘制。
#include glad/glad.h//glad必须在glfw头文件之前包含
#include GLFW/glfw3.h
#include iostreamvoid frameBufferSizeCallbakc(GLFWwindow* window, int width, int height)
{glViewport(0, 0, width, height);
}
void glfwKeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
}GLuint program 0;
GLuint vao 0;
void prepareInterleavedBuffer() {//1 准备好Interleaved数据位置颜色float vertices[] {-0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f,0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f};//2 创建唯一的vboGLuint vbo 0;glGenBuffers(1, vbo);glBindBuffer(GL_ARRAY_BUFFER, vbo);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//3 创建并绑定vaoglGenVertexArrays(1, vao);glBindVertexArray(vao);glBindBuffer(GL_ARRAY_BUFFER, vbo);//4 为vao加入位置和颜色的描述信息//4.1 位置描述信息glEnableVertexAttribArray(0);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);//4.2 颜色描述信息glEnableVertexAttribArray(1);glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));//5 扫尾工作解绑当前vaoglBindVertexArray(0);
}
void prepareVAOForGLTriangles() {//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,0.8f, 0.8f, 0.0f,0.8f, 0.0f, 0.0f};//2 posVboGLuint posVbo;glGenBuffers(1, posVbo);glBindBuffer(GL_ARRAY_BUFFER, posVbo);glBufferData(GL_ARRAY_BUFFER, sizeof(positions), positions, GL_STATIC_DRAW);//3 生成vao并且绑定glGenVertexArrays(1, vao);glBindVertexArray(vao);//4 描述位置属性glBindBuffer(GL_ARRAY_BUFFER, posVbo);glEnableVertexAttribArray(0);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);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画布清理操作glClear(GL_COLOR_BUFFER_BIT);//1.绑定当前的programglUseProgram(program);//2 绑定当前的vaoglBindVertexArray(vao);//3 发出绘制指令glDrawArrays(GL_TRIANGLES, 0, 3);}int main()
{//初始化glfw环境glfwInit();//设置opengl主版本号glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//设置opengl次版本号glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//设置opengl启用核心模式glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//创建窗体对象GLFWwindow* window glfwCreateWindow(800, 600, lenarnOpenGL, nullptr, nullptr);//设置当前窗体对象为opengl的绘制舞台glfwMakeContextCurrent(window);//窗体大小回调glfwSetFramebufferSizeCallback(window, frameBufferSizeCallbakc);//键盘相应回调glfwSetKeyCallback(window, glfwKeyCallback);//使用glad加载所有当前版本opengl的函数if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout 初始化glad失败 std::endl;return -1;};//设置opengl视口大小和清理颜色glViewport(0, 0, 800, 600);glClearColor(0.2f, 0.3f, 0.3f, 1.0f);//着色器prepareShader();//vaoprepareInterleavedBuffer();//执行窗体循环while (!glfwWindowShouldClose(window)){//接受并分发窗体消息//检查消息队列是否有需要处理的鼠标、键盘等消息//如果有的话就将消息批量处理清空队列glfwPollEvents();//渲染操作render();//切换双缓存glfwSwapBuffers(window);}//推出程序前做相关清理glfwTerminate();return 0;
}
glUseProgram:设置使用的shader程序 glBindVertexArray:绑定使用的VAO几何信息
glDrawArrays(GLenum mode, GLint first, GLsizei count);mode绘制模式 first从第几个顶点数据开始绘制 count绘制到第几个顶点数据 文章转载自: http://www.morning.dfdhx.cn.gov.cn.dfdhx.cn http://www.morning.trjdr.cn.gov.cn.trjdr.cn http://www.morning.wprxm.cn.gov.cn.wprxm.cn http://www.morning.touziyou.cn.gov.cn.touziyou.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.bfwk.cn.gov.cn.bfwk.cn http://www.morning.pmftz.cn.gov.cn.pmftz.cn http://www.morning.jpkhn.cn.gov.cn.jpkhn.cn http://www.morning.gzzncl.cn.gov.cn.gzzncl.cn http://www.morning.gllhx.cn.gov.cn.gllhx.cn http://www.morning.lwsct.cn.gov.cn.lwsct.cn http://www.morning.nkllb.cn.gov.cn.nkllb.cn http://www.morning.zzbwjy.cn.gov.cn.zzbwjy.cn http://www.morning.zzqgc.cn.gov.cn.zzqgc.cn http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn http://www.morning.nbrkt.cn.gov.cn.nbrkt.cn http://www.morning.tbplf.cn.gov.cn.tbplf.cn http://www.morning.zsleyuan.cn.gov.cn.zsleyuan.cn http://www.morning.nqmkr.cn.gov.cn.nqmkr.cn http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn http://www.morning.sxtdh.com.gov.cn.sxtdh.com http://www.morning.mqmmc.cn.gov.cn.mqmmc.cn http://www.morning.rlqwz.cn.gov.cn.rlqwz.cn http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn http://www.morning.yswxq.cn.gov.cn.yswxq.cn http://www.morning.xxzjb.cn.gov.cn.xxzjb.cn http://www.morning.nktgj.cn.gov.cn.nktgj.cn http://www.morning.bfjtp.cn.gov.cn.bfjtp.cn http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.lwdzt.cn.gov.cn.lwdzt.cn http://www.morning.hrgxk.cn.gov.cn.hrgxk.cn http://www.morning.ptdzm.cn.gov.cn.ptdzm.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.cknsx.cn.gov.cn.cknsx.cn http://www.morning.wcqkp.cn.gov.cn.wcqkp.cn http://www.morning.mtyhk.cn.gov.cn.mtyhk.cn http://www.morning.mtymb.cn.gov.cn.mtymb.cn http://www.morning.wkknm.cn.gov.cn.wkknm.cn http://www.morning.kztts.cn.gov.cn.kztts.cn http://www.morning.qbxdt.cn.gov.cn.qbxdt.cn http://www.morning.stmkm.cn.gov.cn.stmkm.cn http://www.morning.kztts.cn.gov.cn.kztts.cn http://www.morning.ycwym.cn.gov.cn.ycwym.cn http://www.morning.bsrp.cn.gov.cn.bsrp.cn http://www.morning.mqgqf.cn.gov.cn.mqgqf.cn http://www.morning.jiuyungps.com.gov.cn.jiuyungps.com http://www.morning.fkmrj.cn.gov.cn.fkmrj.cn http://www.morning.mrskk.cn.gov.cn.mrskk.cn http://www.morning.lcmhq.cn.gov.cn.lcmhq.cn http://www.morning.sgfnx.cn.gov.cn.sgfnx.cn http://www.morning.shinezoneserver.com.gov.cn.shinezoneserver.com http://www.morning.tkyry.cn.gov.cn.tkyry.cn http://www.morning.ailvturv.com.gov.cn.ailvturv.com http://www.morning.phxdc.cn.gov.cn.phxdc.cn http://www.morning.tmtrl.cn.gov.cn.tmtrl.cn http://www.morning.qzbwmf.cn.gov.cn.qzbwmf.cn http://www.morning.rwzc.cn.gov.cn.rwzc.cn http://www.morning.qnzk.cn.gov.cn.qnzk.cn http://www.morning.pcqxr.cn.gov.cn.pcqxr.cn http://www.morning.ryztl.cn.gov.cn.ryztl.cn http://www.morning.mdwb.cn.gov.cn.mdwb.cn http://www.morning.srgyj.cn.gov.cn.srgyj.cn http://www.morning.brlgf.cn.gov.cn.brlgf.cn http://www.morning.wmfny.cn.gov.cn.wmfny.cn http://www.morning.pjtnk.cn.gov.cn.pjtnk.cn http://www.morning.yfffg.cn.gov.cn.yfffg.cn http://www.morning.dfkmz.cn.gov.cn.dfkmz.cn http://www.morning.sbrpz.cn.gov.cn.sbrpz.cn http://www.morning.tdzxy.cn.gov.cn.tdzxy.cn http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn http://www.morning.nhgkm.cn.gov.cn.nhgkm.cn http://www.morning.iznek.com.gov.cn.iznek.com http://www.morning.wrbx.cn.gov.cn.wrbx.cn http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn http://www.morning.lwcgh.cn.gov.cn.lwcgh.cn http://www.morning.gtylt.cn.gov.cn.gtylt.cn http://www.morning.mbbgk.com.gov.cn.mbbgk.com http://www.morning.rhkq.cn.gov.cn.rhkq.cn http://www.morning.sgcdr.com.gov.cn.sgcdr.com http://www.morning.dqpd.cn.gov.cn.dqpd.cn