這是蓋莫游戲引擎的立方體紋理一例
代碼如下:
1 //! 2010.03.03
2 /////////////////////////////////////////////////////
3 /// 蓋莫游戲引擎的立方體繪制
4 /////////////////////////////////////////////////////
5 //! 測試立方體繪制函數,矩陣,輸入輸出
6 //! 按鍵f1,f2,f3旋轉立方體
7 #include <GEngine/Gaimo.hpp>
8
9 #define BOX_SIDE (12.0)
10 using namespace std;
11 using namespace core;
12 Matrix4f mat;
13
14 //! 處理鼠標響應
15 void MouseCheck(core::RefPtr<core::Input> input);
16
17 int main(int argc, char **argv)
18 {
19 //! 初始化引擎設備并得到設備指針
20 RefPtr<Device> device = core::InitDevice("立方體紋理");
21 //! 得到引擎場景指針
22 RefPtr<SceneManager> scenemanager = device->GetSceneManager();
23 //! 得到引擎資源指針
24 RefPtr<ResourceManager> resourcemanager = device->GetResourceManager();
25 //! 獲取引擎紋理管理器指針
26 RefPtr<TextureManager> texturemanager = resourcemanager->GetTextureManager();
27 //! 獲取引擎圖形管理器
28 RefPtr<ImageManager> imagemanager = resourcemanager->GetImageManager();
29 //! 獲取引擎視頻驅動器
30 RefPtr<VideoDriver> videodriver = device->GetVideoDriver();
31 //! 獲取文件系統指針
32 RefPtr<FileSystem> filesystem = device->GetFileSystem();
33 filesystem->AddToSearchPath("..\\image//cubemap.zip");
34
35 //! 得到tile圖形和其紋理
36 core::RefPtr<Image> image1 = imagemanager->CreateObject("cube1",filesystem->OpenRead("cm_front.png"));
37 CHECK_PTR_PRINT(image1,"bad image1");
38 core::RefPtr<Image> image2 = imagemanager->CreateObject("cube2",filesystem->OpenRead("cm_back.png"));
39 CHECK_PTR_PRINT(image2,"bad image2");
40 core::RefPtr<Image> image3 = imagemanager->CreateObject("cube3",filesystem->OpenRead("cm_left.png"));
41 CHECK_PTR_PRINT(image3,"bad image3");
42 core::RefPtr<Image> image4 = imagemanager->CreateObject("cube4",filesystem->OpenRead("cm_right.png"));
43 CHECK_PTR_PRINT(image4,"bad image4");
44 core::RefPtr<Image> image5 = imagemanager->CreateObject("cube5",filesystem->OpenRead("cm_top.png"));
45 CHECK_PTR_PRINT(image5,"bad image5");
46 core::RefPtr<Image> image6 = imagemanager->CreateObject("cube6",filesystem->OpenRead("cm_bottom.png"));
47 CHECK_PTR_PRINT(image6,"bad image6");
48 core::RefPtr<Texture> cubemap = texturemanager->CreateCubeMap("cubemap",image1,image2,image3,image4,image5,image6);
49 cubemap->Generate();
50
51 //! 獲取全局攝像機,設置攝像機參數
52 core::RefPtr<core::Camera> camera = scenemanager->GetActiveCamera();
53 camera->SetPosition(Vector3f(20,20,20));
54 camera->SetView(Vector3f(0,0,0));
55 camera->SetDirection(Vector3f(0,1,0));
56
57 camera->SetViewPort(Recti(0,0,640,480));
58 camera->SetPerspective(50.0f,640.0f/480.0f,0.1f,1000.0f);
59 videodriver->EnableCulling();
60
61 float sides[] = {BOX_SIDE,BOX_SIDE,BOX_SIDE};
62 float pos[] = {0,0,0};
63 BEGIN_LOOP(device)
64 videodriver->SetClearBuffer(ENGINE_CLEAR_COLOR | ENGINE_CLEAR_DEPTH);
65 videodriver->SetClearColor(core::Color::Blue);
66 camera->Render();
67 MouseCheck(device->GetInput());
68 cubemap->AttachRenderTarget();
69 videodriver->RenderCube(pos,mat.ptr(),sides);
70 END_LOOP(device)
71
72 return 0;
73 }
74
75 //! 處理鼠標響應
76 void MouseCheck(core::RefPtr<core::Input> input)
77 {
78 if(input->IsPressedKey(KEY_F1))
79 {
80 mat*=mat.Rotate((rand()%200)/1200.0f,1,0,0);
81 }
82 else if(input->IsPressedKey(KEY_F2))
83 {
84 mat*=mat.Rotate((rand()%200)/1200.0f,0,1,0);
85 }
86 else if(input->IsPressedKey(KEY_F3))
87 {
88 mat*=mat.Rotate((rand()%200)/1200.0f,0,0,1);
89 }
90 }
91
92
93
具體的使用方法就是從設備指針中獲取資源管理器指針
然后從資源管理器獲取紋理管理器指針
之后調用CreateCubeMap();傳入6個圖形指針即可
之后調用成員函數Generate函數
在使用的時候調用AttachRenderTarget綁定當前紋理即可使用很方便吧
下面是具體的貼圖: