最后一次更新于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" 
 7using namespace KBEngine; 
 8
 9class 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
23class 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
39CKBRenderObject* m_worldGeo = NULL; 
40CKBRenderObject* g_fps = NULL; 
41CKBRenderObject* skyDomeModel ; 
42CSceneApplication::~CSceneApplication(void)
43SAFE_DELETE( m_worldGeo ); 
44SAFE_DELETE( g_fps ); 
45SAFE_DELETE( skyDomeModel ); 
46}

47BOOL 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
68void 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层细节贴图的样子