HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    全身人像模型制作过程

    发布时间:2023-04-28 20:22:23     稿源: 创意岭    阅读: 1043        

    大家好!今天让创意岭的小编来大家介绍下关于全身人像模型制作过程的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    创意岭作为行业内优秀企业,服务客户遍布全国,设计相关业务请拨打175-8598-2043,或微信:1454722008Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    本文目录:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    全身人像模型制作过程

    一、如何制作一个3D的人物模型Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    首先你要学会用3DMAX 根据个人机器的系统还要选择不同版本3DMAX08-3DMAX13 都有不同的功能和兼容性 你可以去模型云那里下载 里面除了这些版本软件 还有一些3DMAX的基础教程 希望可以帮到你 Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    二、怎样用3D max制作人物模型的方法,要详细。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    DOgame游戏兵工厂上边有具体的教程,非常详细,你去看下吧! Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    三、PS人像后期处理的大致流程是怎样的Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    使用PS进行人像后期处理步骤如下:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    1、先打开PS软件,插入要修图的人物照片并按快捷键Ctrl+J复制一层新的图层,防止破坏原来的照片;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    2、接下来,看ps上一排栏里,通过选择滤镜-杂色-减少杂色,然后跳出页面,点击高级与每通道,选择设置参数红、强度10、保留细节100%。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    3、上步骤结束以后,再次选择滤镜-锐化-USM锐化,在跳出的界面选填数据,命令参数设置数量为80,半径为1.5,阈值为4 ;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    4、接下来以后对照片进行变白处理,记住快捷键Ctrl+Shift+Alt+N,重新建立一个透明层;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    5、然后建完以后,在点击上排的通道,按住快捷键Ctrl键点击RGB通道一直不放手,出现选区;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    6、再次回到刚才的透明层,在选区里将它填充为白色;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    7、结束以后,在这个图层点击左键填加蒙版,再用黑画笔涂掉不需变白的部分;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    8、如果还没有达到效果的话,可适当降低亮度,根据自己的需求进行调整,这样就可以了。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    9、最后是不是人物看起来好很多呢?Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    四、如何做人体骨架模型?Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    本文提供一种将骨架动作矢量映射到人体骨架模型的一种方法,通过输入各个骨骼的当前方向,反馈给骨架模型,这样就实现了动画的效果。实验开发工具是VC6.0在OpenGL平台上开发完成。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    阅读对象:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    假定读者已经熟悉OpenGL编程,就算不熟悉,只要了解基本的旋转,平移,堆栈操作就好。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    假定读者已经了解基本的c++编程,其中需要了解递归的算法,递归的方法请参考一下数据结构吧。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    制作过程:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    第一步,3D模型准备Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

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

    身体躯干 BODY.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    头部 HEAD.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    左臂 LSHOULDER.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    右臂 RSHOULDER.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    左小臂 LELBOW.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    右小臂 RELBOW.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    左大腿 LTHIGH.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    右大腿 RTHIGH.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    左小腿 LFEET.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    右小腿 RFEET.3DSUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    这样这些组成部分就可以灵活的拼接出一个人体来了。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    第二步,定义相关的核心数据结构Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    为了得到运动的各个身体部分数据信息,我们需要存储一些运动信息,主要有:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    骨骼IDUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    骨骼关节的当前位置;r_x,r_y,r_zUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    骨骼之间的关系,例如手臂是躯干的延伸,而左小臂是左臂的延伸;PID,CIDUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    我们可以通过下图来了解骨骼之间的结构关系Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    存放3ds文件位置;file_name_3dsUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    3ds模型的初始化方向;这个是比较抽象一点的概念,它是指从父节点指向子节点的方向,例如左小臂的初始位置是平放向下,那么对应的矢量就是 (-0.2,-1,0)Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    以下是数据结构部分:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    class boneUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    public:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int y;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int x;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int r_z; //现实世界z坐标Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int r_y;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int r_x;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int rotated_X; //旋转后的坐标Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int rotated_Y;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int is_marked; //是否已经标记Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int PID; //父节点Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int CID; //子节点,目前针对轴关节和膝盖有效Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    float start_arc_x,end_arc_x; //相对父节点的x 左右方向转动角度限制Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    float start_arc_y,end_arc_y; //相对父节点的y 上下方向转动角度限制Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    float start_arc_z,end_arc_z; //相对父节点的z 前后方向转动角度限制Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    double LengthRatio;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    char name[80]; //名称Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    char file_name_3ds[180]; //3ds文件名称Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int ID;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    bone(int ID,char *name,int PID);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    virtual ~bone();Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    float bone_init_x,bone_init_y,bone_init_z; //初始化骨骼的矢量方向,3d max 模型Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    };Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    第三步,初始化骨架结构Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    在定义了bone的结构以后,我们定义一个skeleton类来在第一次初始化时加载这些结构,Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone = bone (2,"head",1); //定义一个boneUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    strcpy(obone.file_name_3ds,"head.3DS"); //设置它的3ds文件名Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_x = 0; //初始化骨骼的矢量方向Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_y = 1;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_z = 0;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    bonevec.push_back (obone); //放入vector结构,这里用到了STL编程技术中的vectorUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    以下是实现的部分代码:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    skelecton::skelecton()Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    float fy = 0.56f ;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    float ftx = 0.19f;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    float ffx = 0.08f;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    bone obone = bone (1,"neck",0);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    bonevec.push_back (obone);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone = bone (2,"head",1);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    strcpy(obone.file_name_3ds,"head.3DS");Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_x = 0;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_y = 1;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_z = 0;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    bonevec.push_back (obone);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone = bone (3,"rShoulder",1);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    bonevec.push_back (obone);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone = bone (4,"lShoulder",1);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    bonevec.push_back (obone);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone = bone (5,"rElbow",3);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    strcpy(obone.file_name_3ds,"rShoulder.3DS");Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_x = fy;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_y = -1;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_z = 0;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.CID = 7;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    bonevec.push_back (obone);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone = bone (6,"lElbow",4);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    strcpy(obone.file_name_3ds,"lShoulder.3DS");Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_x = -fy;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_y = -1;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.bone_init_z = 0;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    obone.CID = 8;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    bonevec.push_back (obone);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    //.............太长只给出部分的代码..........................Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    第四步,学习3ds公共的类CLoad3DS,可以用来载入显示模型Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    这个类是公用一个类,详细的类CLoad3DS的接口信息可以到一个open source项目里参考。http://scourge.sourceforge.netUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    http://scourge.sourceforge.net/api/3ds_8h-source.htmlUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    实际上在使用这个类时候,我做了一些修改,加了得到最大顶点的方法。这个在第五步会说明。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    我们定义一个OpenGL的类来做模型控制类,负责载入模型,Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    CLoad3DS* m_3ds;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int OpenGL::Load3DS(int ID, char *filename)Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    if(m_3ds!=NULL) m_3ds->Init(filename,ID);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    return 0;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    然后在显示时候调用Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int OpenGL::show3ds(int ID)Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    m_3ds->show3ds(ID,0,0,0,2);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    return 0;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    第五步,使用递归方法分层次载入模型Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    这里是重点的内容了,让我们思考一些问题,实现骨骼会随着输入的方向而改变方向,需要做那些事情呢?Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    首先针对一块骨骼来考虑:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    第一,我们需要让骨骼绕着它的节点旋转到输入的方向上Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

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

    //递归实现3d现实Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int skelecton::Render_skeleton_3D(int ID)Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    glPushMatrix(); //开始记录堆栈Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    joint_point = pgl->get_joint_point(ID); //找到节点位置Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    glTranslatef(joint_point.x,joint_point.y,joint_point.z); //坐标移到节点位置Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    pgl->rotate_bone (vt1,vt2,vto); //旋转骨骼到指定的方向Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    glTranslatef(-joint_point.x,-joint_point.y,-joint_point.z);//坐标移回来Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    pgl->show3ds(ID); //显示模型Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    //遍历子节点Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    for (theIterator = bonevec.begin(); theIterator != bonevec.end(); theIterator++)Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    pbone = theIterator;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    if((pbone->PID == ID) )Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Render_skeleton_3D(pbone->ID); //递归调用Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    glPopMatrix(); //退出记录堆栈Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    剩下需要解决的问题就是如何找到节点位置。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    寻找节点位置,我们看到上面代码 get_joint_point(ID)就是找到节点了,其实如果不追求高的准确度,我们可以假设每个模型的最高的点即为骨骼的节点,当然这个假设前提是人体模型是正面站立的,手臂自然垂下,这样可以近似认为每个模型的最高的点即为骨骼的节点,这样函数就很简单了,这个方法是修改了Cload3ds类的方法,如下:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Vector3f CLoad3DS::get_joint_point(int j0)Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    CVector3 LastPoint;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Vector3f vect;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    LastPoint.y = -1000 ;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    if(j0==2) LastPoint.y = 1000 ;//头部节点朝下Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    // 遍历模型中所有的对象Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    for(int l = 0; l < g_3DModel[j0].numOfObjects; l++)Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    if(g_3DModel[j0].pObject.size() <= 0) break;// 如果对象的大小小于0,则退出Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    t3DObject *pObject = &g_3DModel[j0].pObject[l];// 获得当前显示的对象Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    for(int j = 0; j < pObject->numOfFaces; j++) // 遍历所有的面Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    for(int tex = 0; tex < 3; tex++) // 遍历三角形的所有点Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int index = pObject->pFaces[j].vertIndex[tex]; // 获得面对每个点的索引Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    if(j0==2)Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    if(pObject->pVerts[index].y < LastPoint.y )Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    LastPoint = pObject->pVerts[index];Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    elseUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    if(pObject->pVerts[index].y > LastPoint.y )Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    LastPoint = pObject->pVerts[index];Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    vect.x = LastPoint.x ;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    vect.y = LastPoint.y ;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    vect.z = LastPoint.z ;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    return vect;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    }Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    比较特殊的是头部节点是通过脖子连接的,所以它是取最低的点。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    现在解决最后的问题了,如何旋转了,具体来讲就是骨骼从原来自然的状态旋转到目前的方向,例如手臂从自然垂下变成抬起,垂下和抬起两个状态的矢量是不同的方向的,如何旋转呢? 这里就要用到了空间几何里的点积和叉积的概念了,简单来讲就是利用点积来求矢量夹角余弦,利用叉积来求两个矢量的法向量,如果你忘记了这些概念,可以回去参考一下高等数学书,这个连接也提供了一些资料,可以帮助理解http://www.gameres.com/Articles/Program/Visual/Other/shiliang.htmUve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    然后呢,我们知道了两个矢量的夹角与它们的法向量,下面的事情就变得简单了,我们让骨骼原来的矢量以法向量为旋转轴,旋转一定角度,这个角度就是两个矢量的夹角,这样问题就解决了,所以这里的代码如下:Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    int OpenGL::rotate_bone(Vector3f vVector1, Vector3f vVector2, Vector3f vVectorOrgin)Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    {Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Vector3f vt1 = Vector3f(vVector1.x,vVector1.y,vVector1.z);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Vector3f vt2 = Vector3f(vVector2.x,vVector2.y,vVector2.z);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Vector3f vt4 = vt2-vt1;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    double arc12 = AngleBetweenVectors(vVectorOrgin,vt4);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    double rarc12 = 180*arc12/pi;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    float len= Distance(vt1,vt2);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    Vector3f vt3 = Cross(vVectorOrgin,vt4);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    glRotatef ((float)rarc12,vt3.x,vt3.y,vt3.z);Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    return 0;Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    } Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    以上就是关于全身人像模型制作过程相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。Uve创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司


    推荐阅读:

    抖音瘦全身怎么设置(抖音怎么设置全身都瘦尼)

    只换脸的正装照app(全身正装照片p图软件)

    单人全身模板(单人全身模板女)

    名表排行榜(名表排行榜前十名)

    ps中腿太长了怎么办(ps腿变长)