OpenGL 显示 OBJ 模型

前几天,把 obj 文件转换为 json 文件,并用 gl_draw_array 的方式 ,成功绘制出来了一个 立方体 obj 模型,和一个 pikachu 造型的 obj模型。手拆 obj 文件,并且把皮卡丘的模型加载到 OpenGL 窗口里的时候,还真有一点兴奋,等有精神了,打算好好总结一下。

现在临时记录 几个 现在能想起来的注意事项。

1.在用 glBufferData 给 OpenGL 的 VBO 传值时,该用 GLfloat 类型的,就不要用 float .sizeof 的时候 也要传 GLfloat.这样保证 c++代码里的 浮点数,和 shader 里面的 vec3/mat4 等类型的数据,在类型上能对得上。否则很可能出现不兼容的问题。

2.在 glBUfferData 给 vbo 赋值时, 需要传 连续内存的 size , 和 内存的 起点。这时候是考验 C++ 基本功的时候。一定要闹明白 自己的 sizeof 究竟是多少,如果想再 sizeof 一段内存时, sizeof 了 一个 指针 的话,只能返回指针的 size,整个数据就是错的。数组、指针在表示内存位置时的概念,在此时也一定要清晰。否则就写出来的模型就会加载不出来。

3.在加载模型时,可能会出现模型文件的 坐标本身 (也就是model矩阵),没有归一化在 [-1,1] 范围里。可能不适合当前的 view projection 矩阵的参数范围,这时需要调整可是范围,也就是调整 view 和 projection 矩阵。同时,也可以考虑 使用一个 scale 矩阵作为 trasform 矩阵的一部分,缩放目标模型。

皮卡丘真的显示在屏幕里面的时候,还真的有点兴奋。虽然在牛人眼里看来很简单,但是这是头一回自己解析成功模型文件,并且显示成功。所有细节都是自己亲手处理的,还挺有成就感。

最近几天公司的事情有点多,有点忙,自学的事这两天有点落下了。两三天不看OpenGL , 刚刚理解不久的概念,突然又开始变得生疏起来。看来真的需要 学而时习之 才能加深印象啊。

下一步打算做个阶段性复习,重新封装个小框架,尝试写一个 3D 的 推箱子,或者3d 漫游,或者 (几年前就搞过的)3d 迷宫,来练练手。巩固一下 刚刚掌握的 VAO ,VBO  ,OBJ 文件解析知识。

猜你喜欢

转载自blog.csdn.net/korekara88730/article/details/79427466