抱歉,今天太累了,脑袋昏沉沉的,快速地写完一个矩形就快睡着了 (~O~),所以今天的内容会非常短...
OpenGL的底层是一个状态机!
忘记是从哪边找到的,但这句话对我来说,间接了解了为什麽OpenGL的AP会是长这样。
最好理解的这句话的就是看OpenGL1.1的API,如果要话一个图形的话,会是这样写(没记错的话):
glBegin(GL_NICE_SHAPE);
// set the positons, color data here...
glEnd();
就像这样,一层层设定,最後在glEnd
的时候绘出,虽说我使用的是OpenGL3,但也没有改变他的架构。
下面直接先贴上一段code:
// the first rectangle...
static const float VERTICES[] = {
0.5f, 0.5f, // top right
0.5f, -0.5f, // bottom right
-0.5f, -0.5f, // bottom left
-0.5f, 0.5f, // top left
};
static const unsigned int INDICES[] = {
0, 1, 3,
1, 2, 3
};
unsigned int vbo, vao, ibo;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(VERTICES), VERTICES, GL_STATIC_DRAW);
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(INDICES), INDICES, GL_STATIC_DRAW);
glVertexAttribPointer(RENDER_2D_CONTEXT.default_shader.attribs_locations[SHADER_ATTRIB_VEC2_POS], 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (void*)0);
glEnableVertexAttribArray(RENDER_2D_CONTEXT.default_shader.attribs_locations[SHADER_ATTRIB_VEC2_POS]);
glUseProgram(RENDER_2D_CONTEXT.default_shader.id);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
这个片段其实就是在实作:
如何产生Buffer存储顶点资料(Vertex Buffer Object)与顶点的绘画顺序(Element Buffer Object) -> 绑定资料
-> 驱动Shader -> 画在萤幕上。
这边就直接把程过贴上来了,没多余的力气讲解我最甚麽了
<<: # Day 5 Supporting PMUs on RISC-V platforms (一)
WP Lightbox 2 是一款支援图片灯箱效果,点图放大附关闭功能的外挂,适合在响应式网页上使用...
如同近年被热烈讨论的 微服务架构* 与 CQRS架构*,AWS上推广的资料分析原则之一也是建议要将资...
工作日志碎碎念 OH,我现在在实作的时候,常常翻我这次铁人赛的文章,因为这就是我的学习笔记麻 结果发...
[Day 01] 单元测试是什麽?为什麽要做单元测试? 相信只要在资讯业待过一阵子, 一定都会听过单...
今天迈入第14天了,耶~~~今天的内容我也是很喜欢,尤其是自己调整背景颜色的实作,真的觉得非常有趣~...