【TomoEngine】 第一讲 太空遨游(一) 创建太阳系
来源:互联网 发布:数据库三大范式好处 编辑:程序博客网 时间:2024/03/29 23:26
TomoEngine是一款自主研发的商业轻量级跨平台3D实时图形渲染引擎,目前还处于初级阶段,有很多功能还在持续完善的过程中。随着对TomoEngine的博文更新,本博客迎来了全新的阶段。博主日后将会用大量时间来介绍这一款3D引擎的使用,读者朋友可以当成一个学习的工具。
TomoEngine官方qq群:591080786 欢迎到群内讨论TomoEngine问题
示例工程的百度云下载地址:TomoEngine-Library&Sample。作为商业引擎,TomoEngine短期内并不会开源。TomoEngine的引擎库Library文件以及SDK Specification Document是可以免费获取的,对于喜欢图形编程的读者,这将会是一款适合学习的工具。
环境要求:
1. 安装 DirectX SDK
2. 切换电脑显卡为独立显卡以支持OpenGL 3.x以上版本
在 设备管理器 中,选择 显示适配器 ,选中指定选项 右键 启用
3. 安装vs2013以上版本
第一个用TomoEngine制作的Demo-SpaceCraft(太空遨游)
效果图:
工程文件(vs2013)详解 ,后续会逐步实现上面的场景,
这一讲暂时只建立宇宙空间以及太阳和金星
main.cpp - 建立太空遨游App的框架类App3DSpaceTravel
#include "App3DSpaceTravel.h"void main(){App3DFramework* app = new App3DSpaceTravel;app->go();delete app;}
Step01 - initialize resource 初始化加载资源
InitialiseResourceGroup() - 初始化资源组Popular文件资源
void App3DSpaceTravel::LoadRes(){LOGINFO("load_res thread begin");ResourceGroupManager::GetSingleton().InitialiseResourceGroup("Popular");SetupSolarSystem();SetupEarthScene();LOGINFO("load_res thread end");}
Step02 - create scene 创建场景
首先获取当前的场景管理器SceneManager,
创建当前场景的主摄像机CreateCamera,创建相机对应的SceneNode节点
并设置为当前摄像机,挂接到camNode上,
给当前视口ActiveViewport添加当前摄像机pMainCamera
SetupSolarSystem() - 建立太阳系场景内容
SetupEarthScene() - 建立星空
void App3DSpaceTravel::CreateSpaceScene(Tomo::SceneTypeMask typeMask, const string& InstanceName){SceneManager* sm = m_pRoot->CreateSceneManager(typeMask, InstanceName);m_pCurrentScene = sm;//create camera//win aspect ratiofloat aspectRatio = m_pActiveWindow->GetWidth() / (float)m_pActiveWindow->GetHeight();//aspectRatio = 1.f;float fovRatio = 0.7f;m_pMainCamera = sm->CreateCamera("MainCamera", aspectRatio, fovRatio);//m_pSpaceCamera = sm->CreateCamera("CraftCamera",aspectRatio,fovRatio);sm->SetActiveCamera(m_pMainCamera);SceneNode* camNode = m_pCurrentScene->GetRootSceneNode()->CreateChildSceneNode("MainCamera");Point3 camPos(0.f, 0.f, 50.f);camNode->SetPosition(camPos);Quaternion orient;camNode->AttachObject(m_pMainCamera);m_pCurrentScene->SetActiveCamera(m_pMainCamera);m_pActiveViewport = m_pActiveWindow->AddViewport(m_pMainCamera);}
SceneManager创建Entity以及对应的SceneNode,
设置SceneNode的位置pos
以及方位quat(关于四元数Quaternion参考前面的OpenGL系列文章)
Entity需要AttachObject到SceneNode上才能显示
void SolarSystem::SetupSolarSystem(Tomo::SceneManager* curScene){m_pCurScene = curScene;//Tomo::SceneNode* sunNode = curScene->GetRootSceneNode()->CreateChildSceneNode("Sun");Tomo::Vector3 pos(0.f,0.f,-200.f);sunNode->SetPosition(pos);Tomo::Quaternion quat;quat.FromAngleAxis(PI/6,Tomo::Vector3::UNIT_X);sunNode->Rotate(quat);Tomo::Entity* sunEnt = curScene->CreateEntity("Sun", "sun.meshml");m_pSun = new Planet(0,0.f,sunNode,sunEnt,0);Tomo::SceneNode* mercuryNode = sunNode->CreateChildSceneNode("Mercury");pos.x = 100.f;pos.z = 0.f;mercuryNode->SetPosition(pos);Tomo::Vector3 scale(0.3f, 0.3f, 0.3f);mercuryNode->SetScale(scale);Tomo::Entity* mercuryEnt = curScene->CreateEntity("Mercury", "mercury.meshml");Tomo::Entity* orbitEnt = curScene->CreateEntity("Orbit_Mercury", "orbit.meshml");m_pMercury = new Planet(m_pSun, 0.6f, mercuryNode, mercuryEnt, orbitEnt);}
创建SkyBox作为星空
void App3DSpaceTravel::SetupEarthScene(){m_pCurrentScene->SetSkyBox(true,"SpaceSkyBox",2000.f);}
Step03 - control scene 场景控制
在FrameRenderingQueued里面更新每一帧
bool App3DSpaceTravel::FrameRenderingQueued(const FrameEvent& evt){App3DFramework::FrameRenderingQueued(evt);if (m_spriteController){if (initPopular_ < 1)++initPopular_;if (1 == initPopular_){LOGINFO("Initialise Resource Group Popular");LoadRes();++initPopular_;}if (0.f == m_spriteController->GetDestValue()->GetValue()){m_startLogo->Hide();ControllerManager::GetSingleton().DestroyController(m_spriteController);LOGINFO("spriteController destroy");m_spriteController = 0;}}//update solar systemif(m_pSolarSystem)m_pSolarSystem->FrameUpdate(evt);return true;}最终效果:
人生感悟-I'm only a visitor in Shanghai...
- 【TomoEngine】 第一讲 太空遨游(一) 创建太阳系
- 【TomoEngine】 第二讲 太空遨游(二)飞船全方位控制
- 【TomoEngine】 第五讲 【MOBA制作日记一】 角色
- 【TomoEngine】 第六讲 基于TomoEngine的3D产品(游戏/应用)制作流程
- 功课数学分析(一) 第一讲
- 【TomoEngine】 第三讲 从零开始搭建TomoApp工程
- 第一个JAVA小项目(太阳系行星运动模型)
- 【八卦】Word之父即将遨游太空及其他
- 一键google遨游
- 第一讲:Azure上创建虚拟机(学习笔记)
- 【TomoEngine】 第七讲 【MOBA制作日记二】 角色攻击
- 【TomoEngine】 第四讲 TomoApp框架运行流程详解
- 【TomoEngine】 第十讲 【MOBA制作日记五】 角色技能响应
- 【TomoEngine】 第八讲 【MOBA制作日记三】 角色行走
- 【TomoEngine】 第十一讲 【MOBA制作日记六】 字体渲染
- 【TomoEngine】 第十二讲 【MOBA制作日记七】 角色电击效果
- 如何用 ARKit 将太阳系装进 iPhone(一)
- Java上手小项目(一)-太阳系模型笔记
- sql语句
- 【cocos2d-js网络教程篇】cocos2d-js http网络请求
- U3d基础知识1
- 子线程更新UI,牵扯activity的启动过程
- 【慕课笔记】4-3 字节流之文件输出流FileOutputStream
- 【TomoEngine】 第一讲 太空遨游(一) 创建太阳系
- iso 自有 正反编码
- java.lang.IndexOutOfBondsException:setSpan(3..3) ends beyond length 2
- React-约束组件及无约束组件详解
- Unity3D -- 快速排序
- 131.View the Exhibit and examine the structure of the PRODUCT, COMPONENT, and PDT_COMP tables.
- NSScanner 介绍
- ios开发 各种字体
- extjs labelalign有什么作用