当前位置:首页 » 操作系统 » 骨骼的算法

骨骼的算法

发布时间: 2023-01-28 22:01:34

1. 骨架大小到底如何算

手量法。
用手指的食指和大拇指圈住左手腕骨头突起的地方,就可以大约判断骨架的大小。如果食指和拇指的指尖能碰触到说明骨架中等。两指有交叠说明骨架小。两手指互相碰不到,说明骨架大。

2. 人体骨骼排列的概率,进化的理论能成立吗

生命起源、概率,与彩票。

假设某个家伙买了一个中奖概率为千万分之一的单注彩票,结果是他真的中了特等奖。在巨大的精神冲击下他开始胡思乱想:千万分之一的概率是如此之低,一个人买上一辈子彩票都不可能中,这个特等奖要么是幻觉,要么是陷阱,于是乎他拒绝去领奖。如果某个彩民真这样做了,所有人都会嘲笑他脑子秀逗,但与此类似的思维方法却累见不鲜,比如反对生命自然起源的人常干这样的事。

我们再回到那个拒绝领奖的彩民,他的主要错误就是只从单人的视角认为中奖是个极小概率事件,因此倾向于判断其不可能真实发生。但从整个彩票发行规模的尺度来看,假如当期彩票真卖了一千万注,且只有他一个人获得特等奖,那么这个中奖事件从整体的角度来看是合理的。假如每期彩票只卖了十万注,但已经累计100期没有任何人中奖,那么这一期有人中特等奖,同样也是可以接受的。因此我们考虑一个极小概率事件的发生可能是否存在,除了他本身的“单次”概率,还要考虑事件在空间和时间上延续的尺度。

对于一个在地球上自然起源生命的概率有多小?无论是生命自然起源的支持者或反对者都不能给出过分乐观的数字。但道金斯的《盲眼钟表匠》中有个很有意思和说服力的思考:对于生命起源的可能性的讨论,必须考虑整个宇宙的广度和时间延伸。由于我们目前尚未在宇宙其他地方发现任何的生命现象,那么最极端的情况就是整个宇宙在近200亿年的时间历程中,只有地球诞生了一次生命,类比刚才的彩票逻辑,彩票发行的范围非常之广(全宇宙),发行时间如此之长(200亿年),而目前看来中奖的只有地球这一注,即使生命自然起源是一个极极极极低的概率事件,那么从整体上来看,他的发生也是完全可能的。为什么大多数人无法接受这个可能性?因为“一般人”的思维尺度是有局限性的,他们对“可能性”定义的最大极限,是他们在自己区区几十平方公里的生活范围,短短100年的生涯中可能发生的事情,而任何超越这个广度和时间太多的(比如恐怖的宇宙尺度范围)思维命题,对于一般人就显得尤其困难。

另有一个假设:这个世界中有无数个平行宇宙,只有诞生生命的那个宇宙,才可能有智能生命对生命起源问题进行思考并产生疑惑,而我们所在的宇宙恰好是诞生了生命的那个。呵呵,这个假设实际上将彩票发行注数扩展到无限,需要多大就多大,且无法证伪,很强大但也很无赖,基本上和全知全能的大神是一路货色。在此提起这个假设,仅供思维游戏,不可当作严谨的科学假说。

尽管严谨的生命科学家不能任意扩大生命彩票的发行数,不敢逾越现有天文学和宇宙生命的观测结果。但反对生命自然起源的人却不用管这些科学思维的“规矩”,在多年来的反进化宣传中,不断地给生命自然起源的低概率加码。最本源表述的灵感来自威廉·培利(William Paley)主教,大概意思是:“生命自然起源的概率,相当于一阵风刮过一堆零件,产生了一个装配正确的钟表”。钟表只怕是当时能想到的最复杂的东西。随着科技的进步,该责难也能与时俱进,一阵风刮出个火车头,一阵风刮出个波音747,反正从1百多年前到现在,虽然谈论都是生命的自然起源概率这一件事,但用来类比的东西却越来越复杂,究竟复杂到什么程度,他们自己也没有一个谱,反正尽往最复杂的东西上靠就对了。
不过我至少可以肯定世界上不可思议的事情就是:一阵风刮出来一个全知全能至善至美的大神。有些人相信这个,却断然否定大风可以刮出一个波音747,他们的逻辑标准还真是和他们的大神一样神秘而不可琢磨。

3. 古代动物骨头的计算方法

1.1 骨结构力学指标的选择和计算方法 三点弯曲力学试验中骨结构力学指标主要 有最大载荷,最大桡度,弹性载荷,弹性桡度及 能量吸收(载荷变形曲线下的面积)前4 标可直接从载荷一变形曲线上获得或从仪器上直接给出.能量吸收可从仪器计算机上给出.有 时由于仪器等级的限制,不能给出载荷变形 曲线(指载荷最大或断裂变形曲线)下的面 积,此时可人工计算载荷弹性变形曲线下的 面积,其方法是将该图形做成直角三角形,计算 该三角形面积即可.上述骨结构力学指标主要 反映骨结构力学特性的变化,其变化主要受骨 尺寸的大小和骨几何形状的影响.当骨的几何 形状和尺寸大小发生变化时,上述指标将发生 变化,例如在单纯给予氟化物对抗OVX 大鼠 骨丢失过程中,由于该制剂使骨的几何形状,特 别是骨尺寸发生变化.使得该药物对骨结构力 学特性无明显影响,但使骨材料力学特性降低, 导致骨质量降低一根据骨结构力学特性的变 化可帮助判断骨几何形状或尺寸的变化.

1.2 骨材料力学指标的选择和计算方法 选择任何一项骨材料力学特性指标的前 提,是首先要计算骨截面魄性矩废项指标的计 算方法较多,这是囤为骨横截面的形状并不规 作者单位:1OOc94.航天医学工程宪所 则.目前比较一致的观点是将骨(指股骨)横截 面看作为椭圆形,骨截面惯性 矩(1,)的计算公式为J 一(BH.--bh.)/64 中日:骨横截面外层长轴,H:骨横截面外层短轴.b:骨横截面内层长轴,h:骨横截面内层短 轴.根据每个骨样品的l,,可选择并计算如下指 长骨椭圆形横截面1)骨应力 计算公式为:应力一 力方向外径;l,:骨截面惯性矩2)骨应变 计算公式为:应变一12~7H/2 3)骨弹性模量(又称内在硬度)计算公式为:弹性模量一 F:为弹性载荷值?
4)骨刚性系数(又称外在硬度) 中国骨质疏杷杂志I9 计算公式为:刚性系数一式中为弹性载荷值 四点弯曲力学试验2.1 骨结构力学指标的选择与计算同三点弯 曲力学指标.

2.2 骨材料力学指标的选择与计算 同三点弯曲力学试验一样,首先计算骨截 面惯性矩方法同三点弯曲力学试验 I)骨应力 计算公式为:应力一 公式中为同侧支中心到同侧压缩头 中心点的距离.如图2 所示 四弯睹力学试验2)骨应变 计算公式为:应变一百
3)弹性模量 计算公式为:弹性模量ZAZL 一4_4) 应该指出的是,三点弯曲材料力学应变的 计算公式仅适用于弹性应变的计算由于在三 点弯曲力学试验中有剪切应力诱导的骨变形存 在,该变形占骨整个变形值的l0~15%J 此计算的结果值要大于实际弯曲引起的变形值,而计算的弹性模量值要低于实际值,在实际 应用中应注意此差的存在由于四弯曲力 学试验能克服三弯曲力学试验的不足之处. 使剪座力为零.因此四电弯曲力学试验中的 应变可适用于弹性应变和屈服点后应变的计 算要清楚的是.这些计算出的数据均是间接计 钟仙来的.与仪器直接给出的数据相比.精确度 差(有一定误差存在),这点也应注意到.
上述所介绍的是股骨弯曲试验的计算方 法有时需用胫骨进行弯曲力学试验,由于两种 骨骼的几何形状有一定差异,因此其骨截面惯 性矩的计算公式应为: 在计算出和朋.应在骨的两个支点处和中心点处分别测定和,取平均值其 它力学指标计算方法同三点和四点弯曲力学计 算公式 骨压缩力学试验的指标选择和计算方法该试验主要适用于椎骨,但也可将长骨制 备戚标准件后进行压缩力学试验.压缩力学试 验常选用如下力学指标对骨力学特陛进行综合 评价.
1)最大压缩载荷:它是对骨小梁的骨质,结 构连续性.皮质厚度,横截面积和材料质量的综 台反应可直接从载荷一变形曲线上获得.
2)骨最大应变:可根据骨标本缩短的最大 长度与其初始长度的比值获得.
3)骨最大应力:骨横截面单位面积上所承 受的载荷值骨标本横截面积的计算方法如下: 根据阿基米德定律计算骨体积,公式如下: 骨体积一量望重三警爱 计算出的骨体积与标本高度的比值为面积
4)弹性模量:应力一应变曲线上的最大斜 5)骨强度:骨最大截荷值与每1"171111标本长 度内矿盐含量的比值(或与骨盐密度rag/ram 比值) .4No.11998
6)骨最大硬度:载荷一应变曲线的最大斜 率与每mm 标本长度矿盐含量或与骨矿盐密 度的比值 7)能量最大吸收:骨应力一断裂变形曲线 下的总面积(mJ/ram). 骨扭转力学试验指标的选择及计算方法这是一项比较敏感的骨生物力学试验,骨 组织对不同力学载荷耐受程度大小的顺序依次 为压缩载荷>弯曲载荷>扭转载荷.由此可知, 骨组织对扭转力学试验是比较敏感的.
1)最大剪切应力 计算公式为:剪切应力一公式中丁:扭力矩,,:骨标本外层半径: 极性截面惯性矩. 应该指出的是,该公式适用于标本横截面 为圆形的圆柱体的扭转应力计算.长骨的横截 面积并不是标准圆形,因此在计算中,值应取 骨外层长轴半径和骨外层短轴半径的平均值. 值按三点弯曲力学实验中的计算方法计 算,所得数值乘以2 即为极性截面惯性矩.或取 骨横截面最大和最小部位的值之和为 JJ

4. 骨骼绑定 顶点 算法

绑好骨骼的模型如果想保持某一个pose直接调骨骼就好了,但是要打开自动关键帧,这样你调的pose才能被自动记录下来,如果你是要把模型摆好pose后作场景里的一个雕塑用,在调好pose后,选择模型直接塌陷掉蒙皮skin或者Physique,或者把模型再转一次poly都可以,这时模型的姿势就定格了,然后把骨骼删掉,只保存模型就行了。

个步骤都影响着最终的动画效果,甚至还有专门从事骨骼绑定的人员——骨骼绑定师。秒秒学MAYA角色骨骼绑定宝典主要从关节工具的使用,掌握修改关节属性、创建下身骨架、脊椎骨骼和手部关节以及学习使用关节镜像命令等方面介绍,让初学者一步步了解绑定设置,掌握maya角色骨骼绑定。

5. 袁天罡的“称骨算法”究竟是什么,如何计算

称骨算命是算命方法的一种,和生辰八字算命、紫微斗数算命异曲同工,略有不同,虽然都是用出生的时间算命,但比较而言,称骨算命将命运分的比较粗略,只是把命运分为五十一种,计算方法:从您农历的出生年月日时辰来核算重量;据此再照命评命诗,称骨算命是由袁天罡创立,根据每个人的生辰八字,年、月、日、时分别的重量计算总合。得出八字重量:称骨重量。然后根据袁天罡称骨算法进行称骨算命。

6. 骨重的计算方法是什么

人体骨骼大约占人体20%重量,通常情况下男性骨重8.0kg、女性骨重5.4kg。

人骨中含有水、有机质(骨胶)和无机盐等成分。其水的含量较其他组织少,平均约为20~25%。在剩下的固体物质中,约40%是有机质,约60%以上是无机盐。

骨骼与人体的代谢关系十分密切。骨骼中含有大量的钙、磷及其他有机物和无机物,是体内无机盐代谢的参与者和调节者。

(6)骨骼的算法扩展阅读:

骨骼与肌肉、肌腱、韧带等组织协同,共同完成人的运动功能。骨骼提供运动必须的支撑,肌肉、肌腱提供运动的动力。

骨骼的造血功能表现在人的幼年时期,骨髓腔内含有大量的造血细胞,这些细胞参与血液的形成。人到成年后,部分松质骨内仍存在具有造血功能的红骨髓。

7. 骨头重量算命

各种各样的算命方法准吗?比如八字、称骨头重量什么的 算命吗?有的讲《易经》,有的说《冰鉴》.那我们就来谈谈什么是命运:有人讲人的命天注定,每个人都有各自的命运,是注定的不同的.那么命运是注定的么?我告诉你:是注定的,然而注定它的并不是天,而是你的思想.却切说是命运是由你在人生的众多的选择中决定的.假设你是只毛虫,要爬上人生这颗大树,那么在每一个分叉的枝桠的选择决定了你最终走到哪个树梢,所以无数个选择造就无数种命运.决定你如何选择的是思想,要改变命运只能改变思想,如果不改变思想就算让你重新活一遍你也必将走到今天,创立腾讯的依然是马化腾,当总统的依然是奥巴马.那么命运可以预测吗?可以,只要能相对客观的解读思想再佐以对规律的把握.例如一个人骨子里争勇斗狠,暴躁无常,开车如飞,伤于车祸或斗殴就是必然的,要改变这些功要改变性格,而性格恰恰是思想决定的.

鬼谷子骨算命如何确定出生年重量 鬼谷子称骨算命法
出生时辰的重量:
子时(23-1点):一两六 丑时(1-3点):六钱
寅时(3-5点):七钱 卯时(5-7点):一两
辰时(7-9点):九钱 巳时(9-11点):一两六
午时(11-13点):一两 未时(13-15点):八钱
申时(15-17点):八钱 酉时(17-19点):九钱
戌时(19-21点):六钱 亥时(21-23点):六钱
出生日的重量:
初一:五钱 初二:一两 初三:八钱 初四:一两五 初五:一两六
初六:一两五 初七:八钱 初八:一两六 初九:八钱 初十:一两六
十一:九钱 十二:一两七 十三:八钱 十四:一两七 十五:一两
十六:八钱 十七:九钱 十八:一两八 十九:五钱 二十:一两五
廿一:一两 廿二:九钱 廿三:八钱 廿四:九钱 廿五:一两五
廿六:一两八 廿七:七钱 廿八:八钱 廿九:一两六 三十:六钱
出生月的重量:
一月:6钱 二月:7钱 三月:1两8 四月:9钱
五月:5钱 六月:1两6 七月:9钱 八月:1两5
九月:1两8 十月:8钱 十一月:9钱 十二月:5钱
出生年的重量:
1941:6钱 1942:8钱 1943:7钱 1944:5钱 1945:1两5
1946:6钱 1947:1两6 1948:1两5 1949:7两 1950:9钱
1951:1两2 1952:1两 1953:7钱 1954:1两5 1955:6钱
1956:5钱 1957:1两4 1958:1两4 1959:9钱 1960:7钱
1961:7钱 1962:9钱 1963:1两2 1964:8钱 1965:7钱
1966:1两3 1967:5钱 1968:1两4 1969:5钱 1970:9钱
1971:1两7 1972:5钱 1973:7钱 1974:1两2 1975:8钱
1976:8钱 1977:6钱 1978:1两9 1979:6钱 1980:8钱
1981:1两6 1982:1两 1983:7钱 1984:1两2 1985:9钱
1986:6钱 1987:7钱 1988:1两2 1989:5钱 1990:9钱
1991:8钱 1992:7钱 1993:8钱 1994:1两5 1995:9钱
1996:1两6 1997:8钱 1998:8钱 1999:1两9 2000:1两2
2001:6钱 2002:8钱 2003:7钱 2004:5钱 2005:1两5
2006:6钱 2007:1两6 2008:1两5
批注诗:
2两1:短命非业谓大凶,平生灾难事重重,凶祸频临限逆境,终世困苦事不成
2两2:身寒骨冷苦伶仃,此命推来行乞人,劳劳碌碌无度日,中年打拱过平生
2两3:此命推来骨轻轻,求谋做事事难成,妻儿兄弟应难许,别处他乡作散人
2两4:此命推来福禄无,门庭困苦总难荣,六亲骨肉皆无靠,流到他乡作老人
2两5:此命推来祖业微,门庭营度似希奇,六亲骨肉如水炭,一世勤劳自把持
2两6:平生一路苦中求,独自营谋事不休,离祖出门宜早计,晚来衣禄自无忧
2两7:一生做事少商量,难靠祖宗作主张,独马单枪空作去,早年晚岁总无长
2两8:一生作事似飘蓬,祖宗产业在梦中,若不过房并改姓,也当移徒二三通
2两9:初年运限未曾亨,纵有功名在后成,须过四旬方可上,移居改姓使为良
3两:劳劳碌碌苦中求,东走西奔何日休,若能终身勤与俭,老来稍可免忧愁
3两1:忙忙碌碌苦中求,......>>

八字称骨算命重量越大越好吗?骨重轻的能化解吗? 袁天罡鼎骨算法:根据个人八字(即出生年月日和时辰),分别在后面所附内容中查出出生年的重量、出生月的重量、出生日的重量以及出生时辰的重量,将四个重量相加所得即为八字重量。根据八字重量去查相关的批注诗。一般说来,八字重的比较不容易振的住,也就是说不容易被邪物侵扰,当然玩招魂招仙的游戏也不容易成功。显然不是绝对的八字越重越好,轻的也有比较好的,但从一般意义上说,八字重的普遍比轻的得到的批示要好,所以不用太担心,主要还看你命理的主脉。

称骨算命骨重越重越好吗 袁天罡称骨术,根据生辰判断骨重,从分析表上看确实越重越好。

命运,骨称轻的很差,骨称越重的越好是不是 *** 的八字才三两,具体要看八字结构的,才能知道命好与不好

称骨头算命男命2两9 最不靠谱的。

生辰八字称重查询表 称骨算命对照表骨重 称骨算命表对应命运2.1 两 短命非业谓大空,平生灾难事重重;凶祸频临陷逆境,终世困苦事不成。 2.2 两 身寒骨冷苦伶仃,此命推来行乞人;劳劳碌碌无度日,终年打拱过平生。 2.3 两 此命推来骨格轻,求谋作事事难成;妻儿兄弟应难许,别处他乡作散人。 2.4 两 此命推来福禄无,门庭困苦总难荣;六亲骨肉皆无靠,流浪他乡作老翁。 2.5 两 此命推来祖业微,门庭营度似稀奇;六亲骨肉如冰炭,一世勤劳自把持。 2.6 两 平生衣禄苦中求,独自营谋事不休;离祖出门宜早计,晚来衣禄自无休。 2.7 两 一生作事少商量,难靠祖宗作主张;独马单枪空做去,早年晚岁总无长。 2.8 两 一生行事似飘蓬,祖宗产业在梦中;若不过房改名姓,也当移徒二三通。 2.9 两 初年运限未曾亨,纵有功名在后成;须过四旬才可立,移居改姓始为良。 3 两 劳劳碌碌苦中求,东奔西走何日休;若使终身勤与俭,老来稍可免忧愁。 3.1 两 忙忙碌碌苦中求,何日云开见日头;难得祖基家可立,中年衣食渐无忧。 3.2 两 初年运蹇事难谋,渐有财源如水流;到得中年衣食旺,那时名利一齐收。 3.3 两 早年做事事难成,百年勤劳枉费心;半世自如流水去,后来运到始得金。 3.4 两 此命福气果如何,僧道门中衣禄多;离祖出家方为妙,朝晚拜佛念弥陀。 3.5 两 生平福量不周全,祖业根基觉少传;营事生涯宜守旧,时来衣食胜从前。 3.6 两 不须劳碌过平生,独自成家福不轻;早有福星常照命,任君行去百般成。 3.7 两 此命般般事不成、弟兄少力自孤行;虽然祖业须微有,来得明时去不明。 3.8 两 一身骨肉最清高,早入簧门姓氏标;待到年将三十六,蓝衫脱去换红袍。 3.9 两 此命终身运不通,劳劳作事尽皆空;苦心竭力成家计,到得那时在梦中。 4 两 平生衣禄是绵长,件件心中自主张;前面风霜多受过,后来必定享安康。 4.1 两 此命推来自不同,为人能干异凡庸;中年还有逍遥福:不比前时运来通。 4.2 两 得宽怀处且宽怀,何用双眉皱不开;若使中年命运济,那时名利一起来。......>>

称骨算命中,骨重越大越好吗?谢谢。 对的,但是由于人的基数根不相同,又会导致不同结果,比如说一个基础根很劣的人,出身贫寒,但是他如果过上中层的生活就是超越.相反亦同,所以这要综场考量,楼主近日是否感觉遇事不通,其实还是应该放宽心,注意风水,保护好
称骨算命是根据你的出生具体时间(理论上要求精确到秒)而判断命运的好与坏。并不是越重越好,也不是越轻越好。它有一套完整的骨重命运表,你从网上应该能搜索到,自己去对应一下便知好坏。
称骨算命法只是按你的出生年月日套算,这里面的骨是一种称喂,跟人身上的骨头是完全2码事.当然只是算命的话,当然是重量越大命就越好哦,这不过是迷信而已.

袁天罡秤骨算命解析 交友谨慎,老年衣食足用之命
忙忙碌碌苦中求,何日云开见日头,难得祖基家可立,中年衣食渐能周。
注解:此命推来敬重双亲,有福有禄,六亲和睦,义气高强,少年勤学有功名,忠孝双 全,心中无毒,不贵则福,出外受人钦佩,四海闻名,老来荣华,限上无忧,一生安康 ,年轻欠利,末限安享福禄,白鹤先生云:此命三限,有子孙旺相局,初限早成家计, 辛勤劳苦,中限渐渐生财重奔江山,夫妻少配无刑,末限荣华富贵,寿元八十三岁,死 于冬月之中。

称骨算命详解 六两六钱: 大富大贵,堆金积玉之储命 _评骨格重量歌诀_袁天罡称骨
注解:此格人间一福人,堆金积玉满堂春,从来富贵由天定,正笏垂绅谒圣君。

意思是,这样的骨头 是富贵命,钱财多多,是有福禄的命,是与上流社会接触的上等命。

8. 骨骼化算法是什么

一种运用数学形态学运算的数字图像处理算法

9. 如何做人体骨架模型

本文提供一种将骨架动作矢量映射到人体骨架模型的一种方法,通过输入各个骨骼的当前方向,反馈给骨架模型,这样就实现了动画的效果。实验开发工具是VC6.0在OpenGL平台上开发完成。

阅读对象:

假定读者已经熟悉OpenGL编程,就算不熟悉,只要了解基本的旋转,平移,堆栈操作就好。
假定读者已经了解基本的c++编程,其中需要了解递归的算法,递归的方法请参考一下数据结构吧。

制作过程:

第一步,3D模型准备

这一步骤的目的是提供分解的骨骼模型,它需要导出多个组成身体结构的文件,模型可以不用自己制作,只要到网上找找吧,应该很多,最好是是人体模型,如果用动物的模型也可以,不过需要自己定义映射骨架了,比如图中的骷髅模型是我从人体动画软件poser 5.0找到的。然后使用3d max 将身体的各个部位导出为3ds文件,这个步骤很简单,也不需要有什么3d max的基础。这里有一个小的技巧就是可以选中多个部分作为一个3ds模型导出,比如我需要将左右肩胛骨与脊椎骨肋骨作为同一个部分导出,这样可以将它命名为身体躯干(body)。这样我们就准备了各个3ds文件了,分别是:

身体躯干 BODY.3DS
头部 HEAD.3DS
左臂 LSHOULDER.3DS
右臂 RSHOULDER.3DS
左小臂 LELBOW.3DS
右小臂 RELBOW.3DS
左大腿 LTHIGH.3DS
右大腿 RTHIGH.3DS
左小腿 LFEET.3DS
右小腿 RFEET.3DS

这样这些组成部分就可以灵活的拼接出一个人体来了。

第二步,定义相关的核心数据结构

为了得到运动的各个身体部分数据信息,我们需要存储一些运动信息,主要有:
骨骼ID
骨骼关节的当前位置;r_x,r_y,r_z
骨骼之间的关系,例如手臂是躯干的延伸,而左小臂是左臂的延伸;PID,CID

我们可以通过下图来了解骨骼之间的结构关系

存放3ds文件位置;file_name_3ds
3ds模型的初始化方向;这个是比较抽象一点的概念,它是指从父节点指向子节点的方向,例如左小臂的初始位置是平放向下,那么对应的矢量就是 (-0.2,-1,0)

以下是数据结构部分:
class bone
{
public:
int y;
int x;
int r_z; //现实世界z坐标
int r_y;
int r_x;
int rotated_X; //旋转后的坐标
int rotated_Y;
int is_marked; //是否已经标记
int PID; //父节点
int CID; //子节点,目前针对轴关节和膝盖有效
float start_arc_x,end_arc_x; //相对父节点的x 左右方向转动角度限制
float start_arc_y,end_arc_y; //相对父节点的y 上下方向转动角度限制
float start_arc_z,end_arc_z; //相对父节点的z 前后方向转动角度限制
double LengthRatio;
char name[80]; //名称
char file_name_3ds[180]; //3ds文件名称
int ID;
bone(int ID,char *name,int PID);
virtual ~bone();
float bone_init_x,bone_init_y,bone_init_z; //初始化骨骼的矢量方向,3d max 模型
};

第三步,初始化骨架结构

在定义了bone的结构以后,我们定义一个skeleton类来在第一次初始化时加载这些结构,

obone = bone (2,"head",1); //定义一个bone
strcpy(obone.file_name_3ds,"head.3DS"); //设置它的3ds文件名
obone.bone_init_x = 0; //初始化骨骼的矢量方向
obone.bone_init_y = 1;
obone.bone_init_z = 0;
bonevec.push_back (obone); //放入vector结构,这里用到了STL编程技术中的vector

以下是实现的部分代码:
skelecton::skelecton()
{
float fy = 0.56f ;
float ftx = 0.19f;
float ffx = 0.08f;
bone obone = bone (1,"neck",0);
bonevec.push_back (obone);

obone = bone (2,"head",1);
strcpy(obone.file_name_3ds,"head.3DS");
obone.bone_init_x = 0;
obone.bone_init_y = 1;
obone.bone_init_z = 0;
bonevec.push_back (obone);

obone = bone (3,"rShoulder",1);
bonevec.push_back (obone);

obone = bone (4,"lShoulder",1);
bonevec.push_back (obone);

obone = bone (5,"rElbow",3);
strcpy(obone.file_name_3ds,"rShoulder.3DS");
obone.bone_init_x = fy;
obone.bone_init_y = -1;
obone.bone_init_z = 0;
obone.CID = 7;
bonevec.push_back (obone);

obone = bone (6,"lElbow",4);
strcpy(obone.file_name_3ds,"lShoulder.3DS");
obone.bone_init_x = -fy;
obone.bone_init_y = -1;
obone.bone_init_z = 0;
obone.CID = 8;
bonevec.push_back (obone);

//.............太长只给出部分的代码..........................
}

第四步,学习3ds公共的类CLoad3DS,可以用来载入显示模型

这个类是公用一个类,详细的类CLoad3DS的接口信息可以到一个open source项目里参考。http://scourge.sourceforge.net
http://scourge.sourceforge.net/api/3ds_8h-source.html
实际上在使用这个类时候,我做了一些修改,加了得到最大顶点的方法。这个在第五步会说明。

我们定义一个OpenGL的类来做模型控制类,负责载入模型,

CLoad3DS* m_3ds;

int OpenGL::Load3DS(int ID, char *filename)
{
if(m_3ds!=NULL) m_3ds->Init(filename,ID);
return 0;
}

然后在显示时候调用

int OpenGL::show3ds(int ID)
{
m_3ds->show3ds(ID,0,0,0,2);
return 0;
}

第五步,使用递归方法分层次载入模型

这里是重点的内容了,让我们思考一些问题,实现骨骼会随着输入的方向而改变方向,需要做那些事情呢?

首先针对一块骨骼来考虑:

第一,我们需要让骨骼绕着它的节点旋转到输入的方向上

第二,我们需要知道骨骼目前节点的位置,才能旋转。可是我们知道骨骼会跟着它的父骨骼转动的,例如左小臂会跟着左臂转动,当身体转动时左臂也会跟着身体转动的,这里看起来像是有一个父子连动的关系,所以当前节点的位置会与它的父骨骼有关,父骨骼转动的角度,子骨骼也必须转动,所以这里自然想到了递归模型了,至于如何存储这些转动过程呢,还好openGL提供了glPushMatrix();glPopMatrix();那么所有的子骨骼必须包含在父骨骼的glPushMatrix();glPopMatrix();好了,这个变成

//递归实现3d现实
int skelecton::Render_skeleton_3D(int ID)
{

glPushMatrix(); //开始记录堆栈
joint_point = pgl->get_joint_point(ID); //找到节点位置
glTranslatef(joint_point.x,joint_point.y,joint_point.z); //坐标移到节点位置
pgl->rotate_bone (vt1,vt2,vto); //旋转骨骼到指定的方向
glTranslatef(-joint_point.x,-joint_point.y,-joint_point.z);//坐标移回来
pgl->show3ds(ID); //显示模型

//遍历子节点
for (theIterator = bonevec.begin(); theIterator != bonevec.end(); theIterator++)
{
pbone = theIterator;
if((pbone->PID == ID) )
{
Render_skeleton_3D(pbone->ID); //递归调用
}
}

glPopMatrix(); //退出记录堆栈
}

剩下需要解决的问题就是如何找到节点位置。
寻找节点位置,我们看到上面代码 get_joint_point(ID)就是找到节点了,其实如果不追求高的准确度,我们可以假设每个模型的最高的点即为骨骼的节点,当然这个假设前提是人体模型是正面站立的,手臂自然垂下,这样可以近似认为每个模型的最高的点即为骨骼的节点,这样函数就很简单了,这个方法是修改了Cload3ds类的方法,如下:

Vector3f CLoad3DS::get_joint_point(int j0)
{
CVector3 LastPoint;
Vector3f vect;
LastPoint.y = -1000 ;
if(j0==2) LastPoint.y = 1000 ;//头部节点朝下

// 遍历模型中所有的对象
for(int l = 0; l < g_3DModel[j0].numOfObjects; l++)
{
if(g_3DModel[j0].pObject.size() <= 0) break;// 如果对象的大小小于0,则退出
t3DObject *pObject = &g_3DModel[j0].pObject[l];// 获得当前显示的对象

for(int j = 0; j < pObject->numOfFaces; j++) // 遍历所有的面
{
for(int tex = 0; tex < 3; tex++) // 遍历三角形的所有点
{
int index = pObject->pFaces[j].vertIndex[tex]; // 获得面对每个点的索引

if(j0==2)
{
if(pObject->pVerts[index].y < LastPoint.y )
LastPoint = pObject->pVerts[index];
}
else
{
if(pObject->pVerts[index].y > LastPoint.y )
LastPoint = pObject->pVerts[index];
}
}
}
}
vect.x = LastPoint.x ;
vect.y = LastPoint.y ;
vect.z = LastPoint.z ;
return vect;
}

比较特殊的是头部节点是通过脖子连接的,所以它是取最低的点。

现在解决最后的问题了,如何旋转了,具体来讲就是骨骼从原来自然的状态旋转到目前的方向,例如手臂从自然垂下变成抬起,垂下和抬起两个状态的矢量是不同的方向的,如何旋转呢? 这里就要用到了空间几何里的点积和叉积的概念了,简单来讲就是利用点积来求矢量夹角余弦,利用叉积来求两个矢量的法向量,如果你忘记了这些概念,可以回去参考一下高等数学书,这个连接也提供了一些资料,可以帮助理解http://www.gameres.com/Articles/Program/Visual/Other/shiliang.htm
然后呢,我们知道了两个矢量的夹角与它们的法向量,下面的事情就变得简单了,我们让骨骼原来的矢量以法向量为旋转轴,旋转一定角度,这个角度就是两个矢量的夹角,这样问题就解决了,所以这里的代码如下:

int OpenGL::rotate_bone(Vector3f vVector1, Vector3f vVector2, Vector3f vVectorOrgin)
{
Vector3f vt1 = Vector3f(vVector1.x,vVector1.y,vVector1.z);
Vector3f vt2 = Vector3f(vVector2.x,vVector2.y,vVector2.z);
Vector3f vt4 = vt2-vt1;

double arc12 = AngleBetweenVectors(vVectorOrgin,vt4);
double rarc12 = 180*arc12/pi;
float len= Distance(vt1,vt2);
Vector3f vt3 = Cross(vVectorOrgin,vt4);
glRotatef ((float)rarc12,vt3.x,vt3.y,vt3.z);

return 0;
}

热点内容
怎么进网站服务器 发布:2025-09-17 09:18:15 浏览:460
小火箭服务器订阅是什么 发布:2025-09-17 09:01:40 浏览:735
c语言入门基础 发布:2025-09-17 08:54:30 浏览:667
副卡服务密码是多少位 发布:2025-09-17 08:45:44 浏览:438
白条密码是什么情况 发布:2025-09-17 08:43:01 浏览:319
高中信息算法与程序 发布:2025-09-17 08:41:34 浏览:26
服务器禁止设置几个ip 发布:2025-09-17 08:41:26 浏览:504
侧限压缩仪 发布:2025-09-17 08:41:24 浏览:174
php登陆系统 发布:2025-09-17 08:35:55 浏览:420
wincc全局脚本中加减运算 发布:2025-09-17 08:05:48 浏览:338