今天就是让背景图可以变大变小,变透明度,然后将3d的点投影到图片上,输出2d接触点信息:   可以看到输出了正确的接触点信息:   然后还把空物体的包围盒大小设置为边长为0.1的的正方体,点击选中关节点更加流畅,不过关节点并不一定在人物的网格中所以还是通过选项卡来选择更加准确.…
  添加背景图片后发现Runtime Transform Gizmo无法选中物体了:   于是改了一下EditorObjectSelection.cs中的WereAnyUIElementsHovered函数: private bool WereAnyUIElementsHovered() { if (EventSystem.current == null) return false; Vector2 inputDevPos; if (!InputDevice.Instance.GetPositi…
  今天就是看怎么把论文的python源码预测出来的smpl模型的姿势和形状参数弄到unity版本的smpl里,但是python版本的和unity版本的不一样.   先看看他的fit_3d.py:  里面的params参数,也就是输出到.pkl文件的内容,包含四个属性:cam_t.f.pose.betas,分别是相机位置.焦距.姿势和形状参数,前两个暂时先无视,先把后两个比较重要的参数弄好.   用cpickle(python2)看看这两个参数: with open(img_path,"r&qu…
  在玩的时候遇到了一个python的问题: Traceback (most recent call last): File ".\convert.py", line 13, in <module> a=pickle.load(readFile) ImportError: No module named multiarray 如何解决请看python "No module named multiarray "的解决方法   改了一下它的代码,把它自带的渲…
  在vs2017里生成opencv时遇到了无法打开python27_d.lib的问题,具体解决请看这个,不过我用的是方法2,python37_d.lib找不到同理.   Windows下可以用的opendr…
  今天想着在Windows平台上跑通那个代码,不过它的官网上写的支持平台不包括windows,但我还是想试试,因为看他的依赖好像和平台的关系不是特别大.   看了下它的py代码,不知道是py2还是py3,于是干脆py2和py3上都试下.它的py依赖都在requirements.txt文件中: numpy>=1.11.0 scipy>=0.17.1 chumpy opendr matplotlib   其它的直接用pip安装就好,就是这个opendr在Windows10上装的时候有问题: Ex…
  师姐说物体间不能有穿透,于是我试了下给物体加rigidbody和meshCollider   然后就报错:   说是用meshCollider要么去掉刚体要么就把刚体设置为iskinematic.说白了就是用meshCollider没法检测和别的物体的碰撞,于是就没加collider了.   然后就研究单幅图像如何生成人体模型比较方便,找到了一篇叫作Keep it SMPL: Automatic Estimation of 3D Human Pose and Shape from a Sin…
  今天的主要工作是把选中物体以及复制删除物体和右边三个面板联系起来,就是通过鼠标框选住物体,右边面板的对应项的颜色也会改变,而且通过右边面板也能控制物体的选中状态,被选中的物体成cyan青色,并且包围盒的角会有绿色线框表示.说起来好像挺简单的,不过还是搞了一天.   本来还可以支持undo/redo操作的,但是都是只能相应快捷键或者是拖动轴的那些操作,删除和复制物体也是支持的,但是直接改输入框里的值还是不支持的.虽然改一下半天时间应该能弄好,不过感觉这不是工作重点,要是以后需要的话再用吧,现在…
  之前给老师看了看我的毕设,老师觉得操作太复杂了,要能像3ds max里那样可以拖动物体的轴进行平移,沿着显示的圆圈旋转以及缩放啥的.说白了就是在Unity3d的Game视图显示出Scene视图里的坐标轴等等.这些鬼操作要是自己动手实现估计能写个把月了,而且我也不知道咋写.   硬着头皮写了两天也就这幅挫样子:   不知道咋写没关系,可以上百度搜搜看看有没有现成的可以直接用的Unity包.费了九牛二虎之力在Unity3d的Asset Store里找到了一个看上去比较靠谱的,叫作runtime…
  添加了清空2d接触点的按钮,将输出的2d接触点的单位变成了像素,原点在图像的左下角.   对于obj文件的适配更加多样化了.…
  smpl模型得是一个整体,于是我让子物体的选项卡的删除按钮消失,这样就不会删除不必要的东西然后产生奇怪现象:…
  昨天是实现了显示GameObject子GameObject的选项卡功能,今天就是要让statusPanel可以控制它们的位置.旋转和缩放了.   没什么难的,对应选项卡绑定上对应的物体或子物体即可.   删除操作的话只需要在删除当前选项卡之前递归地删除它的子孙选项卡和对应的模型即可,隐藏的话也是递归地将他们的active设置为false.   由于smpl模型只有一个skinnedMeshRenderer,然而网格的各个部分是绑定在它的子对象中的,如何获得各种变换后对应网格的顶点坐标呢?  …
  今天完成了修改按钮颜色,添加smpl模型到工具,以及可以显示物体子物体对应选项卡的功能.把之前的meshRenderer+meshFilter都改成了skinnedMeshRenderer,因为smpl模型用的是这个,所以统一一下好了.   这代码真是越写越难改.…
  为了使工具更人性化,我又在每个status的text上绑了个可以拖拽实现值改变的脚本,但是不知道为啥rotx那个值越过+-90范围后连续修改就会产生抖动的现象,试了很多方法也没能弄好,不过实际用起来问题应该不大.   不过拖拽时鼠标碰到屏幕边缘就动不了了,于是我想像unity那样可以让鼠标出现在屏幕的另一边,这样就拖拽起来就更加的方便.   关于如何实现该功能请看完下列教程:   1.unity中锁定鼠标移动&&隐藏鼠标&&强制是鼠标移动到某一位置   2.C# 鼠标光…
  增加了输出接触点信息到文件功能.…
  今天实现了tab效果,按tab键可以在status面板的各个输入框内来回切换,参考Unity3D - UGUI实现Tab键切换输入框.按钮(按Tab键切换高亮显示的UI)…
  今天又改进了一下算法,把生成出来的接触点按中心坐标拍了个序,再把中心坐标一样的坐标点合并,x,y,z每个维度都只保留大的值.然后来看看效果:   先是1倍的,只剩下4096个接触点了,2^12个,少了1w多个接触点,耗时也只需要46秒.   然后是3倍的,4026个接触点,耗时46秒.   最后是10倍的,4030个接触点,耗时55秒.…
  调了一上午才发现是把下面这个函数: private float DivideTriangle(int []triangle,out int []outTriangle,List<Vector3> vertices)//切割三角形 { float re = -1; int p = 0; for (int i = 0; i < 3; i++) { int a = triangle[i]; int b = triangle[(i + 1) % 3]; var len = (vertices…
  有时候拖动一个窗口的时候可能直接拖出去了那就再也拖不回来只能reset重新来过:   于是开了个类成员变量在start里记录了一下panel的位置: var lp = panel.GetComponent<RectTransform>().localPosition; localPosition = new Vector2(lp.x,lp.y);   在OnClick中将其复原: panel.GetComponent<RectTransform>().localPosition…
  貌似每次让用户手动输入文件路径太不人道了,于是参考Unity 实用教程 之 调用系统窗口选择文件或路径增加了让用户浏览文件的功能,点击输入框旁边的+就可以找到文件并加载进来:   貌似调整位置再计算接触点是假的,原因应该是我计算用的点的坐标知识mesh原来的点的坐标,并没有考虑缩放.位移和旋转这些因素:   要想将变换应用到mesh.vertices上,可以参考Matrix4x4.TRS Creates a translation, rotation and scaling matrix  …
  为了使生成的项目能够显示报错信息我又勾选了下面这几个选项:   然后生成的项目运行时可以显示错误信息了,貌似是shader是空的.   之前的代码是这么写的,调用了Shader.Find(),貌似不行. meshRenderer.material = new Material(Shader.Find("Standard"));   于是直接把要用的shader给拖到我的objManager对象的脚本里:   然后用上下面的代码: meshRenderer.material = ne…
  因为ReferenceImage的锚点是固定的左下角,缩放时controller面板也会跟着动.为了使Scale的时候controller上的slider不会远离指针,于是把controller固定到了左下角.   在网上找了半天也没有找到好的在图像上画球的方法,没办法只好用image来当求了,放上球的照片即可.得把三维坐标转到UI坐标里,具体方法请看Unity3D 世界坐标上一个点对应UI上一个点.   于是具体的玩法就是先计算接触点,再把图片和三维物体对齐,点击Overlay按钮,就会生…
  把image也做成panel的形式了,并且放进了scrollView里,真实地显示出图像:   其它两个scrollView的content也做成自适应大小了,就是添加一项content的height就会增加相应的那么多.   为了把三维模型投影到图片上,之前的做法显然不行于是又做了个图片自适应的panel用来对齐三维模型和图片.   可以通过调整alpha来控制图片透明度,scale控制图片大小.   slider和图片离得太远了,还得使PanelImage的宽度和高度能够自动更新才行.…
  要是那几个状态栏不能拖动的话岂不是显得太呆板了,于是我又参考Unity官方视频教程学习了如何实现拖动状态栏的功能,还挺简单的.   比如说要拖动这个PanelStatus面板,我只让使用者通过拖动其Text组件来实现拖动整个面板移动的效果.   只要为其Text绑定一个DragPanel.cs脚本,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEn…
  今天的任务是实现选中接触点功能并添加模型或接触点的属性改变功能,先从最简单的位置x,y,z改变入手,于是创建了一个面板(PanelStatus),添加了几个InputField来让用户输入数值改变选中物体的位置:   搞了半天终于实现了选中接触点功能,选中的球是青色,未选中的是红色,为了尽量重用以前的代码,我直接在之前的脚本上做了修改,效果如下:   然后又实现了选中物体显示和修改坐标信息的功能:   还挺好玩的,接触点的位置也能修改.   光修改位置还不够,于是又增加了修改旋转角度和缩放大…
  今天上午去实验室打算把项目从github上pull下来发现貌似不行,然后强行pull下来后项目变得乱七八糟了,有的组件都不知道去哪里了.去github上看了看发现上面day6和day7都没有,特别奇怪.没办法又得慢慢改,这git的问题贼烦人.   修改好后再commit给我弹了这么些东西:   去网上搜寻解决方案,都是些不知所云的东西,看得我头皮发麻.于是只好暴力重建仓库,也就是删除原有的,重建一个,clone下来,再把修改好的项目放到clone下来的文件夹里再push,终于没有这些烦人的红…
  调了半天发现是逻辑错误,改了一下终于没那么奇怪了:   但是有的接触点很明显跑偏了.再回顾一下自己是怎么求的,我是直接用的下面的代码求解一个点是否在另一个物体内部: var bounds = uso.mesh.bounds; if (bounds.Contains(mesh.vertices[mesh.triangles[i+j]])) { xj = true; }   这个bounds我又去unity文档上查了一下,发现它只是物体的包围盒,所以显然会得到多余的点,没办法只能再改了.   既…
  一种可行的思路就是枚举一个模型的三角面片,然后判断三角形是否与另一个物体相交即可.为了让效果更好我想只渲染模型的线框.   在网上查了半天好像Unity里都没有自带的方便的渲染线框的方式,我又自己玩了玩发现可以将材质换成unity自带的VR/SpatialMapping/Wireframe.不过看上去模型不是镂空的,只是表面显示了三角面片,要是只有线框就更好了.   又回过头看了看,发现Unity用shader显示物体线框提到的方法还挺好的,就是下载一个UCLA Wireframe Shad…
  今天要做的第一件事就是把obj文件里不同的对象分割开来.   通过仔细观察发现obj文件中以"o "开头的行会跟着一个对象的名字.g代表对象所属组名,我这里只要用到对象名就行了所以没管组名了.然后这个o的位置在该对象的vn和f之间.记录一下f开始的下标就能够把obj文件中的多个对象分离出来.   具体代码我也是在别人的代码基础上改的,不过还是贴一贴吧.   这个是ObjFormatAnalyzer.cs的: using System; using System.Linq; usin…