公告

联系我:我的126邮箱: billhsu。 Locations of visitors to this page
<2022年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

统计

  • 随笔 - 41
  • 文章 - 0
  • 评论 - 82
  • 引用 - 0

常用链接

留言簿(16)

随笔分类

随笔档案

相册

Game Dev

搜索

  •  

最新评论

阅读排行榜

评论排行榜

发日志纪念~~第一次写导出插件

今天终于把模型导出插件最基本的功能--导出网格给写好了。

c++和max sdk一起用的感觉很怪,系统崩溃了N次,不过,总算能导出网格了~

 

有图有真相,截图纪念

(注意:模型是从value的csol中弄出来的)

在d3d中渲染导出的模型­

在d3d中渲染导出的模型­


我的模型导出插件­

导出数据样本:

[这是一个带贴图的立方体的导出数据]

 

8//  8个顶点
-6.70302 -21.2068 -5.46039
17.1883 -6.46757 0.162097
-22.4049 2.22378 -0.162097
1.48644 16.963 5.46039
-8.48039 -28.3257 20.7542
15.411 -13.5865 26.3767
-24.1823 -4.89514 26.0525
-0.290929 9.84411 31.675

12//  12个纹理坐标
0 1 0
1 1 0
0 0 0
1 0 0
0 1 0
1 1 0
0 0 0
1 0 0
0 1 0
1 1 0
0 0 0
1 0 0

12//  12个面引索
0 9 2 11 3 10
3 10 1 8 0 9
4 8 5 9 7 11
7 11 6 10 4 8
0 4 1 5 5 7
5 7 4 6 0 4
1 0 3 1 7 3
7 3 5 2 1 0
3 4 2 5 6 7
6 7 7 6 3 4
2 0 0 1 4 3
4 3 6 2 2 0

posted @ 2009-11-25 19:25 Bill Hsu 阅读(386) | 评论 (2)编辑 收藏
最酷的排序算法演示

真的很形象啊( ⊙ o ⊙ )!

posted @ 2009-11-08 00:08 Bill Hsu 阅读(343) | 评论 (0)编辑 收藏
DirectX 3D 设备丢失(lost device)的处理

低手交流,高手勿入

当初觉得DX中设备丢失很讨厌,差点就投奔OpenGL了。
不过现在发现其实也没那么麻烦啦,写点东西,给不清楚
设备丢失怎么处理的同学参考下。

在创建时使用D3DPOOL_MANAGED标志的资源可以不需要重新载入,但D3DPOOL_DEFAULT加载的资源就需要先释放,后重建。

通常需要这样处理的有ID3DXFont和ID3DXSprite,而.X模型什么的就不需要。
在发现设备丢失时,我们要调用 OnLostDevice(void)函数让D3DPOOL_DEFAULT加载的资源释放掉。
好在ID3DXFont和ID3DXSprite有设备丢失处理函数,直接调用就好了

void OnLostDevice(void)
{
    m_sprite->OnLostDevice();
    m_font->OnLostDevice();
}

可是,怎么知道设备丢失了呢?
如果设备丢失,Present()函数就会“出问题”,返回值是D3DERR_DEVICELOST。
m_pIDirect3DDevice->EndScene();

HRESULT hr;
hr 
= m_pIDirect3DDevice->Present(NULL, NULL, NULL, NULL);
if(hr == D3DERR_DEVICELOST)
{
   
if(m_pIDirect3DDevice->TestCooperativeLevel() == D3DERR_DEVICENOTRESET)
    {
        OnLostDevice();
        OnResetDevice();
    }
}
TestCooperativeLevel()== D3DERR_DEVICENOTRESET时,就可以恢复设备了。
于是,我们调用
OnLostDevice()让D3DPOOL_DEFAULT加载的资源释放掉,之后,调用OnResetDevice()来恢复设备就可以了。

怎么恢复设备呢?
void OnResetDevice(void)
{
    
if(FAILED(m_pIDirect3DDevice->Reset(&d3dpp)))
    {
        
return;
    }

    m_sprite
->OnResetDevice();
    m_font
->OnResetDevice();

    InitDevice();
}
先让D3D设备reset,然后调用
ID3DXFont和ID3DXSprite的恢复函数,最后,需要把D3D设备中的状态啊,矩阵变换啊这些重新设置下就完成了,也就是调用InitDevice()。

void InitDevice()
{
m_pIDirect3DDevice
->SetRenderState( D3DRS_ZENABLE, TRUE );

m_pIDirect3DDevice
->SetRenderState( D3DRS_AMBIENT, 0xffffffff );

m_pIDirect3DDevice
->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
m_pIDirect3DDevice
->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
m_pIDirect3DDevice
->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);

D3DXMatrixPerspectiveFovLH( 
&matProj, D3DX_PI/41.0f1.0f1000.0f );
m_pIDirect3DDevice
->SetTransform( D3DTS_PROJECTION, &matProj );

vEyeVec
=D3DXVECTOR3(0.0f,0.0f,-1.0f);
vLookatVec
=D3DXVECTOR3(0.0f,0.0f,0.0f);
vUpVec
=D3DXVECTOR3(0.0f,1.0f,0.0f);
D3DXMatrixLookAtLH( 
&matView, &vEyeVec, &vLookatVec, &vUpVec );
m_pIDirect3DDevice
->SetTransform( D3DTS_VIEW, &matView );

}



啊,这样设备丢失就处理好了

//
tag:DirectX 3D  d3d lost device TestCooperativeLevel OnLostDevice 恢复设备 设备丢失 DeviceLost

posted @ 2009-10-17 13:10 Bill Hsu 阅读(3484) | 评论 (2)编辑 收藏
游戏开发者年会2009



看到了不少比较震撼的技术。
感触最深的还是Cry Engine3的展台,
他们的次世代效果太强大了,还有那个场景编辑器,感觉无敌了=_=

独立游戏展上的一些游戏创意还是很好的,可我玩不好===


鄙视下腾讯游戏,占了好大一个台,就摆了2个显示器……

拍的照片







posted @ 2009-10-11 17:56 Bill Hsu 阅读(362) | 评论 (0)编辑 收藏
3d编程的无敌组合

发现有了Irrlicht+IrrNewt+IrrKlang ,3d编程就无敌了。。

简介一下

1.Irrlicht

Irrlicht在开源3d引擎里算很好的一个,
而且它是LGPL( Lesser General Public License)协议的,你可以随意使用它。
主页:http://irrlicht.sourceforge.net/

2.IrrNewt
IrrNewt是把Newton dynamic(一个物理引擎)和Irrlicht(3d图形引擎)结合的一个库,
用了它的确会让游戏效果很震撼。
主页:http://aresfps.sourceforge.net/irrnewt.htm

3.IrrKlang
它是为Irrlicht设计的声音引擎,支持3d和2d声效。
主页:http://www.ambiera.com/irrklang/

posted @ 2009-08-03 08:35 Bill Hsu 阅读(537) | 评论 (0)编辑 收藏
仅列出标题
共9页: 1 2 3 4 5 6 7 8 9