最后一次更新于2007年04月21日
使用directX9.0c, vs2005sdk, hlsl 开发 环境7300GS,奔4CPU, 1024x768   0级lod 因速度可以接受所以没有继续做lod(不过已经做了lod相关设计只是没用而已) 还没有做遮挡消除等功能, 目前实现了 动态云,太阳,天空,大地,碰撞检测. 4层细节贴图 和 8层细节贴图 在我机器环境上可以达到 (8layer)100~(1layer)250fps,下一步该实现 真实水,和 树木,草,石头,建筑,天气效果等等...  最近写的点累,每天要上班...先放着...

代码有很强的灵活性, 直接继承基类root 添加渲染对象就可以实现用户自定义coding.
这是这个 demo的user代码.
 1 #pragma once 
 2 #include  " KBCommon.h "  
 3 #include  " KBRoot.h "  
 4 #include  " KBWorld.h "  
 5 #include  " KBWorldGeometry.h "  
 6 #include  " KBFps.h "  
 7 using   namespace  KBEngine; 
 8
 9 class  CSceneWorld : public  CKBWorldBase 
10 //继承CKBWorldBase 可以自定义渲染 如 雾的方式, 灯光 等系列渲染参数 
11public
12CSceneWorld(void){}
13public
14~CSceneWorld(void){}
15virtual BOOL create( TiXmlNode* section ) 
16
17  CKBWorldBase::create( section ); 
18  //自定义创建 
19  return TRUE; 
20}
 
21}

22
23 class  CSceneApplication : public  CKBRoot 
24
25public
26CSceneApplication(void){}
27public
28~CSceneApplication(void); 
29virtual BOOL createScene( TiXmlNode* section ); 
30/**////鼠标控制 
31virtual void ProcessMouse( void ); 
32}

33
34
35
36 #include  " SceneApplication.h "  
37 #include  " KBSkyGeometry.h "  
38
39 CKBRenderObject *  m_worldGeo  =  NULL; 
40 CKBRenderObject *  g_fps  =  NULL; 
41 CKBRenderObject *  skyDomeModel ; 
42 CSceneApplication:: ~ CSceneApplication( void )
43SAFE_DELETE( m_worldGeo ); 
44SAFE_DELETE( g_fps ); 
45SAFE_DELETE( skyDomeModel ); 
46}

47 BOOL CSceneApplication::createScene( TiXmlNode *  section ) 
48
49//自定义创建 
50g_fps = new CKBFps(); 
51g_pWorld = new CSceneWorld(); 
52m_worldGeo = new CKBWorldGeometry(); 
53skyDomeModel = new CKBSkyDomeModel(); 
54g_pTextHelper->CreateFont( "Arial" ); 
55g_pWorld->create( section ); 
56//创建天空 
57((CKBSkyDomeModel*)skyDomeModel)->create( section ); 
58
59((CKBWorldGeometry*)m_worldGeo)->create(  CKBD3DDevice::getSingleton().getDevice() , g_pWorld->getKBFrustum() , section ); 
60g_pWorld->getKBCamera()->setPosY(((CKBWorldGeometry*)m_worldGeo)->collision( g_pWorld->getKBCamera()->GetEye())); 
61addToRender( g_fps ); 
62addToRender( skyDomeModel ); 
63addToRender( m_worldGeo ); 
64
65return TRUE; 
66}
 
67
68 void  CSceneApplication::ProcessMouse(  void  ) 
69
70//输入输出部分这是暂时的,将来会使用 Dxinput接口 
71CKBRoot::ProcessMouse(); 
72if( GetAsyncKeyState( 'A' ) ) 
73  g_pWorld->getKBCamera()->MoveZ( 3.0f ,((CKBWorldGeometry*)m_worldGeo)->collision( g_pWorld->getKBCamera()->GetEye()) ); 
74if( GetAsyncKeyState( 'Z' ) ) 
75  g_pWorld->getKBCamera()->MoveZ( -3.0f ,((CKBWorldGeometry*)m_worldGeo)->collision( g_pWorld->getKBCamera()->GetEye())); 
76}
 
77
78
79 // 贴图 下面的效果都是  4层细节贴图的样子 
研究了好几个月的游戏场景,完成了部分_第1张图片

研究了好几个月的游戏场景,完成了部分_第2张图片

研究了好几个月的游戏场景,完成了部分_第3张图片