在unigine中利用高斯变换使(ObjectMeshDynamic)物体变形
来源:互联网 发布:上海达内java教育地址 编辑:程序博客网 时间:2024/05/18 01:08
void changeMesh(string meshName,dvec3 hitPoint,double force,double radiu){ObjectMeshDynamic m_mesh = node_cast(engine.editor.getNodeByName(meshName));dvec3 Vertics[];dvec3 bVertics[];DeformMesh(m_mesh,hitPoint,force,radiu,Vertics,bVertics);for(int i = 0;i<Vertics.size();i++){m_mesh.setVertex(i,Vertics[i]);}engine.profiler.begin("mesh");m_mesh.updateBounds();m_mesh.updateTangents();m_mesh.flushVertex();engine.profiler.end();}void getMeshVertexArray(ObjectMeshDynamic m_mesh,dvec3 vertics[],dvec3 normals[]){int nCount = m_mesh.getNumVertex();for(int i = 0; i < nCount;i++){vertics[i] = m_mesh.getVertex(i);normals[i] = m_mesh.getNormal(i);}}void DeformMesh(ObjectMeshDynamic m_mesh, dvec3 point, double lidu, double radiu,dvec3 Vertics[],dvec3 bVertics[]){int nCount = m_mesh.getNumVertex();dvec3 Normals[];getMeshVertexArray(m_mesh,Vertics,Normals);for(int i = 0;i<Vertics.size();i++){bVertics[i] = Vertics[i];} double BanJing = radiu*radiu; dvec3 AverageNormal = dvec3(0.0f,0.0f,0.0f); //计算平均法线 for (int i = 0; i < Vertics.size(); i++) { //计算筛选范围 double SqrDis = sqrMagnitude(Vertics[i] ,point); if (SqrDis > BanJing) { continue; } double Distance = sqrt(SqrDis); //权重因子 double Falloff = LinearFalloff(Distance, radiu); //平均法线 AverageNormal += Normals[i] * Falloff; }AverageNormal = normalize(AverageNormal); //遍历定点,修改网格 for (int i = 0; i < Vertics.size(); i++) { //计算筛选范围 double SqrDis = sqrMagnitude(Vertics[i] , point); if (SqrDis > BanJing) { continue; } double Distance = sqrt(SqrDis); //高斯模糊 double Ffalloff=GaussFalloff(Distance,radiu); //顶点修改 Vertics[i] -= AverageNormal * Ffalloff * lidu; } } //线性变化double LinearFalloff(double distances, double inradius){ return clamp01(1.0f - distances / inradius);}double GaussFalloff(double distance, double inRadius){ return clamp01(pow(360.0f, -pow(distance / inRadius, 2.5f) - 0.01f));}/*限制数值在0.0f ~ 1.0f 之间*/double clamp01(double value){if(value < 0)return 0.0f;if(value > 1)return 1.0f;return value;}
0 0
- 在unigine中利用高斯变换使(ObjectMeshDynamic)物体变形
- OpenGL中三维物体显示在二维屏幕上显示的变换过程
- 7.UE4中物体的空间变换
- unity中父子关系变化导致场景中的物体变形
- Unity3D 利用Highlighing System插件使物体轮廓高亮显示
- 【转】物体变形代码
- 【Unity3d开发基础】场景中物体的变换
- 在Cocos2D中改变动态物体为静态物体
- 基于opencv利用霍夫变换实现圆形物体的检测
- 在Unity中获得一个物体的所有子物体包括孙物体。
- 在代码中获得物体,改变属性
- 判断物体是否在摄像机视野中
- Unity中物体在固定路线移动
- 利用图形使标题字体变形
- 【Qt OpenGL教程】25:变形和从文件中加载3D物体
- artDialog在浏览器中点击变形
- 在用setInterval(),getContext()出错,利用画布画图,图形变形
- opencv中利用图像相减识别物体运动
- 基于ARM在cpu上做神经网络加速
- Android 利用SearchView实现ListView过滤
- linux 内核中得到 当前进程 对应的可执行文件的 绝对路径
- java学习(2)-运算符以及控制语句
- Oracle 删除根据id 删除重复数据
- 在unigine中利用高斯变换使(ObjectMeshDynamic)物体变形
- H264码率设置
- Mycat开发实践---开发基础
- 如何阅读TensorFlow源码
- kubernetes源码阅读之kubelet(二)
- Android 定位使用network provider无法定位的问题
- IOS绘图优化
- Appium学习之踩坑合集
- 验证表单的demo