游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2383|回复: 1

使用盖莫引擎设计的地幔和天空盒子的渲染

[复制链接]

50

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2010-2-4 16:46:00 | 显示全部楼层 |阅读模式
代码如下:
#include <GEngine/Main.hpp>

using namespace std;

core::RefPtr<core::Image>   skyimage[5];
core::RefPtr<core::Texture> skytexture[5];
core::RefPtr<core::Image>   terrainimage[2];
core::RefPtr<core::Texture> terraintexture[2];

int main(int argc, char *argv[])
{   
    core:evice* device = core::InitDevice("盖莫引擎场景测试");
   
    //! 获取资源管理器
    core::ResourceManager *resourcemanager = device->GetResourceManager();
   
    //! 获取场景管理器
    core::RefPtr<core::SceneManager> scenemanager = core::SceneManager::GetSceneManager();
   
    //! 获取新的摄像机并设置为活动摄像机
    core::RefPtr<core::Camera> camera = scenemanager->CreateCamera("mycamera",
                                                                   Vector3f(500,20,400),
                                                                   Vector3f(503,20,400),
                                                                   Vector3f(0,1,0));
     
    //! 设置当前活动摄像机
    scenemanager->SetActiveCamera(camera);
   
    //! 获取天空图形指针
    skyimage[0] = resourcemanager->GetImage("sky_front","..\\image//sky//front.bmp");
    skyimage[1] = resourcemanager->GetImage("sky_back","..\\image//sky//back.bmp");
    skyimage[2] = resourcemanager->GetImage("sky_left","..\\image//sky//left.bmp");
    skyimage[3] = resourcemanager->GetImage("sky_right","..\\image//sky//right.bmp");
    skyimage[4] = resourcemanager->GetImage("sky_top","..\\image//sky//top.bmp");
  
    skytexture[0] = resourcemanager->GetTexture("sky_front",skyimage[0]);
    skytexture[1] = resourcemanager->GetTexture("sky_back",skyimage[1]);        
    skytexture[2] = resourcemanager->GetTexture("sky_left",skyimage[2]);
    skytexture[3] = resourcemanager->GetTexture("sky_right",skyimage[3]);   
    skytexture[4] = resourcemanager->GetTexture("sky_top",skyimage[4]);

    //! 获取天空盒指针
    core::RefPtr<core::SkyBox> skybox
    = scenemanager->GetSkyBox(skytexture[0],skytexture[1],skytexture[2],skytexture[3],skytexture[4]);
    skybox->SetSkyBoxSize(750,550,400);
    skybox->SetRotation(0.003f);
   
    //! 设置地形数据
    terrainimage[0] = resourcemanager->GetImage("terrain_image","..\\terrain//terrain.bmp");
    terrainimage[1] = resourcemanager->GetImage("terrain_detail","..\\terrain//detail.bmp");
    terraintexture[0] = resourcemanager->GetTexture("terrain_texture1",terrainimage[0]);
    terraintexture[1] = resourcemanager->GetTexture("terrain_texture2",terrainimage[1]);
            
    ASSERT(terrainimage[0] || terrainimage[1]);        
    core::RefPtr<core::Terrain> terrain = scenemanager->GetTerrain("terrain1");
    bool flag = terrain->Load("..\\terrain//terrain2.raw",1024);
    terrain->SetStepSize(16);
    terrain->SetTexture(terraintexture[1],terraintexture[0]);
   
    //! 设置摄像机数据
    camera->SetViewport(0,0,640,480);
    camera->SetPerspective(45,640.0f/480.0f,0.1f,1000);
                  
    //! 获取输入系统指针
    core::Input* input = device->GetInput();
                  
    BEGIN_LOOP(device)
        camera->SetPerspective(45,640.0f/480.0f,0.1f,1000);
        camera->Render();
        skybox->Render();
        terrain->Render();
    END_LOOP(device)
   
    terrain->Deinit();

    device->Close();
    device->Drop();
   
    system(&quotAUSE");
    return EXIT_SUCCESS;
}


看上去比较复杂 不过以后可以使用脚本处理
贴图如下:
(似乎不太好看)




50

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2010-2-4 17:09:00 | 显示全部楼层

Re: 使用盖莫引擎设计的地幔和天空盒子的渲染




加上雾后的显示效果如上
其相关代码如下:
#include <cstdlib>
#include <iostream>
#include <GEngine/Main.hpp>

using namespace std;

core::RefPtr<core::Image>   skyimage[5];
core::RefPtr<core::Texture> skytexture[5];
core::RefPtr<core::Image>   terrainimage[2];
core::RefPtr<core::Texture> terraintexture[2];

int main(int argc, char *argv[])
{   
    core:evice* device = core::InitDevice("盖莫引擎场景测试");
   
    //! 获取资源管理器
    core::ResourceManager *resourcemanager = device->GetResourceManager();
   
    //! 获取场景管理器
    core::RefPtr<core::SceneManager> scenemanager = core::SceneManager::GetSceneManager();
   
    //! 获取新的摄像机并设置为活动摄像机
    core::RefPtr<core::Camera> camera = scenemanager->CreateCamera("mycamera",
                                                                   Vector3f(500,20,400),
                                                                   Vector3f(503,20,400),
                                                                   Vector3f(0,1,0));
     
    //! 设置当前活动摄像机
    scenemanager->SetActiveCamera(camera);
   
    //! 获取天空图形指针
    skyimage[0] = resourcemanager->GetImage("sky_front","..\\image//sky//front.bmp");
    skyimage[1] = resourcemanager->GetImage("sky_back","..\\image//sky//back.bmp");
    skyimage[2] = resourcemanager->GetImage("sky_left","..\\image//sky//left.bmp");
    skyimage[3] = resourcemanager->GetImage("sky_right","..\\image//sky//right.bmp");
    skyimage[4] = resourcemanager->GetImage("sky_top","..\\image//sky//top.bmp");
  
    skytexture[0] = resourcemanager->GetTexture("sky_front",skyimage[0]);
    skytexture[1] = resourcemanager->GetTexture("sky_back",skyimage[1]);        
    skytexture[2] = resourcemanager->GetTexture("sky_left",skyimage[2]);
    skytexture[3] = resourcemanager->GetTexture("sky_right",skyimage[3]);   
    skytexture[4] = resourcemanager->GetTexture("sky_top",skyimage[4]);

    //! 获取天空盒指针
    core::RefPtr<core::SkyBox> skybox
    = scenemanager->GetSkyBox(skytexture[0],skytexture[1],skytexture[2],skytexture[3],skytexture[4]);
    skybox->SetSkyBoxSize(750,550,400);
    skybox->SetRotation(0.003f);
   
    //! 设置地形数据
    terrainimage[0] = resourcemanager->GetImage("terrain_image","..\\terrain//terrain.bmp");
    terrainimage[1] = resourcemanager->GetImage("terrain_detail","..\\terrain//detail.bmp");
    terraintexture[0] = resourcemanager->GetTexture("terrain_texture1",terrainimage[0]);
    terraintexture[1] = resourcemanager->GetTexture("terrain_texture2",terrainimage[1]);
            
    ASSERT(terrainimage[0] || terrainimage[1]);        
    core::RefPtr<core::Terrain> terrain = scenemanager->GetTerrain("terrain1");
    bool flag = terrain->Load("..\\terrain//terrain2.raw",1024);
    terrain->SetStepSize(16);
    terrain->SetTexture(terraintexture[1],terraintexture[0]);
   
    //! 设置摄像机数据
    camera->SetViewport(0,0,640,480);
    camera->SetPerspective(45,640.0f/480.0f,0.1f,1000);
                  
    //! 获取输入系统指针
    core::Input* input = device->GetInput();
   
    //! 获取雾指针
    core::RefPtr<core::Fog> fog = scenemanager->GetFog();
    fog->SetColor(core::Color(0.3f,0.3f,0.2f));
    fog->SetDensity(0.001f);
    fog->SetQuality(0.003f);
    fog->SetBound(0.1f,1000.0f);
    fog->Render();
                  
    BEGIN_LOOP(device)
        camera->SetPerspective(45,640.0f/480.0f,0.1f,1000);
        camera->Render();
        skybox->Render();
        terrain->Render();
    END_LOOP(device)
   
    terrain->Deinit();

    device->Close();
    device->Drop();
   
    system(&quotAUSE");
    return EXIT_SUCCESS;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-5-12 07:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表