昨天是实现了显示GameObject子GameObject的选项卡功能,今天就是要让statusPanel可以控制它们的位置、旋转和缩放了。

  没什么难的,对应选项卡绑定上对应的物体或子物体即可。

  删除操作的话只需要在删除当前选项卡之前递归地删除它的子孙选项卡和对应的模型即可,隐藏的话也是递归地将他们的active设置为false。

  由于smpl模型只有一个skinnedMeshRenderer,然而网格的各个部分是绑定在它的子对象中的,如何获得各种变换后对应网格的顶点坐标呢?

  使用BakeMesh方法即可,用法是先new一个mesh作为容器,然后调用该方法就能把经过各种乱七八糟变换后的mesh的snapshot(快照,就是网格渲染的样子,也是Mesh类型)存入括号里的mesh。

  比如我的OnClick方法是这么写的,就是点击按钮后会在网格的每个顶点坐标生成一个半径为0.1的球:

public void OnClick()
{
Mesh mesh= new Mesh();
smr.BakeMesh(mesh);
foreach(var item in mesh.vertices)
{
var a=GameObject.CreatePrimitive(PrimitiveType.Sphere);
a.transform.position = item;
a.transform.localScale = new Vector3(0.1f,0.1f,0.1f);
}
}

  变换前:



  只旋转子对象:



  点击按钮:



  不过对最外层的变换貌似只响应scale变换,position和rotation的变换却没反应,但是对于直接导入的obj模型是这三类属性都不响应的,真奇怪。

  没办法,只能禁用最外层的scale编辑了...

  smpl模型也不能增加三角形数量,于是也把smpl模型三角形数量编辑给禁了。

  关节点的话只能编辑旋转,编辑position的话会产生很鬼畜的结果,所以把关节点的position和scale也禁了。总之哪里不对禁哪里。



  也相应地把计算接触点那里改成适应skinnedMeshRenderer的版本,来看看效果吧:

  先调好人的姿势以及和椅子的位置:





  然后计算接触点:





  看上去还挺正常的。不过接触点貌似太黑了点,要是红红的就好看一些,应该是阴影的问题。

  于是加了这两行代码:

//不产生阴影也不接收阴影
mr.receiveShadows = false;
mr.shadowCastingMode =UnityEngine.Rendering.ShadowCastingMode.Off;

  然而还是有些接触点是黑色的,这些都是卡在另一个模型里没有光线照射到的球:



  应该能够用设置layer的方式来解决这个问题,给接触点设置为单独的层,然后新建light再设置light的culling mask,只照射接触点所在层就行了:



  最后用一个哲♂学场景测一下效果:











  可以发现所有接触点在光线的照射下熠熠生辉,我成功地驱逐了黑暗!

3dContactPointAnnotationTool开发日志(二二)的更多相关文章

  1. 3dContactPointAnnotationTool开发日志(二九)

      今天想着在Windows平台上跑通那个代码,不过它的官网上写的支持平台不包括windows,但我还是想试试,因为看他的依赖好像和平台的关系不是特别大.   看了下它的py代码,不知道是py2还是p ...

  2. 3dContactPointAnnotationTool开发日志(二六)

      之前给老师看了看我的毕设,老师觉得操作太复杂了,要能像3ds max里那样可以拖动物体的轴进行平移,沿着显示的圆圈旋转以及缩放啥的.说白了就是在Unity3d的Game视图显示出Scene视图里的 ...

  3. 3dContactPointAnnotationTool开发日志(二五)

    记录一下当前进度:

  4. 3dContactPointAnnotationTool开发日志(二四)

      添加了清空2d接触点的按钮,将输出的2d接触点的单位变成了像素,原点在图像的左下角.   对于obj文件的适配更加多样化了.

  5. 3dContactPointAnnotationTool开发日志(二一)

      今天完成了修改按钮颜色,添加smpl模型到工具,以及可以显示物体子物体对应选项卡的功能.把之前的meshRenderer+meshFilter都改成了skinnedMeshRenderer,因为s ...

  6. 3dContactPointAnnotationTool开发日志(二十)

      为了使工具更人性化,我又在每个status的text上绑了个可以拖拽实现值改变的脚本,但是不知道为啥rotx那个值越过+-90范围后连续修改就会产生抖动的现象,试了很多方法也没能弄好,不过实际用起 ...

  7. 3dContactPointAnnotationTool开发日志(二)

      今天看的时候发现其实www的方式是可以根据指定路径读取本地图片到Image中的.也就是昨天提到的第二种方式.   随便选了个图片做示范: 修改后的代码如下: using System.Collec ...

  8. 3dContactPointAnnotationTool开发日志(三二)

      今天就是看怎么把论文的python源码预测出来的smpl模型的姿势和形状参数弄到unity版本的smpl里,但是python版本的和unity版本的不一样.   先看看他的fit_3d.py:   ...

  9. 3dContactPointAnnotationTool开发日志(十二)

      因为ReferenceImage的锚点是固定的左下角,缩放时controller面板也会跟着动.为了使Scale的时候controller上的slider不会远离指针,于是把controller固 ...

随机推荐

  1. Java学习笔记二十七:Java中的抽象类

    Java中的抽象类 一:Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...

  2. java 用接口实现加减乘除计算器

    class Test{ public static void main(String[] args) { fun i=new fun(); jiafa s1=new jiafa(); jianfa s ...

  3. linux动态链接库

    前言 静态链接库会编译进可执行文件,并被加载到内存,会造成空间浪费 静态链接库对程序的更新.部署.发布带来麻烦.如果静态库更新了,使用它的应用程序都需要重新编译.发布给用户(对于玩家来说,可能是一个很 ...

  4. 20145202马超《网络对抗》Exp8 Web基础

    1.本实践的具体要求有: (1).Web前端HTML(1分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. (2).Web前端javas ...

  5. .net core 基于multipart/form-data的文件上传,这里以图片上传为例

    首先传递的数据格式大概如下: 然后就可以在后端获取数据了:直接上代码了哈: [HttpPost]        ///分别获取 data数据和调用图片上传方法 public async Task< ...

  6. nodejs 实现套接字服务

    nodejs实现套接字服务     一 什么是套接字 1.套接字允许一个进程他通过一个IP地址和端口与另一个进程通信,当你实现对运行在同一台服务器上的两个不同进程的进程间通信或访问一个完全不同的服务器 ...

  7. SpringBoot入门(四)——自动配置

    本文来自网易云社区 SpringBoot之所以能够快速构建项目,得益于它的2个新特性,一个是起步依赖前面已经介绍过,另外一个则是自动配置.起步依赖用于降低项目依赖的复杂度,自动配置负责减少人工配置的工 ...

  8. selenium自动追踪微信小程序审核方案

    小程序随着腾讯的不断推广,变的越来越普及,同时更新迭代的速度也越来越快,种类越来越多,那么在如何保证时效性就显得尤为重要,其中很重要一个环节就在于小程序审核通过之后,能否立刻通知到相关技术人员进行发布 ...

  9. 6.2 element和elements

    为什么这个要单独拿出来说,因为我在很多群里面看见很多人不能区分这个! 因为之前的包有点问题,另外后续还会更换app,因为部分app可能没有符合的案例场景,我需要找到那个场景给大家做个实例..便于大家跟 ...

  10. Python中assert的作用?

    1. assert 的作用是什么? assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常. 什么情况下我们会需要这样的代码呢 ...