文章目录
LearnGL - 学习笔记目录
- 如何绘制?
- 先画第一个直角三角形
- 绘制效果
- 再画第二个直角三角形
- 绘制效果
- 查看正面的顺/逆时针
- 使用 索引缓存 EBO/IBO 来节省显存
- 重新计算显存顶点+索引用量
- 索引缓存 EBO/IBO 的创建、绑定、设置数据
- 绘制
- 完整源码
- References
本人才疏学浅,如有什么错误,望不吝指出。
上一篇:LearnGL - 02 - DrawTriangle、LearnGL - 02.1 - DrawTriangle_Extension,学会了如何画一个三角形。
这一篇:画一个 Quad(Quadrilateral) 四边形。
如何绘制?之前已经画了一个三角形了。
那么画四边形就简单多了,两个三角形组合成一个四边形不就好了,如下图:
就是两个直角三角形的组合嘛,那么开始咯。
先画第一个直角三角形先看看之前的文章话的
这个显然不是直角三角,需要调整一下数值。 之前的数值为:
float vertices[] = {
// x, y, z r, g, b
-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,
};
调整为:
float vertices[] = {
// x, y, z r, g, b
-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.5f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f,
};
绘制效果
最简单的思维是:直接添加多三个顶点即可。(后面会使用更好的方式)
float vertices[] = {
// x, y, z r, g, b
// 第一个直角三角性
-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.5f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f,
// 第二个直角三角性
0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,
0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f,
-0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f,
};
然后是 glDrawArray 的参数调整为绘制6个顶点:
原来是绘制3个顶点的:
glDrawArrays(GL_TRIANGLES, 0, 3); // 绘制三角图元,从0号顶点,开始绘制3个顶点
调整为绘制6个顶点的:
glDrawArrays(GL_TRIANGLES, 0, 6); // 绘制三角图元,从0个顶点,开始绘制3个顶点
绘制效果
可以通过 glGet 中的 glGetIntegerv
第一个参数使用符号常量:GL_FRONT_FACE
,第二个参数传入返回的指针 GLint*
即可拿到当前正面的设置。
也可以通过 glFrontFace 传入 GL_CW
或是 GL_CCW
来设置正面面向。
//glFrontFace(GL_CW); // 顺时针
//glFrontFace(GL_CCW); // 逆时针(默认的)ClockWise
GLint facing;
glGetIntegerv(GL_FRONT_FACE, &facing); // 获取正面的顺逆时针 : CW(ClockWise - 顺时针), CCW(Counter ClockWise - 逆时针)
std::cout
关注
打赏
热门博文
- 3D Assets (Textures & Model & Animations) & Game Design Ideas & DCC Tutorials & TA
- LearnGL - 学习笔记目录
- Unity - Timeline 知识汇总
- Unity Graphics - 知识点目录 - 停止翻译,因为发现官方有中文文档了
- Graphic资料
- Unity Lightmap&LightProbe局部动态加载(亲测2020以及以上版本官方修复了)
- Unity - 踩坑日志 - 低版本线性颜色空间渲染异常的 “BUG”
- Unity Shader - PBR 渲染 SP 导出的素材
- 什么是 3A 游戏?
- Photosohp - 实现 2D MetaBall、MetaFont