我要发帖 回复

论坛元老

51

主题

1万

积分

23

专家分

开拓者

:

私信
发表时间 : 2010-4-26 15:46:20 | 浏览 : 3847    评论 : 10

userDefineIsector

userDefineIsector
可以依据物体表面的点,形成自己的碰撞检测体。

#pragma once
#include "vpIsector.h"

#define  PointMaxCount   8192
class vpIsectorUserDefine:public vpIsector
{
public:  
//公共成员函数
*/
    int   VerticeCount;
    vuVec3<float> * VerticesAll;
        vpIsectorUserDefine(void);       
        void SetPoint(int PointCount);        

    // implementation of vpIsector
    virtual vpIsector *makeCopy(const vsgu::Options &options) const;

protected:
    /**
     * Methods inherited from vpIsector
     */
    virtual void updateSegments();
private:   
    VUBASE_HEADER_INCLUDES_COMPOSITE(vpIsectorUserDefine)
};

namespace vsgu {
template<>
inline int copy<vpIsectorUserDefine>(vpIsectorUserDefine* dst,
    const vpIsectorUserDefine* src, const vsgu::Options& options)
{
    int ret = vsgu::SUCCESS;        
    if (dst == src) return vsgu::SUCCESS;
    if (dst == NULL || src == NULL) return vsgu::FAILURE;        
    if (!(options[vuBase::getOptionIndex()] &
        vuBase::OPTION_IGNORE_BASE_CLASS)) {
        ret = vsgu::copy<vpIsectorUserDefine>(dst,src, options);
        if (ret != vsgu::SUCCESS) return ret;
    }
    return vsgu::SUCCESS;
}
   
template<>
inline bool compare<vpIsectorUserDefine>(const vpIsectorUserDefine* s1,
    const vpIsectorUserDefine* s2, const vsgu::Options& options)
{
    if (s1 == s2) return true;
    if (s1 == NULL || s2 == NULL) return false;
    bool bRes = true;
    if (!(options[vuBase::getOptionIndex()] &
        vuBase::OPTION_IGNORE_BASE_CLASS)) {
        bRes = vsgu::compare<vpIsector>(s1,s2, options);
        if (!bRes) return bRes;
    }  

    return true;
}

}


#include "StdAfx.h"
#include ".\vpisectoruserdefine.h"
#include "vuAllocArray.h"
#include "vuVec3.h"
#include "vuVec4.h"

VUBASE_SOURCE_INCLUDES_COMPOSITE(vpIsectorUserDefine, vpIsector,
    new vpIsectorUserDefine, true, true)

vpIsectorUserDefine::vpIsectorUserDefine(void)
{       
    //  registerInstance(s_classType);
}

vpIsectorUserDefine::~vpIsectorUserDefine(void)
{
// remove the instance from the list
   unregisterInstance(s_classType);
}
///////////////////////////////////////////////////////////////////////////
//
//  makeCopy / public
//

vpIsector * vpIsectorUserDefine::makeCopy(const vsgu::Options &options) const
{
    return vsgu::makeCopy(this, options);
}
void vpIsectorUserDefine::SetPoint(int PointCount)
        {
                if(PointCount>PointMaxCount)
                {
                        AfxMessageBox("定点个数多于8192,请减少该物体的几何体!");
                        return ;
                }
                VerticeCount=PointCount;
                VerticesAll= vuAllocArray<vuVec3<float> >::malloc(PointCount);  
                vuSegment<double> segment;
                for (int i=0;i<PointCount;i++)
                        m_vsIsector->push_back_segment(segment);

                // clip end point
                m_vsIsector->setClip(vsIsector::CLIP_END);       
        }

///////////////////////////////////////////////////////////////////////////
//
//  updateSegments / protected
//
void vpIsectorUserDefine::updateSegments()
{

    float x,y,z;
        int i=0;
        VerticesAll[0].get(&x,&y,&z);
    vuVec3<double> lfb(x,y,z);
    m_matrix.transformPoint(&lfb);        
        for(i=1;i<VerticeCount;i++)
        {
                                  VerticesAll.get(&x,&y,&z);
                                  vuVec3<double> lfb2(x,y,z);
                                  m_matrix.transformPoint(&lfb2);
                      m_vsIsector->setSegment(lfb, lfb2, i);
                            lfb=lfb2;
        }   
}

最近VR访客查看更多↓

努力挣钱,快乐生活!
briboy 评论于2010-5-9 14:16:04
请问这程序里面的namespace vsgu的作用是什么
sichuanwww 评论于2010-5-9 17:12:23
自定义碰撞检测类的拷贝和比较函数。
努力挣钱,快乐生活!
briboy 评论于2010-5-9 17:33:43
我觉得它应该不起作用的,因为它没被调用过,而且我删除了这段程序,程序依然正常运行
sichuanwww 评论于2010-5-9 20:26:27
不需要做碰撞后继处理就可以不要哈。
努力挣钱,快乐生活!
sichuanwww 评论于2010-7-22 07:08:50
顶起。
努力挣钱,快乐生活!
lumengmeng 评论于2012-4-11 21:03:01
太谢谢了
开始吧,贾石头 评论于2012-9-8 19:25:35
谢谢王老师的东西···
LittleGbc 评论于2012-10-4 15:29:47
自定义碰撞检测类的拷贝和比较函数即使没有用,去掉时编译会有错误,不知为何?
chinawalltin 评论于2014-2-16 09:57:03
支持楼主 08年以后只有楼主提供例子
lithum 评论于2019-8-31 10:49:03
chinawalltin 发表于 2014-2-16 09:57 AM
支持楼主 08年以后只有楼主提供例子

VUBASE_SOURCE_INCLUDES_COMPOSITE(vpIsectorUserDefine, vpIsector,
    new vpIsectorUserDefine, true, true)

我在这一行报错,怎么解决呀,谢谢

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-10-2 02:15 AM

返回顶部