Part1前言

有些建筑模型,建模的时候坐标采用高斯投影的方式来设置,这样会导致模型的顶点非常之大。导入到3dmax软件之后,由于其按照float精度进行渲染,从而造成渲染的模型抖动等问题。这里提出一种思路,通过将模型顶点统一进行偏移,从而解决在3dmax中渲染精度问题。

Part2fbx精度

通过如下定义可以看出fbx其实是双精度的。

class FBXSDK_DLL FbxVector4 : public FbxDouble4

具体fbx格式相关,可以参考之前的文章。看我七十二变:fbx格式

Part3建模测试

新建一个长宽高为1米的模型,然后将其放在x为2米 y为2米的位置,最后将原点移到原点。这种方法做出来的模型,居然顶点不会变化,保存之后如下

Vertices: *24 {
a: -0.5,-0.5,0,0.5,-0.5,0,-0.5,0.5,0,0.5,0.5,0,-0.5,-0.5,1,0.5,-0.5,1,-0.5,0.5,1,0.5,0.5,1
}

通过重置变换之后,顶点就符合我们预期,发生了偏移。

顶点变换如下

Vertices: *24 {
a: 1.5,1.5,0,2.5,1.5,0,1.5,2.5,0,2.5,2.5,0,1.5,1.5,1,2.5,1.5,1,1.5,2.5,1,2.5,2.5,1
}

之后我们通过fbx的sdk将顶点的x和y统一减去偏移的2米。

Part4fbxsdk代码实现

整个代码的逻辑参考fbx的sdk的demo的DisplayMesh.cxx这个文件,位置如下

D:\Program Files\Autodesk\FBX\FBX SDK\2020.3.1\samples\ImportScene

调用逻辑
1 初始化fbx的sdk

FbxManager *lSdkManager = NULL;FbxScene *lScene = NULL;// Prepare the FBX SDK.InitializeSdkObjects(lSdkManager, lScene);

2 加载fbx模型

string lFilePath = R"(D:\work\code\study\github\other\fbxsdk\cplus\tt.fbx)";
auto lResult = LoadScene(lSdkManager, lScene, lFilePath.c_str());

3 遍历模型

FbxNode *rootNode = lScene->GetRootNode();if (rootNode){for (auto i = 0; i < rootNode->GetChildCount(); i++){DisplayContent(rootNode->GetChild(i));}}

DisplayContent函数中,这里只处理FbxNodeAttribute::eMesh格式

for (auto i = 0; i < pNode->GetChildCount(); i++){DisplayContent(pNode->GetChild(i));}FbxNodeAttribute::EType lAttributeType;if (pNode->GetNodeAttribute() == NULL){std::cout << "NULL Node Attribute" << std::endl;return;}lAttributeType = (pNode->GetNodeAttribute()->GetAttributeType());if (FbxNodeAttribute::eMesh == lAttributeType){DisplayMesh(pNode);}

DisplayMesh处理中,我们只处理顶点信息

FbxMesh *lMesh = (FbxMesh *)pNode->GetNodeAttribute();DisplayControlsPoints(lMesh);

DisplayControlsPoints中对顶点信息进行统一偏移,这里减去了x和y的2米

int i, lControlPointsCount = pMesh->GetControlPointsCount();FbxVector4 *lControlPoints = pMesh->GetControlPoints();for (i = 0; i < lControlPointsCount; i++){lControlPoints[i][0] = lControlPoints[i][0] - 2;lControlPoints[i][1] = lControlPoints[i][1] - 2;}

4 保存场景

SaveScene(lSdkManager, lScene, "tt2.fbx");

Part5总结

本文主要实现了通过fbx的sdk来实现模型顶点的统一偏移。代码在github仓库地址如下:https://github.com/inveta/ModelProcess/tree/main/VertexOffset

Part6Inveta团队

Inveta团队由研发、美术设计、建模等组成。团队介绍:
https://www.inveta.cn/about.html
团队开源项目:
https://github.com/inveta

fbx模型实现顶点偏移相关推荐

  1. qt使用assimp加载模型_iOS使用assimpKit加载FBX模型步骤详解

    研究背景 体积:一个.dae模型大概有1M那么大 而.fbx模型0.5M 现状 xcode现在不能直接读取.fbx模型 方案 1.使用assimpKit加载 2.使用Wish3D加载 结果 1.使用a ...

  2. UE4-基于顶点偏移制作拉扯效果

    基于顶点偏移制作拉扯效果 材质方面的节点图(全览) 效果: 关键节点: Absolute World Position 该节点输出 对象(已经赋予了材质)的像素在世界坐标的三维位置,XYZ对应RGB. ...

  3. FBX格式解析顶点信息和用OpenGL显示

    FbxSDK是解析FBX的工具,在unity和ue中使用较多,下面介绍一下用这个工具解析FBX格式并用OpenGL显示出来. FBX的scene是由一系列node组成的,node包含一个Transfr ...

  4. mixamo网站FBX模型带骨骼绑定动作库

    mixamo网站FBX模型带骨骼绑定动作库,unity游戏各职业人物动画,兼容3dmax maya c4d iclone blender等主流3D软件 mixamo游戏3D模型带骨骼绑定FBX动作库 ...

  5. 不可能的工作:在FBX模型导入脚本中生成模型的预置体

    不可能的工作:在FBX模型导入脚本中生成模型的预置体 #if UNITY_EDITOR using System.Collections; using System.Collections.Gener ...

  6. ui unity 图片高亮_程序化生成UI模型与顶点动画

    顶点动画一般指通过顶点着色器对模型每个顶点独立运动的方法.在游戏中遇到碎片爆破或者聚合一类的.涉及到大量同类物体在有序和无序之间切换的特殊效果,就非常适合将所有物体顶点每帧位移和形变的迭代交付给GPU ...

  7. 微信小程序实现FBX模型的动画加载

    鉴于有CSDN友问我FBX模型在小程序端加载的问题,我就在这里给大家介绍一下吧~ 首先,加载fbx模型,我们用到的是three.js和不同的模型类型的加载库,那么,我们在得到了web版本的加载库的前提 ...

  8. ThreeJS - 直接设置Fbx模型的某个关节的位移和旋转值

    1 在ThreeJS中直接设置Fbx模型的某个关节的位移和旋转值 示例代码如下: fbxModel.traverse(function (child) {// 如果子节点为骨骼if(child.isB ...

  9. ThreeJS - 动态更换fbx模型的某个子Mesh现有的纹理贴图为指定的纹理贴图

    1 动态更换fbx模型的指定纹理贴图 在使用ThreeJS中的FBXLoader的过程中,我们在有的时候只需要Fbx模型的网格信息,而每个网格的纹理我们想自己动态的指定,这在OpenGL中很简单,在T ...

最新文章

  1. Ajax实现DataGrid/DataList动态ToolTip
  2. 更改c语言程序保存地址吗,(C语言)修改文件时间程序(创建时间、修改时间、访问时间)...
  3. 连续时间傅里叶变换的性质(简介及推导)
  4. java根据经纬度坐标计算两点的距离算法
  5. Andriod anim alpha中的属性介绍
  6. Oracle数据库迁移-基础
  7. RASP技术攻防之基础篇
  8. spark:sortByKey实现二次排序
  9. PWA(Progressive Web App)入门系列:Sync 后台同步
  10. 一个权重的物体拷贝权重给多个(oneWeightToMany)
  11. 造兵三国的服务器要维护多久,FAQ_造兵三国_九游手机游戏
  12. windows2008 IIS下配置FTP服务
  13. 《TCP/IP详解》协议卷读书笔记之概述
  14. 电容式 触摸按键 原理
  15. python计算学分绩点的程序_Python爬虫实战七之计算大学本学期绩点
  16. 华为热设计工程师待遇_【华为热设计工程师面试】华为热设计工程师大家要慎重考虑。-看准网...
  17. mac电脑如何装双系统Linux,mac怎么装双系统|mac电脑安装双系统教程
  18. cadence 旋转快捷键_cadence快捷键
  19. 常用的学习软件,网站
  20. 机票价格按照淡季、旺季,头等舱和经济舱收费,输入机票原价、月份和头等舱或者经济舱 旺季(5-10月) 头等舱9折,经济舱8.5折 淡季(11-4月) 头等舱7折,经济舱6.5折

热门文章

  1. java判断图片是否被修改过_4种方法判断图片是否被PS处理过,你都会吗? | X的博客...
  2. IT外包服务主要会面临什么样的困难或者难题
  3. 2262 c语言软件解码,单片机解码315M的pt2262编码的c51程序
  4. 信安Note_day14
  5. [网络安全学习篇50]:Web架构安全分析
  6. 概率论知识回顾(四):事件独立性、贝努利概型
  7. SQL临时表|游标|两个日期之间计算时差|临时表条件查询
  8. labview二维数组保存至excel
  9. ubuntu 20.04死机卡死情况解决办法
  10. 【数据结构-学习笔记】算法的有穷性