计图入门-模型数据加载与图元装配篇
前言
完整渲染流程见:https://blog.csdn.net/m0_50003294/article/details/159698237
模型加载
结构总览
这张图展示的是 Assimp (Open Asset Import Library) 的核心数据结构模型

Scene(全局容器)
aiScene 是整个模型文件的根入口。它并不直接存储几何体,而是作为一个总管,持有三张重要的表:
-
mRootNode: 场景的层级起点。
-
加载模型的起始点
-
-
mMeshes[]: 存储模型中所有的几何网格数据(顶点、法线等)。
-
在虚拟世界中用一个又一个的网格来表示模型
-
-
mMaterials[]: 存储模型中所有的材质信息(贴图路径、颜色属性等)。
-
例如miku的发饰,服装贴图
-
Root node/Child node(树结构)
-
mChildren[]: 递归持有子节点,形成父子关系(用于平移、旋转、缩放,并且子物体也跟随改变)。
-
类似:头-发饰的关系
-
-
mMeshes[]: 注意,这里存的是 索引。它告诉引擎:当绘制该node的第i个Mesh时,去Scene的第mMeshes[i]个Mesh中去寻找Mesh
Material(外观表现)
Material 存储了如何渲染该物体的描述信息。
-
它包含各种属性(如环境光、漫反射色)和指向贴图的路径。
-
环境光:如果你的世界没有光源,那么模型是黑色的,这里的环境光就是模型自带的一种能照射到所有Mesh的光源,来保证模型不是全黑
-
漫反射色:物体初始的颜色,如miku的绿色头发
-
-
图中提到的
GetTexture(type)是获取特定类型贴图(如漫反射贴图、法线贴图)的方法。
Mesh(网格)
-
mVertices[] (顶点数组):
-
存储的是 3D 空间中的坐标点。它是最基础的数据,没有它模型就没有形状。
-
-
mNormals[] (法线数组):
-
存储每个顶点的朝向。用来后续渲染流程的像素颜色计算。
-
-
mTextureCoords[] (纹理坐标/UV):
-
这是一张“展开图”坐标,范围通常在 0 到 1 之间。它决定了贴图上的像素点如何精准地“包裹”在 3D 模型上。
-
-
mMaterialIndex (材质索引):
-
这是一个整数。它告诉引擎:“这个网格应该使用Scene的第几号材质包。“
-
-
mFaces[](组装顶点,法线,纹理成一个三角形)
暂时无法在飞书文档外展示此内容
-
Face并不存储坐标数字,它只存储索引(Index)。它的存在是为了告诉 GPU:“请把这几个特定的点连起来,组成一个三角形。” -
试着用记事本打开一个.obj文件?
-
v 0.896930 -0.116701 -1.078061
v 0.736314 -0.076033 1.066762
v -1.052088 -0.064600 0.954513
... vt 0.058285 0.569867
vt 0.082613 0.506661
vt 0.152906 0.498683
...
vn -0.233500 -0.819800 0.522800
vn -0.341800 -0.625700 0.701200
vn -0.276700 -0.937700 0.209800
... f 30/1/1 3/2/2 44/3/3
f 50/4/4 7/5/5 37/6/6
f 35/7/7 6/8/8 31/9/9
f 顶点索引 / 纹理UV索引 / 法线索引 顶点索引 / 纹理UV索引 / 法线索引
... ...
-
v(顶点坐标)、vt(纹理坐标)、vn(法向量)、f(面)数据(包含对应索引)
图元装配
-
图形 API(如 OpenGL、DirectX)根据索引集,将这些点组装成一个三角形
-
自此,渲染管线第一阶段结束,转到第二阶段
-
GO!!!!!【计图入门-顶点着色篇 (https://blog.csdn.net/m0_50003294/article/details/159717931)】
引用
-
LearnOpenGL https://learnopengl-cn.github.io/
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)