文章目录
LearnGL - 学习笔记目录
本人才疏学浅,如有什么错误,望不吝指出。
上些篇:
了解了 Dear ImGui 可以制作 GUI,使用也足够方便,强烈推荐使用。
这一篇:我们再添加一些后续方便编译、测试用的面板:Hierarchy、Inspector,顺便学习一下 C++。
目前的界面长这样:
看看一些效果
Camera RenderLayer - 相机的渲染对象的层级设置
为了方便演示,本身相机默认值为:Default 层级,我设置为 Everything 层级了
GameObject Layer - 游戏对象的层级设置
选中 Hierarchy Panel 中的 MyCube0,在 Inspector Panel 中设置它的 Layer 层级,层级设置为 Nothing。
因为相机渲染层级 RenderLayer 不包含该层级,所以可以看到没有渲染该 Cube。
MeshFilter inspector - MeshFilter 可以查看网格的一些信息
目前还不能在 Inspector Panel 中预览网格(后面等熟悉 OpenGL 后可以添加),大概思路是 RT( RenderTexture),渲染到纹理,再将RenderTexture 设置到 Dear ImGui 的图片显示,再加上对该图片组件添加鼠标旋转,缩放,方便查看网格。
Material - 使用的材质预览
目前主要显示:
- Shader 使用的 Shader 名字,后续如果有文件名可以显示,如果直接加载脚本的则不显示文件名
- 还有 Shader 中的 attribute 有哪些
- 还有 Shader 中的 uniform 用到的贴图
- 还有用到的纹理的相关内部,外部格式信息、Wrap、Filter 等
Hierarchy - 层级对象的面板功能
目前只有列表项,还有顶部有一些可以过滤显示哪些 Layer 层级的 GameObject,后续添加一个文本输入框,增加模糊搜索功能
Transform - 组件优化
与 Unity 的显示类似,显示:Position, Scale, Rotation 信息,目前我这三个值是相对局部坐标设置的,后续可以添加选项处理是:相对局部坐标,还是世界坐标来设置
操作方式与 Unity 的很类似,就是激活工作区时 + 鼠标右键时 + WSAD 可以使用视角的移动
不知不觉,include 下的文件越来越多了,处于学习便利性,我直接放在了 include 目录底下
代码量的纯文本一下添加了上100 K+。
my_array.h
一些定长数组的封装my_gameobject_etc.h
封账了:Layer
,GameObject
,Component
,Transform
,因为有一些相互引用,所以放一起方便处理my_game_mgr.h
游戏GameObject
的管理。my_get_str_hash.h
获取字符串的哈希my_macros_switcher.h
宏定义开关、数值总入口my_mesh.h
网格Mesh
的封装my_object.h
所有我的封装类的基类,便于同一实例数,与销毁my_ref_count_mgr.h
部分资源的统计引用自动销毁my_simple_load_tex.h
简单的纹理加载my_texture.h
纹理对象封装my_time.h
时间相关管理类print_gl_version_info.h
打印 GL 版本信息shader.h
最早封装的ShaderProgram
类,材质会使用到
my_comp_material.h
材质管理类Material
my_comp_meshfilter.h
网格过滤类MeshFilter
my_comp_meshrenderer.h
网格渲染类MeshRenderer
my_demo_camera_controller.h
就是之前的镜头类Camera
,稍微完善了一些my_demo_comp_cube.h
演示用的Cube
组件脚本my_demo_comp_script_holder.h
演示用的,控制多个Cube
组件附加对象GameObject
的脚本
my_texture_import.h
纹理导入相关参数配置类
后续有空再 3D 视图(游戏视图)层的 Gizmo 绘制
总结
如果说有时间的话,继续学习,进修肯定弄做一个简单一些的 3D 引擎(玩具)。
但是如果要想与目前市面上成熟的引擎相比,是没法比,我这个是学习用的作品(玩具),别人的是产品,是一个团队生成的,没法比。
特别是资源优化管理非常需要时间去维护,还有一些插件功能等,脚本语言等(目前我连C++都不熟悉,类型 meta 信息的反射都暂时没时间去搞),还有类似 Unity 的各种编辑器,Shader Graph、Asset Store(嵌入个 browser 。。。-_-!),还有输入设置、资源打包,不同平台发布,还有脚本调试,网格寻路,这些都是不可能一个人去搞,太多,所以但做学习研究一下就好了。