MMORPG大型游戏设计与开发(客户端架构 part14 of vegine)
渲染在客户端中具有着至关重要的地位,试想我们玩游戏的第一感觉是什么就会明白了,良好的画面效果对客户端来说是多么的迫切。没有学习过opengl或是direct3d这些渲染API的朋友们也不必担心,而学习过这些接口的朋友们现在可以安心了,没有必要为了一个小小的渲染弄的头疼。因为渲染引擎可以帮你解决大部分你所能想到的渲染效果,这也正是渲染引擎所诞生的直接原因,那就是为了便利。
CODE
/**
* PAP Engine ( -- )
* $Id system.h
* @link-- for the canonical source repository
* @copyright Copyright (c) 2013-2014 viticm( viticm@126.com )
* @license
* @user viticm<viticm@126.com/viticm.ti@gmail.com>
* @date 2014-3-21 16:11:04
* @uses vengine render system class
* cn: 渲染系统接口
*/
#ifndef VENGINE_RENDER_SYSTEM_H_
#define VENGINE_RENDER_SYSTEM_H_ #include "vengine/config.h"
#include "vengine/kernel/node.h"
#include "vengine/math/base.h"
#include "vengine/render/entitynode.h" namespace vengine_render { class VENGINE_API System : public vengine_kernel::Node { VENGINE_KERNEL_DECLARE_DYNAMIC(vengine_render_System); public:
virtual void init(void*) = ;
virtual void release() = ;
//场景渲染
virtual void renderframe() = ;
//渲染loading画面
virtual void render_loadingframe(const char* loading) = ;
//响应WM_PAINT消息
virtual void onpaint() = ;
//窗口大小改变事件
virtual void on_windowsize_change(uint32_t message,
WPARAM wparam,
LPARAM lparam) = ;
//取得渲染窗口
virtual HWND getwindow() const = ;
//保存当前屏幕截图到文件中
virtual bool printscreen(char* buffer, int32_t size) = ; //debugs
public:
//加入debug信息
virtual void debug_pushstring(const char* format, ...) = ;
//设置debug状态信息
virtual void debug_setstring(const char* name, const char* value) = ;
//设置选中物体信息
virtual void set_hitobjet_string(const char* str) = ;
//检查物体的透明度
virtual void check_objecttransparent() = ;
virtual void set_shoeobject_bytype(const char* name) = ; public:
typedef enum {
kAxisTypeGame, //游戏世界坐标,以米为单位
kAxisTypePlan, //戏世界坐标,以米为单位,不过不包括Y坐标
kAxisTypeRender, //渲染系统中定点坐标,一般以厘米为单位
kAxisTypeScreen, //屏幕上的像素坐标,例如鼠标位置,整数
} axistype_enum;
//将一种坐标转化为另一种坐标,转化成成功返回true
//当源坐标非法的时候,返回false
virtual bool axistrans(
axistype_enum type,
const vengine_math::base::threefloat_vector_t& source,
axistype_enum targettype,
vengine_math::base::threefloat_vector_t& target) = ;
virtual bool axis_checkvalid(
axistype_enum type,
const vengine_math::base::threefloat_vector_t& axis) = ; //camera
public:
typedef enum {
kCameraTypeCharacter, //主角
kCameraTypeScene, //场景
} cameratype_enum;
typedef enum {
kCameraOffsetLeft = ,
kCameraOffsetRight,
kCameraOffsetNone
} cameraoffset_enum;
//设置当前摄像机
virtual void camera_setcurrent(cameratype_enum type) = ;
//设置偏移量
virtual void camera_setoffset(cameraoffset_enum tag,
float paralleloffset,
float verticaloffset = 0.0f) = ;
//移动相机所看的位置到某一点,一般是玩家所在的位置(世界二维坐标系)
virtual void camera_set_lookat(
const vengine_math::base::threefloat_vector_t& position) = ;
//缩放相机视口 [0.0f, 1.0f] 0-最近距离 1-最远距离
virtual void camera_setzoom(float zoom) = ;
virtual void camera_setzoom(bool up, int32_t multiple) = ;
virtual float camera_getzoom() const = ;
//设置相机方向 (0, 2л), 以z轴指向的方向为0度,逆时针为正方向
virtual void camera_setdirection(float direction) = ;
virtual void camera_adddirection(float multiple) = ;
virtual float camera_getdirection() const = ;
//取得屏幕射线
virtual void camera_getwindow_to_viewpointray(
int32_t x,
int32_t y,
vengine_math::base::floatray& ray) = ;
//震荡一次
virtual void camera_vibrate_onetime() = ;
virtual void camera_vibrate_onetime(float range,
float steplength,
uint32_t times) = ;
//人物选择, 创建, 界面用到的摄像机接口.
virtual void camera_set_eyeposition(
const vengine_math::base::threefloat_vector_t& position) = ;
//设置观察点的位置
virtual void camera_set_lookat_position(
const vengine_math::base::threefloat_vector_t& position) = ; //scene
public:
//预加载场景
virtual void scene_preload(const STRING& scenename) = ;
//加载场景
virtual void scene_load(uint16_t id, const STRING& scenedefine) = ;
//卸载场景
virtual void scene_unload() = ;
//显示地形网格
//virtual void scene_show_girdswitch(int32_t size) = 0;
//显示设置全局渲染效果
virtual void scene_set_postfilter(const char* name,
bool state = true) = ;
//设置lightmap
virtual void scene_set_lightmap_quality(int32_t quality) = ;
//进入/退出死亡全局渲染效果
virtual void scene_set_postfilter_death(bool enter) = ;
//设置环境特效(位置)
virtual void scene_set_environmentinfo(
const vengine_math::base::threefloat_vector_t& position) = ;
//设置材质32位/16位转化
virtual void scene_enable_32bittextures(bool setting = true) = ;
//设置采样(高是各向异性3、中是三线性2、低是双线性1(远景清晰度))
virtual void scene_set_texturefiltering(uint8_t option) = ;
//设置静态物体动画
virtual void scene_set_animationquality(uint8_t option) = ;
//设置全屏泛光效果
virtual void scene_set_postfilter_enable(bool flag) = ;
//设置人物实时阴影
virtual void scene_set_shadowtechnique(uint8_t flag) = ;
//显示地形网格切换
virtual void scene_show_girdswitch(int32_t zonesize) = ; //debugs
public:
//在某点增加一个粒子
virtual void debug_addparticle(
const char* name,
const vengine_math::base::threefloat_vector_t& position) = ;
virtual void debug_set_fakecamera(uint8_t type, float value) = ;
//显示/隐藏
virtual void debug_toggleshow_debugpanel() = ;
virtual void debug_toggleshow_boundingbox() = ; public:
//创建一个可渲染实体
virtual EntityNode* new_entityobject(EntityNode::type_enum type) = ;
//寻找和鼠标接触的实体
virtual EntityNode* find_hitfairy_object(int32_t x, int32_t y) = ; //UI显示模型相关
public:
//创建一个fake渲染对象
virtual void fakeobject_create(const char* name,
EntityNode* node,
EntityNode* parentnode,
const char* cameraname,
int32_t textuewidth,
int32_t textueheight,
const char* backgroundname) = ;
//销毁一个fake渲染对象
virtual void fakeobject_destroy(const char* name) = ;
//隐藏/显示fake渲染对象
virtual void fakeobject_show(const char* name,
bool visible,
float aspectratio) = ;
virtual bool fakeobject_setattach(EntityNode* node,
EntityNode* attachnode) = ; }; }; //namespace vengine_render #endif //VENGINE_RENDER_SYSTEM_H_
SIMPLE
天龙八部中的人物(阴影)、水面效果等
总结
渲染接口所提供的方法主要包括窗口的渲染以及场景对象的渲染,而窗口的渲染在这里借助了cegui提供的方法,场景渲染自然使用了ogre。以后有机会再与大家分享有关这些的知识,现在大家只需了解接口即可。下节比较重要,是vengine(微引擎)核心模块,会讲到客户端类的管理模式,希望大家不会错过。
MMORPG大型游戏设计与开发(客户端架构 part14 of vegine)的更多相关文章
- MMORPG大型游戏设计与开发(客户端架构 part8 of vegine)
脚本模块是游戏设计中争论比较多的话题,那是因为作为脚本本身所带来的利弊.其实这都无关紧要,取舍是人必须学会的一项技能,如果你不会取舍那么就让趋势给你一个满意的答复.自从魔兽世界以及传奇(世界)问世以来 ...
- MMORPG大型游戏设计与开发(概述)updated
1.定义 MMORPG,是英文Massive(或Massively)Multiplayer Online Role-PlayingGame的缩写,即大型多人在线角色扮演游戏. 2.技术与知识 在这系列 ...
- MMORPG大型游戏设计与开发(UI SYSTEM SHOW)
接下来一段时间,这些文件可能不再更新,期间我会学习和掌握一些前端知识.虽然我非常欣赏剑侠网络版叁和九阴真经的画面,但是那是一个庞大的游戏引擎,一般人是无法窥伺的,除非你是天才而且要拥有机器毫无中断的毅 ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)
核心这个词来的是多么的高深,可能我们也因为这个字眼望而却步,也就很难去掌握这部分的知识.之所以将核心放在最前面讲解,也可以看出它真的很重要,希望朋友们不会错过这个一直以来让大家不熟悉的知识,同我一起进 ...
- MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)
我们在玩游戏的时候,我们进入游戏后第一眼往往都是看到游戏世界中的场景,当然除了个别例外,因为那些游戏将游戏场景隐藏了起来,如文字游戏中的地点一样.既然我们接触了游戏世界的核心,那么作为核心的场景又包括 ...
- MMORPG大型游戏设计与开发(客户端架构 part12 of vegine)
在游戏中的交互过程中输入是一个必不可少的过程,比如登陆的时候需要用户输入用户名与密码,就算是单机游戏很多时候也要求用户输入一个用户名作为存档的依据.网络游戏中没有了输入,只用鼠标来交互是不切实际的,因 ...
- MMORPG大型游戏设计与开发(客户端架构 part2 of vgui)
这一节我将讲解vgui的基础系统部分,也是该库提供给外部使用的一些重要接口.作为UI部分比较重要的部分,该节有着至关重要的部分,如果没有看到上一节内容,请留意下面的连接.我们现在可以猜想一下在客户端U ...
- MMORPG大型游戏设计与开发(客户端架构 part16 of vegine)
由于近来比较忙碌和有些困倦的原因,所以关于这部分的文章没有及时更新,一句话:让朋友们久等了!今天所讲的是客户端vengine(微引擎)中最后一个部分,就像上节所说,这一部分的内容比较多.可能有些朋友看 ...
- MMORPG大型游戏设计与开发(客户端架构 part9 of vegine)
时间在人们的生活中是多么重要的东西,如果打乱了时间,不知道这个时间会成什么样子.在客户端中,自然也有时间模块,因为不同的时间可能会处理不同的事情,特别是在追求高度自由化的同时,时间也成为了一个很重要的 ...
- MMORPG大型游戏设计与开发(客户端架构)
首先为所有等待的朋友说一声歉意,实在让大家等的太久.客户端的设计本来就是一个大的工程,而且工作的关系,也没有太多时间在这方面做研究.不过在私下有空的时间,我还是继续着这方面的研究,很遗憾没有用期望的o ...
随机推荐
- LBS数据分析:使用地图展示统计数据——麻点图与麻数图
作为一个LBS的APP,都获得了用户经纬度,也都使用了友盟统计.google ana等等统计分析系统,不过没有地图展示功能,不能进行直观的展示. 友盟统计.google ana等系统是总体数据统计,无 ...
- Framework7 – 赞!功能齐全的 iOS7 App 前端框架
Framework7 是一个功能很全的 HTML 框架,用来构建 iOS7 应用程序. Framework7 允许您灵活搭建列表视图(表视图) .你可以让他们作为导航菜单,你可以在列表里面使用图标,输 ...
- [deviceone开发]-do_RichLabel的简单示例
一.简介 do_RichLabel支持html格式的文本内容,但是只支持部分标签,这个示例列出了一些支持的常用标签,android能支持的标签相对ios更少 二.效果图 三.相关下载 https:// ...
- Location对象、History对象
Location对象: Window对象的location属性引用的是Location对象,它表示窗口中当前显示的内容的URL,Document对象的location属性也引用Location对象,w ...
- css3中filter的各种特效
css3中的filter属性可以说是简单易用且强大,这些效果作用在图片上实现一些特效(也可以作用在vidio上,此处只讨论图片特效). 浏览器兼容性 目前各大浏览器对于css3的兼容已经非常好了,最新 ...
- 高清VGA编码器|上海视涛科技
VGA编码器(E200)简介 高清VGA编码器是上海视涛科技出品的高性能VGA编码产品.该VGA编码器是上海视涛科技完全自主研发,并适用于VGA信号的编码采集及网络传输的专用硬件设备.可兼容各厂家的N ...
- Web自动化测试 Selenium 3/3 https的配置
Https的信任问题处理 具体步骤如下(以demo为例) 1) ./ca.sh : 使用默认的服务器192.168.1.1的证书 ./ca.sh IP : 使用IP设置的证书 2) 以上运行后把 ge ...
- IOS圆头像
前言 随着腾讯QQ的普及,现在越来越多的社交类APP在显示好友头像时,都选择用圆形头像,效果如下(不包括黑底): 在ios开发中,大致有以下三种方案来实现圆形头像效果. 方案一:用Quartz2D绘制 ...
- Kotlin语法(基础)
一.基础语法: 1. 定义包名: 包名应该在源文件的最开头,包名不必和文件夹路径一致:源文件可以放在任意位置. package my.demo 2. 定义函数: fun sum(a: Int , b: ...
- 【代码笔记】iOS-读取一段文字
一,效果图. 二,工程图. 三,代码. RootViewController.m #import "RootViewController.h" @interface RootVie ...