游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4596|回复: 11

inst名称空间(我的)源代码下载(.H)

[复制链接]

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-6-26 17:05:00 | 显示全部楼层 |阅读模式
不断更新中...

http://cpp.instemast.com/

具体可以直接到我站的这个页面下载:
http://high2008.gicp.net:88/disp ... ar=1&page=1

最近大调整中...

9

主题

102

帖子

343

积分

中级会员

Rank: 3Rank: 3

积分
343
发表于 2008-7-20 18:02:00 | 显示全部楼层

Re:inst名称空间(我的)源代码下载(.H)

这次在名称空间上有较大的调整(增加了几个)

一个重要的决定是,去掉了原来的 ISurf, IFont 这种“2D通用”“字体通用”的跨平台接口。

但 UI 等系统仍然是跨平台的!只是我加大了接口的  粒度  ,制定出 UI 专用的跨平台接口
呵呵,这回的 UI 系统上完全支持任何东西的渲染,包括 3D 模型,各种动画等。

而且还增加了一个 inst::spr 名称空间,处理2D精灵和地图。和UI类似的原理,可跨平台。

此外增强了ddraw的封装,可以用1,2行语句创建设备及前后台缓冲区.
而且将其移到了inst::i2d 名称空间中,和inst::i3d 统一.(还把以前的4d移到了inst::i4d中)

名称空间比较多了,但目的很明确了,也很整齐,比如:
inst::ui2d -- 使用 inst::i2d (ddraw)实现的 ui 渲染器
inst::ui3d -- 使用 inst::i3d (d3d9)实现的 ui 渲染器

太忙了,我会不断完善的。
PS.重新整改的UI基本完成了,这几天正在努力,还有2D游戏引擎,游戏逻辑等,太忙太忙.

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-8-27 18:30:00 | 显示全部楼层

Re:inst名称空间(我的)源代码下载(.H)

现在,也可以使用这个URL访问:
http://cpp.instemast.com/

新加了一个 instMatrix.h 头文件(需要VC++2005以上),
可满足任何matrix,向量运算的需求,且内存结构和d3d9一致。

例:

Float4 vec = { 1, 2, 3 };
Float4x4 mat = { <略> };
Float4 result = mat * vec;

其中, Float4 是 MATRIX<Float,4,1> 的 typedef

也支持不确定大小的矩阵

使用这个 instMatrix.h 编写3D专用的数学函数也很简单:

// inst3DXMath.h 的主要部分

__forceinline Float4 ToHomo(const Float3 &vec)
{
        Float4 ret = { vec.x, vec.y, vec.z, 1 };
        return ret;
}
__forceinline Float3 FromHomo(const Float4 vec)
{
        Float3 ret = { vec.x/vec.w, vec.y/vec.w, vec.z/vec.w };
        return ret;
}

// 没有 Normallize, 应当用 vec /= Norm(vec) 或 ret = vec / Norm(vec).

__forceinline Float3 Cross(const Float3 &vec1,const Float3 &vec2)
{
        Float3 ret = { vec1.y * vec2.z - vec1.z * vec2.y,
                                   vec1.z * vec2.x - vec1.x * vec2.z,
                                   vec1.x * vec2.y - vec1.y * vec2.x, };
        return ret;
}

__forceinline Float3 Transform(const Float4x4 &mat,const Float3 &vec)
{
        return FromHomo( mat * ToHomo(vec) );
}

__forceinline Float4x4 Translation(Float x,Float y,Float z)
{
        Float4x4 ret = { 1, 0, 0, x,
                                         0, 1, 0, y,
                                         0, 0, 1, z,
                                         0, 0, 0, 1, };
        return ret;
}

__forceinline Float4x4 Scaling(Float sx,Float sy,Float sz)
{
        Float4x4 ret = { sx, 0,  0,  0,
                                         0, sy,  0,  0,
                                         0,  0,  sz, 0,
                                         0,  0,  0,  1, };
        return ret;
}

__forceinline Float4x4 RotationX(Float angle)
{
        Float4x4 ret = {0}; // fill all with 0
        ret(1,1) = ret(4,4) = 1;
        ret(2,2) = ret(3,3) = cos(angle);
        ret(2,3) = -sin(angle);
        ret(3,2) = sin(angle);
        return ret;
}

__forceinline Float4x4 RotationY(Float angle)
{
        Float4x4 ret = {0}; // fill all with 0
        ret(1,1) = ret(3,3) = cos(angle);
        ret(2,2) = ret(4,4) = 1;
        ret(1,3) = sin(angle);
        ret(3,1) = -sin(angle);
        return ret;
}

__forceinline Float4x4 RotationZ(Float angle)
{
        Float4x4 ret = {0}; // fill all with 0
        ret(1,1) = ret(2,2) = cos(angle);
        ret(1,2) = -sin(angle);
        ret(2,1) = sin(angle);
        ret(3,3) = ret(4,4) = 1;
        return ret;
}

__forceinline Float4x4 RotationAxis(const Float3 &axis,Float angle)
{
        Float4x4 tmp; // NO init
        D3DXMatrixRotationAxis((D3DXMATRIX *)&tmp,(D3DXVECTOR3 *)&axis,angle);
        return Transpose(tmp);
}

__forceinline Float4x4 ToParent(const Float3 &pos,const Float3 &look,const Float3 &up)
{
        Float3 Zaxis = look / Norm(look);
        Float3 Xaxis = Cross(up,Zaxis);
        Xaxis /= Norm(Xaxis);
        Float3 Yaxis = Cross(Zaxis,Xaxis);

        Float4x4 ret =
        {
                Xaxis.x,        Yaxis.x,        Zaxis.x,        pos.x,
                Xaxis.y,        Yaxis.y,        Zaxis.y,        pos.y,
                Xaxis.z,        Yaxis.z,        Zaxis.z,        pos.z,
                0,                        0,                        0,                        1,                               
        };
        return ret;
}

__forceinline Float4x4 FromParent(const Float3 &pos,const Float3 &look,const Float3 &up)
{
        Float3 Zaxis = look / Norm(look);
        Float3 Xaxis = Cross(up,Zaxis);
        Xaxis /= Norm(Xaxis);
        Float3 Yaxis = Cross(Zaxis,Xaxis);

        Float4x4 ret =
        {
                Xaxis.x,        Xaxis.y,        Xaxis.z,        -Dot(pos,Xaxis),
                Yaxis.x,        Yaxis.y,        Yaxis.z,        -Dot(pos,Yaxis),
                Zaxis.x,        Zaxis.y,        Zaxis.z,        -Dot(pos,Zaxis),
                0,                        0,                        0,                        1,                               
        };
        return ret;
}

__forceinline Float4x4 Look(const Float3 &eye,const Float3 &look,const Float3 &up)
{
        return FromParent(eye,look,up);
}

__forceinline Float4x4 LookAt(const Float3 &eye,const Float3 &look_at,const Float3 &up)
{
        return Look(eye, look_at - eye, up);
}

__forceinline Float4x4 PerspectiveFov(Float fovY,Float aspect,Float zn,Float zf)
{
        Float4x4 ret = {0}; // fill all with 0
        ret(2,2) = Ctg(fovY/2);
        ret(1,1) = ret(2,2)/aspect;
        ret(3,3) = zf/(zf-zn);
        ret(3,4) = -(zn*zf)/(zf-zn);
        ret(4,3) = 1;
        return ret;
}

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-8-27 22:32:00 | 显示全部楼层

Re:inst名称空间(我的)源代码下载(.H)

你这也inline得太多了

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-8-29 00:04:00 | 显示全部楼层

Re:inst名称空间(我的)源代码下载(.H)

inst::logic中的一部分(初步的对象模型就是这样子)

class CObjMgr:virtual public IDynamic
{
};

////

struct __obj_class_root;

struct __obj_table
{
        // static
        sttPlayer * __obj_class_root:: * p_p_sttPlayer;
        sttMonster * __obj_class_root:: * p_p_sttMonster;
        // const
        // dynamic
        Dual<Int> __obj_class_root:: * p_HP;
        const Dual<Int> __obj_class_root:: * p_rHP; // エイリアスは、?涫?韧??摔筏皮悉胜椁胜
        Dual<Int> __obj_class_root:: * p_MP;
        // will
        // mind
        mndPlayer * __obj_class_root:: * p_p_mndPlayer;
        mndMonster * __obj_class_root:: * p_p_mndMonster;
};

struct __obj_class_root
{
        __obj_table *__ptbl;
        virtual ~__obj_class_root(){}
};

struct __obj_handle
{
        __obj_class_root * *__pobj; // can be null!
        __forceinline Bool is_valid()const
        {
                return __pobj && *__pobj;
        }
        __forceinline sttPlayer * cast_sttPlayer()const
        {
                INST_ASSERT(is_valid());
                if( null == (*__pobj)->__ptbl->p_p_sttPlayer ) return null; // 0xFFFFFFFF
                return (*__pobj) ->* (*__pobj)->__ptbl->p_p_sttPlayer;
        }
        __forceinline Bool has_HP()const
        {
                INST_ASSERT(is_valid());
                return (*__pobj)->__ptbl->p_HP != null; // 0xFFFFFFFF
        }
        __forceinline Dual<Int> & HP()
        {
                INST_ASSERT(has_HP());
                return (*__pobj) ->* (*__pobj)->__ptbl->p_HP;
        }
        __forceinline Bool has_rHP()const
        {
                INST_ASSERT(is_valid());
                return (*__pobj)->__ptbl->p_rHP != null; // 0xFFFFFFFF
        }
        __forceinline const Dual<Int> & rHP()
        {
                INST_ASSERT(has_rHP());
                return (*__pobj) ->* (*__pobj)->__ptbl->p_rHP;
        }
        __forceinline mndPlayer * cast_mndPlayer()const
        {
                INST_ASSERT(is_valid());
                if( null == (*__pobj)->__ptbl->p_p_mndPlayer ) return null; // 0xFFFFFFFF
                return (*__pobj) ->* (*__pobj)->__ptbl->p_p_mndPlayer;
        }
};

typedef struct __obj_handle        OID;

typedef UInt32 OBJ_CLASS_ID;

struct __obj_class__Player : public __obj_class_root
{
        static __obj_table * __s_ptbl_impl;

        sttPlayer * v_p_sttPlayer;
        Dual<Int> v_HP;
        mndPlayer * v_p_mndPlayer;

        __obj_class__Player()
        {
                if(!__ptbl_impl)
                {
                        __s_ptbl_impl = new __obj_table;
                        __s_ptbl_impl->p_p_sttPlayer = static_cast<sttPlayer * __obj_class_root:: *>( & __obj_class__Player::v_p_mndPlayer );
                        __s_ptbl_impl->p_HP        = static_cast<Int __obj_class_root:: *>( & __obj_class__Player::v_HP );
                        __s_ptbl_impl->p_rHP = static_cast<const Int __obj_class_root:: *>( & __obj_class__Player::v_HP );
                        __s_ptbl_impl->p_MP        = null; // 0xFFFFFFFF
                        __s_ptbl_impl->p_p_mndPlayer = static_cast<mndPlayer * __obj_class_root:: *>( & __obj_class__Player::v_p_mndPlayer );
                }
                __ptbl = __s_ptbl_impl;
                // create v_p_sttPlayer
                // create v_p_mndPlayer
        }

        virtual ~__obj_class__Player()
        {
                // delete v_p_mndPlayer
                // delete v_p_sttPlayer
        }
};

const OBJ_CLASS_ID Player = 1;

OID CreateObj(OBJ_CLASS_ID cls);
void DestroyObj(OID oid);

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-13 10:46:00 | 显示全部楼层

Re:inst名称空间(我的)源代码下载(.H)

nnd,才发现...新更新上来的文件不存在来着...俺会修正的!实在对不起大家!

All Files Folders Images Videos Audio & Music For Sale   
inst.all.rar
No file(s) found for inst.all.rar on eSnips

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-16 14:51:00 | 显示全部楼层

Re:inst名称空间(我的)源代码下载(.H)

已更新,欢迎下载!

最新的 inst::CGameWnd 和 inst::i2d::* 类可以帮助程序员一分钟之内创建自己的directdraw窗口/全屏程序,以及包括对剪裁,恢复设备...的支持
还有新增的 inst::MATRIX<T,m,n> 结构体,虽然比不上matlab,但是大大减轻了c++,d3d中的数学代码工作量

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2009-2-4 23:40:00 | 显示全部楼层

Re:inst名称空间(我的)源代码下载(.H)

主名称空间为 inst ,包含了一些基本库

下设以下namespaces:

i2d - 对directdraw绘图的傻瓜型封装
i3d - D3D渲染API的封装
i3dx - 3D扩展库
i4d - 4D类库
logic - 游戏逻辑工具
spr2d - 2D场景精灵类库的ddraw插件
sprd3d - 2D场景精灵类库的d3d插件
sprite - 跨平台跨引擎的2D场景精灵类库
ui - 跨平台跨引擎的UI类库
ui2d - UI类库的ddraw插件
uid3d - UI类库的d3d插件
uix - UI的扩展控件

14

主题

77

帖子

83

积分

注册会员

Rank: 2

积分
83
发表于 2009-2-5 06:19:00 | 显示全部楼层

Re:inst名称空间(我的)源代码下载(.H)

多谢LZ,先顶再看

3

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2009-2-6 21:43:00 | 显示全部楼层

Re:inst名称空间(我的)源代码下载(.H)

我靠,好强,收藏了!
写了多久啊?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 08:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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