当前位置: 首页> 汽车> 新车 > 韩国免费行情网站的推荐理由_重庆seo技术博客_seo标题关键词怎么写_如何做网络推广人员

韩国免费行情网站的推荐理由_重庆seo技术博客_seo标题关键词怎么写_如何做网络推广人员

时间:2025/7/10 2:47:27来源:https://blog.csdn.net/zszwebart/article/details/143237262 浏览次数: 0次
韩国免费行情网站的推荐理由_重庆seo技术博客_seo标题关键词怎么写_如何做网络推广人员

参考w网址

说是以前的GetPos()干掉了。。

AttributeError: 'c4d.BaseObject' object has no attribute 'GetPos'. Did you mean: 'GetAbsPos'?

不管是Get还是Set,RelPos和AbsPos的位置只有freeze之后才有差别。

移动了父对象并不会对子对象有任何影响,只有拽出来在场景根级别才能叠加父的位置,真正的成为绝对坐标,AbsPos,这或许就是一个bug吧。。那你想要真真的absPos只有手动加父物体的变换了。。

这个跟官方推荐freeze transform有很大关系。场景中创建父子两物体,parent上挂上下面的python,勾选enable

import c4d
def main():doc = c4d.documents.GetActiveDocument()# 创建一个父对象(立方体)和一个子对象(球体)parent_cube = doc.SearchObject("parent")child_sphere = doc.SearchObject("child")# 获取初始相对位置和绝对位置rel_pos_init = child_sphere.GetRelPos()abs_pos_init = child_sphere.GetAbsPos()print("初始相对位置:", rel_pos_init)print("初始绝对位置:", abs_pos_init)# 移动父对象new_position = c4d.Vector(0, 0, 100)parent_cube.SetAbsPos(new_position)# 手动更新场景,确保位置计算正确c4d.EventAdd()# 获取移动父对象后的相对位置和绝对位置rel_pos_after = child_sphere.GetRelPos()abs_pos_after = child_sphere.GetAbsPos()print("移动父对象后相对位置:", rel_pos_after)print("移动父对象后绝对位置:", abs_pos_after)if __name__ == "__main__":main() 

反馈

初始相对位置: Vector(0, 0, 100)#冻结前,GetRelPos和GetAbsPos一模一样。
初始绝对位置: Vector(0, 0, 100)#冻结前,GetRelPos和GetAbsPos一模一样。
移动父对象后相对位置: Vector(0, 0, 100)#冻结前,移动父,GetRelPos和GetAbsPos一样。
移动父对象后绝对位置: Vector(0, 0, 100)#冻结前,移动父,GetRelPos和GetAbsPos一样。

发现还真是一样的。这时候选择子物体点freezeP,就把transform里的数据移动到freeze里来了。物体的相对父物体的位置标记为0了,这对角色控制器回归到tpose很有用。设置tpose控制器时候点freeze,动作后坐标设置归0,就到tpose了。

初始相对位置: Vector(0, 0, 0)#冻结后,相对父物体变为0了,位置不变
初始绝对位置: Vector(0, 0, 100)#冻结后,GetRelPos和GetAbsPos就有差别了
移动父对象后相对位置: Vector(0, 0, 0)#冻结后,相对父物体变为0了,位置不变
移动父对象后绝对位置: Vector(0, 0, 100)#移动父对象GetAbsPos()并不能改变什么

这回反馈就不一样了。这时候再把child球体从parent里扯出来

初始相对位置: Vector(0, 0, 100)
初始绝对位置: Vector(0, 0, 200)
移动父对象后相对位置: Vector(0, 0, 100)
移动父对象后绝对位置: Vector(0, 0, 200)#扯出来后GetAbsPos()才真正意义是全局位置,当然也就不关父物体啥事了。所以初始和移动父的数据都是一样的。

发现球体从父对象中移除了,绝对位置竟然加上了父对象的位置。成为了真正的绝对位置。

接着释放掉freeze p,

初始相对位置: Vector(0, 0, 200)#相对位置就加上了freeze的数值
初始绝对位置: Vector(0, 0, 200)
移动父对象后相对位置: Vector(0, 0, 200)#增移父物体也不关数据卵事,以为不是子物体了。
移动父对象后绝对位置: Vector(0, 0, 200)

把父物体的增移改回去,再把子球体拽来当儿子。又跟开始一模一样了。

初始相对位置: Vector(0, 0, 100)
初始绝对位置: Vector(0, 0, 100)
移动父对象后相对位置: Vector(0, 0, 100)
移动父对象后绝对位置: Vector(0, 0, 100)

这说明了啥呢?

不管是Get还是Set,RelPos和AbsPos的位置只有freeze之后才有差别。

移动了父对象并不会对子对象有任何影响,只有拽出来在场景根级别才能叠加父的位置,真正的成为绝对坐标,AbsPos,这或许就是一个bug吧。。那你想要真真的absPos只有手动加父物体的变换了。。

 #获取假的绝对位置,其实是相对位置,和relpos一样。
RelPos2 = obj2.GetAbsPos()# 获取obj2父物体的世界位置
GETparent = child.GetUp()
GETparentPos=GETparent.GetAbsPos()
AbsPos= GETparentPos+RelPos2
#这样的abspos才是真的

关键字:韩国免费行情网站的推荐理由_重庆seo技术博客_seo标题关键词怎么写_如何做网络推广人员

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: