From d427440dd0860ba880325bb0a11cb3d78bfdebcc Mon Sep 17 00:00:00 2001 From: fanghr <318388589@qq.com> Date: Wed, 20 Sep 2017 19:12:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=90=9E=E5=AE=9A=E4=BA=86app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Framework/doc/App development process.md | 8 + Framework/doc/framework_usr.md | 656 ----------------------- Framework/src/nefapp.h | 23 +- 3 files changed, 20 insertions(+), 667 deletions(-) create mode 100644 Framework/doc/App development process.md delete mode 100644 Framework/doc/framework_usr.md diff --git a/Framework/doc/App development process.md b/Framework/doc/App development process.md new file mode 100644 index 0000000..f3e76f8 --- /dev/null +++ b/Framework/doc/App development process.md @@ -0,0 +1,8 @@ +# nefapp开发流程 + +  一个典型的nefapp应具有以下几部分: +* 注册程序:用于app安装时向nef注册应用信息(包括应用名称、可执行文件路径、图标路径)并传送配置,同时设置应用运行时传递的参数列表,头文件为`nefapp.h` +* app核心:实现app主要功能的代码 +* 配置文件(可选):用于储存app配置 +* 图标(可选):用于nef launcher 展示 + diff --git a/Framework/doc/framework_usr.md b/Framework/doc/framework_usr.md deleted file mode 100644 index da5ae2d..0000000 --- a/Framework/doc/framework_usr.md +++ /dev/null @@ -1,656 +0,0 @@ -># Nef Framework Document (for users) -#### by huang825172 -### 2017.7.28 - -   -Nef是一个让 [混合现实][mr] 技术走进生活的项目,以 [开源][os] 的形式将混合现实技术的原理和实现方法从黑箱中拿出来,让更多人有机会接触这个似乎渴望不可及的领域。 - -   -Nef的软件部分基于 [Linux][linux] 操作系统开发,所以建议开发者在 [Ubuntu][ubuntu] 系统搭建开发环境(当然,喜欢使用 [虚拟机][vm] 也可以)。Nef提供了一套代码,我们称之为“ [框架][fm] ”,开发者可以通过添加自己的代码快速构建混合现实应用。 - ->## 结构 - -  Nef框架的所有内容都包含在Framework文件夹中。 - ->### 1.代码文件 - -  所有代码文件位于 Framework/src 文件夹中 - -+ headers.h -+ globals.h -+ settings.h -+ glsdlfuncs.h -+ datastructs.h -+ neffuncs.h -+ userfuncs.h -+ main.cpp -+ /sensor - ->#### headers.h - -  用于包括所有运行所需标准头文件以及框架头文件。 - ->#### globals.h - -  用于定义某些在框架代码中广泛使用的参量。 - ->#### settings.h - -  提供给开发者,用于设定某些系统参数。 - ->#### glsdlfuncs.h - -  包含了系统初始化以及运行 [Opengl][ogl] 、[SDL][sdl] 库所需 [函数][func] 。 - ->#### datastructs.h - -  包含了框架提供的封装类以及某些数据结构。 - ->#### neffuncs.h - -  包含了专门为系统设计的函数。 - ->#### userfuncs.h - -  提供给开发者,用于编写应用代码。 - ->#### main.cpp - -  主程序文件,包含了主循环等系统运行机制。 - ->#### /sensor - -  有关传感器的代码文件。 - ->### 2.其他文件/目录 - -+ /bin -+ /doc -+ /res -+ build.sh - ->#### /bin - -  存放可执行文件,包含编译出的可执行文件,默认为 /bin/Nef。 - ->#### /doc - -  存放框架文档。 - ->#### /res - -  存放资源文件。包含 /res/pic/ 存放图片资源,以及 /res/ttf/ 存放字体资源。 - ->#### build.sh - -  Linux Shell编译指令文件。 - ->## 函数 - -   -Nef应用开发过程就是对一系列框架内函数的调用过程。下面是对框架所提供部分函数的介绍。 -   -Nef使用的默认长度单位为 米(m) ,角度单位为 度(°) 。 - ->### 1.系统函数 - -   -Nef系统的运行是一个大循环。当用户打开应用之后,系统就以一定的规律调用系统函数,直到应用关闭。Nef的系统函数有如下几个: - - -+ onSetup() -+ onLoop() -+ onHUD() -+ onRender() -+ onExit() - -   -应用开始运行后,Nef首先初始化SDL库以及Opengl库,之后调用 onSetup() 函数。这个函数一般做用户的初始化工作,它只在最开始被调用且只被调用一次。 - -   -然后程序进入主循环,按照 onLoop() onHUD() onRender() 的顺序调用函数。onLoop()函数在每一次主循环的最开始被调用,一般用于放置数据处理的代码。接下来调用的 onHUD() 函数负责覆叠层图像的绘制工作,而最后的 onRender() 函数负责三维空间图像的绘制工作。 - -   -由于Nef被设计用于混合现实目的,为了利用 [双目立体视觉][bsv] 原理,图像通常需要分为左眼和右眼两部分渲染,*所以除非应用运行在强制单目渲染模式下, onHUD() 和 onRender() 函数在每次主循环中都会被调用两次,请注意放在其中的数据操作代码,避免数据的重复操作带来的错误。* -   ->用户应用代码的基础格式: - -```C++ - #ifndef USERFUNCS_H - #define USERFUNCS_H - - //Do some preparation - - void onSetup(){ - //Do something - } - - void onLoop(){ - //Do something - } - - void onHUD(){ - //Do something - } - - void onRender(){ - //Do something - } - - void onExit(){ - //Do something - } - - #endif -``` ->### 2.对象操作函数 - -  这类函数一般封装在类中,提供对对象的操作/设置能力。Nef提供的可操作对象有以下几种: - -+ nefFont - + font - + .Open() - + .Set() - + .Free() -+ nefTexture - + texture - + texMinX texMinY texMaxX texMaxY - + width height - + .RenderText() - + .LoadImage() - + .setAmbient() - + .setDiffuse() - + .setSpecular() - + .setEmission() - + .setShininess() - + .Blind() - + .unBlind() - + .Free() -+ nefLight - + .setID() - + .setPosition() - + .setAmbient() - + .setDiffuse() - + .setSpecular() - + .turnOn() - + .turnOff() -+ nefBrush - + .setColor() - + .beginPoints() - + .beginLines() - + .beginPolygon() - + .addNormal() - + .addPoint() - + .end() - + .HUD_drawText() - + .HUD_drawImage() -+ nefAudio - + .Open() - + .setVolume() - + .Play() - + .Pause() - + .Resume() - + .Free() - ->#### nefFont - -  用于存储并操作一种字体格式的对象。 - ->##### font -```C++ -TTF_Font *font; -``` -  用于操作字体的指针。 - ->##### .Open() - -```C++ -void Open(const char *file, int size); -``` -  用于载入字体。 - -+ 第一个参数 file 指定要打开的 ttf 文件路径。 -+ 第二个参数 size 指定字体渲染字号。 - ->##### .Set() - -```C++ -void Set(int style); -``` -  用于设置字体效果。 - -+ 参数 style 指定字体效果。 - -  字体效果有以下几种: -+ TTF_STYLE_BOLD -+ TTF_STYLE_ITALIC -+ TTF_STYLE_UNDERLINE -+ TTF_STYLE_STRIKETHROUGH -+ TTF_STYLE_NORMAL - -  效果可以通过 “ | ” 算符叠加使用。 - ->##### .Free() - -```C++ -void Free(); -``` -  用于释放字体占用内存。 - ->#### nefTexture - -  用于存储并操作一种纹理的对象。 - ->##### texture -```C++ -GLuint *texture; -``` -  用于操作纹理的指针。 - ->##### texMinX texMinY texMaxX texMaxY -```C++ -GLfloat texMinX, texMinY; -GLfloat texMaxX, texMaxY; -``` -  专门用于绘制文字的贴图坐标参数。 - ->##### width height -```C++ -int width, height; -``` -  保存了纹理的尺寸数据。 - ->##### .RenderText() - -```C++ -void RenderText(TTF_Font *font, const char *text, SDL_Color color); -``` -  用于将字体和文字渲染为纹理。 - -+ 第一个参数 font 指定使用的字体指针。 -+ 第二个参数 text 指定渲染的文本。 -+ 第三个参数 color 指定渲染所用颜色 - -  *color 参数以 {r, g, b} 格式给出。* - ->##### .LoadImage() - -```C++ -int LoadImage(const char *file) -``` -  用于从外部载入一个图片纹理。 - -+ 参数 file 指定图片文件路径。 - ->##### .setAmbient() - -```C++ -void setAmbient(GLfloat r, GLfloat g, GLfloat b, GLfloat a); -``` - -  用于设置材质环境光属性。 - -+ 参数 r,g,b,a 代表颜色设置 - ->##### .setDiffuse() - -```C++ -void setDiffuse(GLfloat r, GLfloat g, GLfloat b, GLfloat a); -``` - -  用于设置材质漫射光属性。 - -+ 参数 r,g,b,a 代表颜色设置 - ->##### .setSpecular() - -```C++ -void setSpecular(GLfloat r, GLfloat g, GLfloat b, GLfloat a); -``` - -  用于设置材质反射光属性。 - -+ 参数 r,g,b,a 代表颜色设置 - ->##### .setEmission() - -```C++ -void setEmission(GLfloat r, GLfloat g, GLfloat b, GLfloat a); -``` - -  用于设置材质自发光(自身颜色)属性。 - -+ 参数 r,g,b,a 代表颜色设置 - ->##### .setShininess() - -```C++ -void setShininess(GLfloat shininess); -``` - -  用于设置材质镜面指数属性。 - -+ 参数 shininess 代表镜面程度。 - -  *以上有关材质光照属性的设置项目详情参阅[Opengl光照][ogll]*。 - ->##### .Blind() - -```C++ -void Blind(); -``` - -  用于绑定当前材质对象,直到解除绑定或者绑定另一个材质对象。 - ->##### .unBlind() - -```C++ -void unBlind(); -``` - -  用于解除绑定当前材质对象。 - ->##### .Free() - -```C++ -void Free(); -``` - -  用于释放当前材质对象所占用的内存。 - ->#### nefLight - -  用于操作一个灯光的对象。 - ->##### .setID() - -```C++ -void setID(GLenum LID); -``` - -  用于设置灯光的编号,编号取值为 nefLight_0 ~ 7。 - -+ 参数 LID 代表灯光ID。 - ->##### .setPosition() - -```C++ -void setPosition(GLfloat x, GLfloat y, GLfloat z, GLfloat w); -``` - -  用于设置灯光的位置。 - -+ 参数 x,y,z 代表灯光坐标。 - ->##### .setAmbient() - -```C++ -void setAmbient(GLfloat r, GLfloat g, GLfloat b, GLfloat a); -``` - -  用于设置灯光环境光属性。 - -+ 参数 r,g,b,a 代表颜色设置 - ->##### .setDiffuse() - -```C++ -void setDiffuse(GLfloat r, GLfloat g, GLfloat b, GLfloat a); -``` - -  用于设置灯光漫射光属性。 - -+ 参数 r,g,b,a 代表颜色设置 - ->##### .setSpecular() - -```C++ -void setSpecular(GLfloat r, GLfloat g, GLfloat b, GLfloat a); -``` - -  用于设置灯光反射光属性。 - -+ 参数 r,g,b,a 代表颜色设置 - ->##### .turnOn() - -```C++ -void turnOn(); -``` - -  用于打开此灯光。 - ->##### .turnOff() - -```C++ -void turnOff(); -``` - -  用于关闭此灯光。 - ->#### nefBrush() - -  用于图像绘制的对象。 - ->##### .setColor() - -```C++ -void setColor(GLfloat r, GLfloat g, GLfloat b); -``` - -  用于设置笔刷的颜色。 - -+ 参数 r,g,b 代表颜色设置。 - ->##### .beginPoints() - -```C++ -void beginPoints(); -``` - -  用于开始绘制点。 - ->##### .beginLines() - -```C++ -void beginLines(); -``` - -  用于开始绘制线。 - ->##### .beginPolygon() - -```C++ -void beginPolygon(); -``` - -  用于开始绘制多边形。 - ->##### .addNormal() - -```C++ -void addNormal(GLfloat nor_x, GLfloat nor_y, GLfloat nor_z); -``` - -  用于向绘制流程中添加法线向量。 - -+ 参数 nor_x,nor_y,nor_z 代表法线向量。 - ->##### .addPoint() - -```C++ -void addPoint(GLfloat pos_x, GLfloat pos_y, GLfloat pos_z, GLfloat u, GLfloat v); -``` - -  用于向绘制流程中添加点。 - -+ 参数 pos_x,pos_y,pos_z 代表点的坐标。 -+ 参数 u,v 代表点的纹理坐标。 - ->##### .end() - -```C++ -void end(); -``` - -  用于结束绘制流程。 - ->##### .HUD_drawText() - -```C++ -void HUD_drawText(nefTexture texture, int x, int y); -``` - -  用于在覆叠层绘制文字。 - -+ 参数 texture 代表渲染了文字的纹理指针。 -+ 参数 x,y 代表类文字绘制的起始位置。 - ->##### .HUD_drawImage() - -```C++ -void HUD_drawImage(nefTexture texture, int x, int y, int width, int height); -``` - -  用于在覆叠层绘制图像。 - -+ 参数 texture 代表载入了图像的纹理指针。 -+ 参数 x,y 代表类文字绘制的起始位置。 -+ 参数 width,height 代表图像绘制区域的宽和高。 - ->#### nefAudio - -  用于存储并播放WAV格式音频的对象。 - ->##### .Open() -```C++ -void Open(const char *file){ -``` -  用于打开WAV音频文件。 - -+ 参数 file 代表音频文件路径。 - ->##### .setVolume() - -```C++ -void Mix_VolumeMusic(Vol); -``` -  用于设置音量。 - -+ 参数 Vol 指定音量大小,从 0 到 nefMaxVolume *(128)*。 - ->##### .Play() - -```C++ -void Play(); -``` -  用于开始播放音频。 - ->##### .Pause() - -```C++ -void Pause(); -``` -  用于暂停播放音频。 - ->##### .Resume() - -```C++ -void Resume(); -``` -  用于继续播放音频。 - ->##### .Rewind() - -```C++ -void Rewind(); -``` -  用于将播放指针退回音频开头并暂停播放。 - ->##### .Free() - -```C++ -void Free(); -``` -  用于释放音频所占用的内存。 - - ->## 其他可用函数/参量 - -   -Nef框架内还有一些能够被用户所调用的独立函数,以及用于参与计算或配置系统的状态参量,下面将进行介绍。 - ->### 1.独立函数 - -+ Delay_ms() -+ getFps() - ->#### Delay_ms() - -```C++ -void Delay_ms(int time); -``` - -  用于进行程序内的延时。 - -+ 参数 time 代表延时毫秒数。 - ->#### getFps() - -```C++ -int getFps(); -``` - -  用于获取当前系统渲染帧率。 - -+ 返回值代表帧率。 - ->### 2.状态参量 - -+ Neffps -+ TITLE -+ FOV -+ REN_NEAR REN_FAR -+ DOUBLE_EYES -+ LOCK_FRAME -+ DISPLAY_TO_TERMINAL - ->#### Neffps - -  储存了当前系统渲染帧率,每次主循环被更新。 - ->#### TITLE - -  位于 settings.h ,储存窗口标题字符串。 - ->#### FOV - -  位于 settings.h ,储存渲染纵向视场角。 - ->#### REN_NEAR REN_FAR - -  位于 settings.h ,储存渲染最近距离与最远距离,距离之外的场景将被裁剪。 - ->#### DOUBLE_EYES - -  位于 settings.h ,储存双目距离,设置为 0 则为强制单目渲染。 - ->#### LOCK_FRAME - -  位于 settings.h ,储存锁帧帧率,设置为 0 则为不使用锁帧。 - ->#### DISPLAY_TO_TERMINAL - -  位于 settings.h ,设定是否将帧率数据打印到命令行。 - -[mr]:https://baike.baidu.com/item/%E6%B7%B7%E5%90%88%E7%8E%B0%E5%AE%9E/9991750 -[os]:https://baike.baidu.com/item/%E5%BC%80%E6%94%BE%E6%BA%90%E4%BB%A3%E7%A0%81/114160?fromtitle=%E5%BC%80%E6%BA%90&fromid=20720669#viewPageContent -[linux]:https://baike.baidu.com/item/linux -[ubuntu]:https://baike.baidu.com/item/ubuntu -[vm]:https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E6%9C%BA -[fm]:https://baike.baidu.com/item/%E6%A1%86%E6%9E%B6/1212667 -[func]:https://baike.baidu.com/item/%E5%87%BD%E6%95%B0/18686609#viewPageContent -[sdl]:https://baike.baidu.com/item/SDL/224181 -[ogl]:https://baike.baidu.com/item/OpenGL -[bsv]:https://baike.baidu.com/item/%E5%8F%8C%E7%9B%AE%E7%AB%8B%E4%BD%93%E8%A7%86%E8%A7%89 -[ogll]:http://www.cnblogs.com/Anita9002/p/4402482.html \ No newline at end of file diff --git a/Framework/src/nefapp.h b/Framework/src/nefapp.h index c29d053..6ffe0e1 100644 --- a/Framework/src/nefapp.h +++ b/Framework/src/nefapp.h @@ -1,24 +1,25 @@ #ifndef NEFAPP_H -#define NEF_APP_H +#define NEFAPP_H namespace nef{ class app{ private: - void *arg; - struct{ - uid_t uid; - gid_t gid; - }app_info; + string path; + string app_name; + string icon; + vector*arg; public: + app(string app_name,string path); + app(string app_name,string path,string icon); app(); ~app(); - void regist_app(string name); + void regist_app(string app_name,string path); + void regist_app(string app_name,string path,string icon); + void set_icon(string icon); + + void set_arg(vector*arg); void delete_app(); - - void set_arg(void *arg); - void run_app(void (*app_core)(void *arg)); - void stop_app(); }; } -- Gitee