火炬之光是用Ogre开发的一款单机游戏,所以他的资源是可以再度利用的.但是在加载模型时他的动画信息没有导入进来,所以要将他的Skeleton文件动下手脚,以火炬之光中 Model/Goust为例,先将Goust.Skeleton文件拖放到OgreXmlConverter.exe工具图标上,然后就会在Goust.Skeleton目录上生成一个Goust.Skeleton.XML文件,该在中间插入<animationlinks>标记,然后将所有的动画Skeleton文件Link进来.然后将xml文件拖到OgreXmlConverter.exe工具图标上,便自动又生成一个oust.Skeleton,该文件内就会link动画文件了
<skeleton>
<bones>
</bones>
<bonehierarchy>
</bonehierarchy>
<animations>
</animations>
<animationlinks>
</animationlinks>
</skeleton
<animationlinks>
<animationlink skeletonName="Attack1.SKELETON" scale="1" />
<animationlink skeletonName="Attack2.SKELETON" scale="1" />
<animationlink skeletonName="Die.SKELETON" scale="1" />
<animationlink skeletonName="Idle.SKELETON" scale="1" />
<animationlink skeletonName="Run.SKELETON" scale="1" />
<animationlink skeletonName="spawn.SKELETON" scale="1" />
<animationlink skeletonName="special_teleport.SKELETON" scale="1" />
<animationlink skeletonName="Special_Gen_AOE.SKELETON" scale="1" />
<animationlink skeletonName="Walk.SKELETON" scale="1" />
<animationlink skeletonName="Special_summon.SKELETON" scale="1" />
</animationlinks>
|
posted @
2010-04-11 22:41 AstaTus 阅读(1768) |
评论 (0) |
编辑 收藏
一个声源与多个缓冲绑定时,这几个缓冲中的声音Format需要一致,否则
alSourceQueueBuffers函数会得到 0xA004的错误,然后在Sourceplay时声源状
态不会改变为AL_PLAYING而一直都会在AL_INITAL的状态
posted @
2009-09-20 11:17 AstaTus 阅读(296) |
评论 (0) |
编辑 收藏
问题背景:
很早就觉得数学很重要,但斌没有静下心来好好看~ 最近重写都D3D框架的结构,打算从基础类一个个写起。。
今天写到射线的相交,在射线与平面相交的判断上,由于射线的的单方向性,所以可能存在射线的反向延长线和平
面相交,但是正真的射线没 有 和平面相交,所以设:
平面的单位法向量:N,;
射线的起始点:Origin
射线的方向:Dir
如果Dir,N的点积为正 且Origin在平面的背面,或Origin在平面的正面,且Dir,N的点积为负,则他们相交
其他情况则不想交
但关键是Origin在平面的哪一面该怎么算呢?下面来小证一下
证明:
N,Origin,Dir均为矢量,其他为标量
平面方程为 N(x, y, z) = D;
射线方程为 P(t) = Origin + Dir*t;
N为平面的单位法向量,
求N与Origin的点积
N•Origin = |N| * |Origin|cos
F 因为N为单位向量 则求出来的值为Origin向量在N上的投影且有方向
(这个有向长度相于当该平面经过原点时的有向长度,既D为0时),(D的几何意义是平面到原点的有向距离,
既D为负则 原点在平面背面,反之在反面)
所以N•Origin + D为最后Origin在正真的有偏移的N上的投影的有向长度,为负则在背
面,为正则在正面
貌似讲的不怎么清楚 -_- ~~~
posted @
2009-02-25 21:01 AstaTus 阅读(531) |
评论 (0) |
编辑 收藏
前些日子 乘着有闲功夫,慢慢的hlsl看了起来,发现以前学的数学知识全用上了,只可惜忘得都差不多了,又要恶补数学了。
做了个比较简单的 phong 光照模型。
float4x4 Scal;
float4x4 World;
float4x4 View;
float4x4 projection;
float4x4 WorldViewProjection;
float3 EyePosition;
float3 LightDir;
float4 LightColor;
struct VertexInput
{
float4 Position : POSITION;
float2 Tex : TEXCOORD0;
float3 Normal : NORMAL;
};
struct VertexOutput
{
float4 Position : POSITION;
float2 Tex : TEXCOORD0;
float3 Normal : TEXCOORD1;
float3 View : TEXCOORD2;
};
VertexOutput VertexMain(VertexInput input)
{
VertexOutput output = (VertexOutput)0;
WorldViewProjection = mul(mul(View, World), projection);
output.Position = mul(mul(input.Position, Scal), WorldViewProjection);
output.Tex = input.Tex;
output.Normal = mul(input.Normal, World);
output.View = EyePosition - mul(input.Position, World);
return output;
}
float4 PixelMain(VertexOutput input) : COLOR0
{
float diffsum;
float specularsum;
float4 color;
float sunshinepower;
float4 amibent = float4(0.1f, 0.1f, 0.1f, 1.0f);
sunshinepower = 16.0f;
diffsum = specularsum = 0;
//漫反射
LightDir = normalize(LightDir);
diffsum = saturate(dot(LightDir, input.Normal));
//镜面反射
float3 L = -LightDir;
float3 R = normalize(reflect(L, input.Normal));
float3 V = normalize(input.View);
specularsum = pow(saturate(dot(R, V)), sunshinepower);
color = specularsum + diffsum * LightColor + amibent;
return color;
}
technique techR
{
pass p0
{
VertexShader = compile vs_2_0 VertexMain();
PixelShader = compile ps_2_0 PixelMain();
}
}
posted @
2009-02-16 10:10 AstaTus 阅读(2686) |
评论 (2) |
编辑 收藏
终于把无限地形调试好了,但纹理部分还没做。那个恼人的BUG总是把机器搞成蓝屏,微软的东西用起来就是不放心啊。-_-
下一步要做鼠标拾取,但发现扩展比较乱,打算重构下,具体思路是:
1.把四叉树拿出来单独做成一个类,节点是node,只标管理坐标等方位属性,然后再用entity类attach上去,貌似现在大多数引擎都是这样做的。
2.node用composite 模式 可以自己create节点 四叉树的那个类就是把node 和entity封装成树,以后如果有其他的场景管理模式就不需要改动node和entity类了
暂且只想了这些,具体细节还有很多的考虑,只能慢慢来了
.打算以后在编辑器里将场景直接导出成一个文件,然后在游戏里导入文件就行了~
额,貌似还有很多事情~
纹理没做 样子比较难看 不贴图了。
posted @
2009-02-16 09:59 AstaTus 阅读(752) |
评论 (2) |
编辑 收藏
整合成功已将近1个星期了,但并不是很开心。因为先前的那个LOD效率太低 潘永亮的pdf里说他有100~200+的帧率,而我的只是在30上下徘徊而且还是512 * 512的高度图,他说他的是1024* 1024的 ,所以无比的郁闷+ 仇视~后来感觉算法的瓶颈可能是在到最后分的节点太细了,导致在渲染时 渲染队列里的节点过多,(我的笔记cpu是1.66G的,虽然双核,但单线程的程序最多也不会超过1.8G吧)后来看到ogre里的terrain的那里例子里,LOD变化时是一大块一大块的,一个节点代表一大块的mesh ,后来看了下是65*65的网格 而我的最细只有3*3. -.-!
所以这些日子都在弄那个地形 ,看到tonykee boss的博客里的那个无限地形非常的HAPPY,所以依据他的思路在写,后来发现这个地形代码非常的庞大,但可以想象,用起来将是非常的爽啊,因为tonykee boss只给了个大概的思路,细节方面有很多要考虑的,尤其是效率方面的(不知道是不是以前写过单片机的程序的原因,时间和空间的开销我都过分的关注-。-),所以导致已将近写了1个星期,不过还差点,快的话明天估计可以展开全面的调试了。。。
明天年三十,希望能1次调试成功~~
posted @
2009-01-24 22:18 AstaTus 阅读(917) |
评论 (1) |
编辑 收藏
参考了潘永亮的lod的资料后,终于将LOD给实现了
LOD地形的实现面临有2个问题
1:网格的裂缝问题,我是用取消那条与低分辨块相邻的边来做的,这样的话有个缺点既每相邻的块分辨率做多只能相差1;
2:生成网格时的遍历次数,用潘永亮的方法只需遍历一次
具体参见潘永亮的PDF:
/Files/AstaTus/largeLOD.pdf 我的效果图:
posted @
2008-12-25 22:54 AstaTus 阅读(415) |
评论 (0) |
编辑 收藏
DX学习中总是在一些小问题上纠缠不清,所以特开一篇,记录下自己的错误。
1, 内存访问异常:
遇到该问题时,可能错误并非在报错的那个语句上,而是在前面的运行语句中,数组越界访问,或其他关于内存的错误。
我就是在用vector时 越界访问了(虽然vector可以自动开辟空间,但[]运算符貌似不能访问当前所占有的内存之后的内存,
我是先resiz e的, 这 样可以提高效率) 导致后面createtexturefromfile的函数无法创建纹理 。
2. 创建的实体渲染后不显示
这个问题至今遇到了2次,都是因为变量的类型原因
(1).索引的类型默认是WORD类型,但是在创建Indexbuffer时可以将索引的类型设置为DWORD。
(2).自定义的顶点格式的xyz必定需要float型
3. 换了个dx的SDK(June 2008) 发现原来的shader代码出了点问题,在用到全局变量的代码处报
global variables are implicitly constant, enable compatibility mode to allow modification 错误
也就是说全局变量是extern也是常量,在shader里面不能修改,但可以从宿主程序里改。
posted @
2008-12-22 13:06 AstaTus 阅读(298) |
评论 (0) |
编辑 收藏
好久没写了,前些日子去搞文件系统了,是单片机的文件系统,完全不能调试,累啊,现在用起2005 那一个爽字了得。。哈哈
现在已经完成相机,地形,框架三个类了,不过功能还不是很完善,还需待改进。。
贴张图
posted @
2008-11-17 22:21 AstaTus 阅读(577) |
评论 (2) |
编辑 收藏
/**//////pixel shader:sampler BaseTex;
sampler SpotLightTex;
sampler StringTex;
struct PS_INPUT
{
float2 base : TEXCOORD0;
float2 spotlight : TEXCOORD1;
float2 text : TEXCOORD2;
};
struct PS_OUTPUT
{
vector finalcolor : COLOR;
};
PS_OUTPUT Main(PS_INPUT input)
{
PS_OUTPUT output = (PS_OUTPUT)0;
vector b = tex2D(BaseTex, input.base);
vector s = tex2D(SpotLightTex, input.spotlight);
vector t = tex2D(StringTex, input.text);
vector c = b * s + t;
c += 0.1f;
output.finalcolor = c;
return output;
}
/**////////////////////////主程序//..
BT = PSConstantTable->GetConstantByName(0, "BaseTex");
ST = PSConstantTable->GetConstantByName(0, "SpotLightTex");
TT = PSConstantTable->GetConstantByName(0, "StringTex");
//..
BT, ST, TT 为D3DXHANDLE类型,调试到这里时
这三个都为错误指针,PSConstantTable为获取正常的静态数据表指针,pixel shader编译也没问题,到底是哪里错了,抓狂。。
为什么编译没出错,获取静态数据表也没出错,就是在获取着色器里的sampler句柄时出错。。。谜团至今未解。。
posted @
2008-10-16 22:39 AstaTus 阅读(315) |
评论 (0) |
编辑 收藏