这不是正式测试的demo例子
其存在的必要是为物理引擎Demo做准备的O(∩_∩)O~
1 //! 2010.03.03
2 /////////////////////////////////////////////////////
3 /// 盖莫游戏引擎的立方体绘制
4 /////////////////////////////////////////////////////
5 //! 测试立方体绘制函数,矩阵,输入输出
6 //! 按键f1,f2,f3旋转立方体
7 #include <GEngine/Gaimo.hpp>
8 using namespace std;
9
10 Matrix4f mat;
11
12 //! 处理鼠标响应
13 void MouseCheck(core::Input* input);
14
15 int main(int argc, char **argv)
16 {
17 //! 初始化引擎设备并得到设备指针
18 core::Device* device = core::InitDevice("盖莫引擎立方体测试");
19 //! 得到引擎场景指针
20 core::RefPtr<core::SceneManager> scenemanager = device->GetSceneManager();
21 //! 得到引擎资源指针
22 core::ResourceManager* resourcemanager = device->GetResourceManager();
23
24 //! 获取lua指针
25 LuaPlus::LuaStateOwner *lua = device->GetLuaStateOwner();
26
27 //! 得到logo图形和其纹理
28 core::RefPtr<core::Image> logo = resourcemanager->GetImage("logo","..\\image//logo.jpg");
29 core::RefPtr<core::Texture> logotexture = resourcemanager->GetTexture("logo",logo);
30 logotexture->Bind();
31
32 //! 获取全局摄像机
33 core::RefPtr<core::Camera> camera = scenemanager->GetGlobalCamera(Vector3f(30,30,30),
34 Vector3f(0,0,0),
35 Vector3f(0,1,0));
36 camera->SetViewport(0,0,640,480);
37 camera->SetPerspective(50.0f,640.0f/480.0f,0.1f,1000.0f);
38 glClearDepth(1.0f);
39 glDepthFunc(GL_LEQUAL);
40 glEnable(GL_DEPTH_TEST);
41 glEnable(GL_CULL_FACE);
42 glShadeModel(GL_SMOOTH);
43 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
44
45 float sides[] = {16,16,16};
46 float pos[] = {0,0,0};
47
48 BEGIN_LOOP(device)
49 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
50 glLoadIdentity();
51 camera->SetPerspective(45.0f,640.0f/480.0f,0.1f,1000.0f);
52 camera->Render();
53 MouseCheck(device->GetInput());
54 core::Render::RenderCube((int)logotexture->GetTextureId(),pos,mat.ptr(),sides);
55 END_LOOP(device)
56
57 device->Close();
58 device->Drop();
59
60 return 0;
61 }
62
63 //! 处理鼠标响应
64 void MouseCheck(core::Input* input)
65 {
66 if(input->IsPressedKey(KEY_F1))
67 {
68 mat*=mat.Rotate((rand()%200)/900.0f,1,0,0);
69 }
70 else if(input->IsPressedKey(KEY_F2))
71 {
72 mat*=mat.Rotate((rand()%200)/900.0f,0,1,0);
73 }
74 else if(input->IsPressedKey(KEY_F3))
75 {
76 mat*=mat.Rotate((rand()%200)/900.0f,0,0,1);
77 }
78 }
显示结果如图:
2.
其实这里的按键消息响应应该采用插槽