自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 源码分析学习记录(12)——自动UV展开

2021SC@SDUSCclass UvUnwrapper{public: void setMesh(const Mesh &mesh); void setTexelSize(float texelSize); void unwrap(); const std::vector<FaceTextureCoords> &getFaceUvs() const; const std::vector<Rect> &getCh

2021-12-23 23:16:31 2398 2

原创 源码分析学习记录(11)——半边结构

recombine()首先为半边建立face map,然后找到存在缝隙的位置:遍历每一个面,对于索引为index的面读取其顶点索引序列,若当前节点的第一个节点值为空,则检查下一个邻接面,第一个节点值也为空时,记录在当前位置存在缝隙。 std::map<size_t, std::vector<size_t>> seamLink; for (const auto &face: *m_faces) { for (size_t i = 0; i &

2021-12-19 19:13:52 1035

原创 源码分析学习记录(10)——纹理

2021SC@SDUSC现实生活中,纹理最通常的作用是装饰我们的物体模型,它就像是贴纸一样贴在物体表面,使得物体表面拥有图案。但实际上在渲染器中,纹理的作用不仅限于此,它可以用来存储大量的数据,例如利用纹理存储地形信息。文章目录UV坐标两种方法:来自数据:纹理映射——从二维图像读取颜色或其他信息程序纹理:着色器-编写小型程序,计算颜色/信息作为位置的函数UV坐标为了能够把纹理映射到三角形面片上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就每个顶点P存储二维的(u,v)

2021-12-07 23:46:47 319

原创 源码分析学习记录(9)——PBR材质

2021SC@SDUSCPBR就是Physically-Based Rendering的缩写,意为基于物理的渲染。它提供了一种光照和渲染方法,能够更精确的描绘光和表面之间的作用。它不仅擅长用来表现非常写实的材质,同时也能用来处理风格化的资源。vec4 evaluateLightMaterialColor(in vec4 normal){ // Start with black color vec3 finalColor = vec3(c_zero, c_zero, c_zero);

2021-12-02 23:00:09 684

原创 源码分析学习记录(8)——阴影

2021SC@SDUSCvoid SimpleShaderMeshBinder::renderShadow(const QMatrix4x4 &projectionMatrix, const QMatrix4x4 &viewMatrix){ if (nullptr == m_shadowProgram) { if (!m_openglFunctionsInitialized) { QOpenGLFunctions::initializeOp

2021-11-28 16:24:25 247

原创 源码分析学习记录(7)——插值技术

2021SC@SDUSC文章目录HermiteHermitevoid HermiteCurveInterpolation::update(){ std::vector<std::pair<size_t, QVector2D>> keyNodes; for (size_t nodeIndex = 0; nodeIndex < m_nodes.size(); ++nodeIndex) { auto findPerpendicularDire

2021-11-18 12:46:31 419

原创 源码分析学习记录(6)——蒙皮

void MotionsGenerator::generateMotion(const QUuid &motionId){ if (m_bones.empty()) return; std::map<QString, std::vector<int>> chains; QRegularExpression reJoints("^([a-zA-Z]+\\d*)_Joint\\d+$"); QRegularEx

2021-11-11 13:25:05 978

原创 源码分析学习记录(5)——骨骼存储与建立

2021SC@SDUSC文章目录骨骼数据结构骨骼数据结构Dust3D为(哺乳)动物提供了统一的骨骼组织形式,分为Neck、Limb、Tail、Joint标记,用户可以在使用时选择套用“Animal”的骨骼类型。对于非生物或其他不那么规则的骨骼,可以使用Joint对关节部分进行自定义标记。enum class BoneMark{ None = 0, Neck, Limb, Tail, Joint, Count};class RigBone{

2021-11-06 20:48:46 642

原创 源码分析学习记录(4)——逆向运动学IK

2021SC@SDUSC文章目录SkeletonIkMoverSkeletonIkMoverstruct SkeletonIkNode{ QUuid id; QVector3D position; QVector3D newPosition;};class SkeletonIkMover : public QObject{ Q_OBJECTpublic: SkeletonIkMover(); ~SkeletonIkMover(); v

2021-10-30 20:48:51 929

原创 源码分析学习记录(3)——细分曲面

2021SC@SDUSC文章目录Catmull-Clark细分Catmull-Clark细分

2021-10-21 15:36:39 478

原创 源码分析学习记录(2)——网格无缝缝合

2021SC@SDUSC文章目录convertHalfEdgesToEdgeLoops()recombine()函数In B-Mesh system, the skeleton defines the global structure of the shape and the envelope of the shape balls defines the profile of the shape. The set of shape balls contribute to construct the i

2021-10-14 22:32:50 477 1

原创 源码分析学习记录(1)

2021SC@SDUSC从本周开始,我们团队正式展开了Dust3D源代码的分析工作。经过小组讨论后,我们粗略地按照开源项目的文件名将文件划分进了模型构造、骨骼与动画、渲染与材质三大模块中。其中我们推测mesh-开头的文件与Dust3D的核心功能模型构造有关,故本周我将首先从meshgenerator这一部分开始学习。文章目录MeshGenerator类fillPartWithMesh()函数MeshGenerator类MeshGenerator是QObject的公有派生类。QObject 是Qt模

2021-10-09 08:26:24 211

原创 Dust3D学习记录——说明Introduction

2021SC@SDUSC“人的认知过程是从观察、模仿、亲身实践、总结经验或教训,然后逐渐学会一项技能,此技能练习千百次,才慢慢窥探到其底层原理。”文章目录简述功能特点一些基本操作技术浅析成员分工简述Dust3D是一款轻量级开源3D建模软件,支持Windows、MacOS和Linux。软件以主视图和侧视图为参考,通过放置节点和调整节点的半径、位置及其他设置的方式快速地创建出无缝的3D模型,有效加速用于游戏或3D打印中的模型的生产。软件下载:https://dust3d.org/OpenSource

2021-09-30 22:41:40 335

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除