游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2189|回复: 4

仍然是关于3d模型换武器,做过的来说下哈,谢了~~

[复制链接]

8

主题

70

帖子

79

积分

注册会员

Rank: 2

积分
79
发表于 2008-4-10 21:29:00 | 显示全部楼层 |阅读模式
熬了几天,终于知道了给3d人物模型装上一个武器有两种方法
一是将武器模型mesh挂在人物模型手上对应的骨头上
二是在3dmax里给模型预先装上很多个“虚拟”的武器,但是不显示,用哪个武器就让它显示哪个武器

请问,是这样吗?
如果是的话,第一种如何得知人物模型手上对应的骨头是哪块骨头呢?
第二种方法如果存在的话,大概是怎么实现的呢?

有明白的高手麻烦来指点指点,先谢过了哈!~~

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-4-10 22:03:00 | 显示全部楼层

Re:仍然是关于3d模型换武器,做过的来说下哈,谢了~~

采用第一种方式,而且要提醒你,同一种武器道具只load一次(大家使用的都是副本,共用mesh和贴图)不用每人都创建一次,连骨骼的MESH都只有一个,场景里面跑来跑去的只是副本而已,这是我过去写的,给你看个头文件,应该有你要的思路

// ***************************************************************
//  Equip_Proxy   version:  1.0   ·  date: 07/30/2007
//  -------------------------------------------------------------
//  控制人物和装备之间的关系的代理类
//  -------------------------------------------------------------
//  Copyright (C) 2007 - All Rights Reserved
// ***************************************************************
// 作者:tonykee  Email:tony_kee@126.com
// ***************************************************************
#pragma once
#ifndef EQUIP_H
#define EQUIP_H

#include "Common/D3D/Xmodel/Xmodel.h"

#include <vector>
using namespace std;


namespace LK3D
{

        //人物的骨骼和道具之间的映射,道具是跟随骨骼运动的
        typedef struct FollowRoleModel
        {
                //骨骼的名称
                char bone_name[200];
               
                //给该骨骼所安排的道具副本
                Xmodel * model;

                //该道具原本的所有者
                Xmodel *owner;
               
                //构造
        FollowRoleModel(const char *_bone_name, const LK3D::Xmodel * pmodel);

                //析构
                ~FollowRoleModel();

        }  *LPFollowRoleModel;



        //一个人物可以对应多个装备道具,是单个人物和道具之间的映射
        typedef struct RoleEquipMent
        {
           //原始人物动画模型
       Xmodel *mpRole;

           //构造
       RoleEquipMent();
          
           //一个人物可以配置多个道具
           vector<LPFollowRoleModel> mEquipments;
          
           //添加一个装备
           void AddEquipment(const char *_bone_name, const LK3D::Xmodel * pmodel);

           //移除一个装备
           void RemoveEquipment(char *pEquipName);

           //更新
           void Update();

           //丢失设备
           void OnLostDevice();

           //更新设备
           void OnResetDevice();

           //绘制装备
           void Draw();
          
           //析构
           ~RoleEquipMent();

        }  *LPRoleEquipMent;






}

#endif

8

主题

70

帖子

79

积分

注册会员

Rank: 2

积分
79
 楼主| 发表于 2008-4-11 21:29:00 | 显示全部楼层

Re:仍然是关于3d模型换武器,做过的来说下哈,谢了~~

非常感谢,学习中^

2

主题

141

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2008-4-11 22:09:00 | 显示全部楼层

Re:仍然是关于3d模型换武器,做过的来说下哈,谢了~~

你的第二种方法也是能用的 但要改进为
带骨头的虚拟武器一般只要三个三角面,
一个在手握的地方, 一个在武器末端, 一在武器当中
这三个面不是用来渲染的只是用来传出空间位置的
在真实渲染时候用你控制模型的世界matrix*(递归到手的骨头matrix )来传输你的三个三角面的重心
now, U got it, 随便你去换什么模型到那里去渲染吧

8

主题

70

帖子

79

积分

注册会员

Rank: 2

积分
79
 楼主| 发表于 2008-4-12 19:39:00 | 显示全部楼层

Re:仍然是关于3d模型换武器,做过的来说下哈,谢了~~

哦,明白了,谢谢楼上的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 21:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表