五大热门工科专业,90%的家长都在用错误的方式排序
2026/6/26 2:39:20
| 概念 | 类比 | 解释 |
|---|---|---|
| 原始数据 | 你要寄的一堆商品(衣服、书本、电子产品) | CPU内存里的顶点数组 |
| VBO | 你把这些商品统一装进一个快递大箱子,然后交给快递公司 | 把数据从CPU上传到GPU显存 |
| VAO | 你在箱子外贴一张发货清单:“第一件是衣服,第二件是书本,第三件是电子产品” | 告诉GPU“每3个数是一个顶点的位置,每2个数是纹理坐标” |
| glDrawArrays | 你对快递员说:“按这张清单处理1号到3号商品” | 命令GPU开始画 |
// 第一步:准备原始数据(你要寄的商品)floatvertices[]={// 位置 // 颜色-0.5f,-0.5f,1.0f,0.0f,0.0f,0.5f,-0.5f,0.0f,1.0f,0.0f,0.0f,0.5f,0.0f,0.0f,1.0f};// 第二步:创建VBO(把商品装箱,寄给GPU)unsignedintVBO;glGenBuffers(1,&VBO);// 申请一个快递箱子glBindBuffer(GL_ARRAY_BUFFER,VBO);// 打开这个箱子glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);// 把数据装进去// 第三步:创建VAO(写说明书,告诉GPU怎么读)unsignedintVAO;glGenVertexArrays(1,&VAO);// 申请一张说明书glBindVertexArray(VAO);// 开始写说明书// 说明书内容:位置数据在偏移0的位置,每5个数一组glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,5*sizeof(float),(void*)0);glEnableVertexAttribArray(0);// 说明书内容:颜色数据在偏移3个float的位置,每5个数一组glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,5*sizeof(float),(void*)(3*sizeof(float)));glEnableVertexAttribArray(1);// 第四步:画图(快递员按说明书处理)glBindVertexArray(VAO);// 把说明书递给快递员glDrawArrays(GL_TRIANGLES,0,3);// 开始处理前3个顶点VBO是必须的,VAO是可选的(但强烈建议使用)
glVertexAttribPointer重新配置一遍(麻烦,但能跑)glBindVertexArray就能切换不同模型的数据格式