AstaTus
-- 夏天不热。。
posts - 22,comments - 12,trackbacks - 0
火炬之光是用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 阅读(1771) | 评论 (0)编辑 收藏
   一个声源与多个缓冲绑定时,这几个缓冲中的声音Format需要一致,否则
alSourceQueueBuffers函数会得到 0xA004的错误,然后在Sourceplay时声源状
态不会改变为AL_PLAYING而一直都会在AL_INITAL的状态
  
posted @ 2009-09-20 11:17 AstaTus 阅读(298) | 评论 (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|cosF
      因为N为单位向量 则求出来的值为Origin向量在N上的投影且有方向
      (这个有向长度相于当该平面经过原点时的有向长度,既D为0时),(D的几何意义是平面到原点的有向距离,
       既D为负则 原点在平面背面,反之在反面)
      所以N•Origin + D为最后Origin在正真的有偏移的N上的投影的有向长度,为负则在背
      面,为正则在正面
      貌似讲的不怎么清楚 -_- ~~~
posted @ 2009-02-25 21:01 AstaTus 阅读(532) | 评论 (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.1f0.1f0.1f1.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 阅读(2688) | 评论 (2)编辑 收藏
      终于把无限地形调试好了,但纹理部分还没做。那个恼人的BUG总是把机器搞成蓝屏,微软的东西用起来就是不放心啊。-_-
      下一步要做鼠标拾取,但发现扩展比较乱,打算重构下,具体思路是:
      1.把四叉树拿出来单独做成一个类,节点是node,只标管理坐标等方位属性,然后再用entity类attach上去,貌似现在大多数引擎都是这样做的。
      2.node用composite 模式 可以自己create节点 四叉树的那个类就是把node 和entity封装成树,以后如果有其他的场景管理模式就不需要改动node和entity类了
      暂且只想了这些,具体细节还有很多的考虑,只能慢慢来了
      .打算以后在编辑器里将场景直接导出成一个文件,然后在游戏里导入文件就行了~
      额,貌似还有很多事情~
      纹理没做 样子比较难看 不贴图了。
posted @ 2009-02-16 09:59 AstaTus 阅读(753) | 评论 (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 阅读(919) | 评论 (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 阅读(578) | 评论 (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)编辑 收藏
仅列出标题  下一页