笔者在做毕设的时候使用到了Kyoto Visualization System(以下简称kvs)的可视化工具。在初步使用的过程中,笔者发现网上相关的资料很少,因此写了本篇文档,希望能够帮助后来者少走弯路,尽快上手。
kvs的github地址先贴出来:kvs github
下面就按照流程逐步介绍kvs的安装使用。
笔者默认读者有一个ubuntu系统的电脑,不管是不是虚拟机。

安装前的准备

安装kvs之前我们要安装kvs的必要环境例如opengl和glut

  1. 安装opengl基本库:
sudo apt-get install build-essential
  1. 安装 OpenGL Library:
sudo apt-get install libgl1-mesa-dev
  1. 安装OpenGL Utilities
sudo apt-get install libglu1-mesa-dev
  1. 安装OpenGL Utility Toolkit
sudo apt-get install freeglut3-dev

下载安装kvs

使用下列命令下载kvs:

git clone https://github.com/naohisas/KVS.git

假设我们把下载后的压缩包解压到名为KVS的文件夹里

  1. 我们需要修改一个文件
    找到KVS/Source/Core/OpenGL下的Texture.h文件,加入头文件<stdlib.h>,保存并关闭
  2. 打开命令行,使用如下命令在环境变量中加入kvs编译器
//这个地方填你的自定义路径,安装之后会在这个地方生成文件夹。我是解压到KVS,安装在了kvs,注意区别
export KVS_DIR=~/Downloads/kvs
//加入环境变量
export PATH=$KVS_DIR/bin:$PATH

上述命令为临时加入环境变量,当前bash关闭后就会无效。所以可以去path文件中进行修改,以后不需要重新添加了。

  1. 编译与安装
    进入KVS文件夹
    输入如下指令
make
make install

至此安装就完成了。

kvs的使用

Example的使用

我们注意到KVS下有一个Example文件夹,这里放着作者给我们准备的例子。很显然这些例子是我们了解kvs的最直接方便的途径。下面我们就要使用这些例子。
进入Example文件夹,解释kvsmake.py文件

python3 kvsmake.py

这样,我们对所有例子都编译了一遍。
下面我以其中一个示例代码演示如何使用。

cd ./Visualization/RayCastingRenderer
./RayCastingRenderer

通过执行可执行文件RayCastingRenderer,我们可以得到渲染结果:

kvs data的使用

作者为我们准备了大量的数据进行实验,下面我们编写自己的程序来渲染已有的数据。
kvs data地址:kvs.data
我们将使用其中的lobster.fld进行渲染。
新创建一个文件夹,我命名为test,并创建一个main.cpp用来写代码。

mkdir test
cd test
touch main.cpp

在main.cpp中写入如下代码

#include <kvs/glut/Application>
#include <kvs/glut/Screen>
#include <kvs/StructuredVolumeObject>
#include <kvs/StructuredVolumeImporter>
#include <kvs/RayCastingRenderer>int main( int argc, char** argv )
{kvs::glut::Application app( argc, argv );kvs::glut::Screen screen( &app );screen.show();kvs::StructuredVolumeObject* volume = new kvs::StructuredVolumeImporter( argv[1] );kvs::TransferFunction tfunc( 256 )kvs::RayCastingRenderer* renderer = new kvs::RayCastingRenderer();renderer->setTransferFunction( tfunc );renderer->enableLODControl();screen.registerObject( volume, renderer );return app.run();
}

在该目录下进行编译

kvsmake -G
kvsmake

生成的文件中有以该目录命名的可执行文件,执行该文件。

./test [参数1|此处填入你的目标数据的位置]

渲染图如下:

使用raw文件创建kvs对象并渲染

通过学习我们得知,并不是所有数据kvs都能读取的。比如上节中的fld文件才是kvs支持的文件类型。所以当我们拿到一组数据时,我们需要对其进行转换成kvs支持的数据对象(StructuredVolumeObject)才行。
raw文件来源:Open Scientific Visualization Datasets
下面演示如何渲染Marschner.raw文件
首先我们要读取raw文件中的数据并将其存在数组中,然后进行char到unsigned char的转换,并使用数据进行创建kvs的ValueArray类

//创建读文件流
std::ifstream in;
in.open("./marschner.raw",std::ios::binary);//得到文件字节数
int length;
in.seekg(0,std::ios::end);
length = in.tellg();
in.seekg(0,std::ios::beg);//读数据
char* temp = new char[length + 1];
in.read(temp,length);
in.close();//char转为unsigned char
std::vector<unsigned char>vec;
for(int i = 0;i < length;i ++)
{vec.push_back((unsigned char)temp[i]);
}
delete temp;//用std::vector创建kvs::ValueArray
kvs::ValueArray<kvs::UInt8> value(vec);

下面是创建StructuredVolumeObject的代码

const size_t dimx = 3;
const size_t dimy = 3;
const size_t dimz = 3;const size_t veclen = 1;kvs::StructuredVolumeObject* CreateStructuredVolumeObject()
{kvs::StructuredVolumeObject* object = new kvs::StructuredVolumeObject();object->setGridType( kvs::StructuredVolumeObject::Uniform );object->setVeclen( veclen );object->setResolution( kvs::Vector3ui( dimx, dimy, dimz ) );object->setValues( kvs::AnyValueArray( value ) );return object;
}

最后在main中将其注册到screen上

int main( int argc, char** argv )
{kvs::glut::Application app( argc, argv );kvs::glut::Screen screen( &app );screen.show();kvs::StructuredVolumeObject* volume = CreateStructuredVolumeObject();kvs::TransferFunction tfunc( 256 )kvs::RayCastingRenderer* renderer = new kvs::RayCastingRenderer();renderer->setTransferFunction( tfunc );renderer->enableLODControl();screen.setTitle( "Rendering Volume Object" );screen.registerObject( volume, renderer );return app.run();
}

仍然使用编译代码

kvsmake -G
kvsmake

渲染结果:

附录

下面我给出kvs的官方文档,其中对kvs有着非常全面的介绍。相信会对大家有所帮助。
kvs的取得、安装、编译
kvs编程
kvs全文档

kvs(Kyoto Visualization System)的初次使用相关推荐

  1. Graph Visualization and Navigation in Information Visualization: A Survey 译文

    图像可视化和信息可视化导航:文献综述 Ivan Herman, Member, IEEE Computer Society, Guy MelancËon, and M. Scott Marshall ...

  2. ### Paper about Event Detection

    Paper about Event Detection. #@author: gr #@date: 2014-03-15 #@email: forgerui@gmail.com 看一些相关的论文. 1 ...

  3. 三维地形可视化开源项目TerraVision

    今天不经意看到,似乎很强大,但好像2002年后没更新过了,记录一下不定后边用得上. 网站上的资源: http://www.ai.sri.com/digitalearth/index.shtml htt ...

  4. 开放源代码GIS资源集锦

    转自 http://www.opensourcegis.org/ ,供不能访问该网址的朋友参考 ---------------------------------------------------- ...

  5. 深度解析,教你如何打造自动驾驶的数据闭环

    最近自动驾驶和数据闭环结合在一起,原因是自动驾驶工程已经被认可是一个解决数据分布"长尾问题"的任务,时而出现的corner case(极端情况)是对数据驱动的算法模型进行升级的来源 ...

  6. 2015年《大数据》高被引论文Top10文章No.2——大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(下)...

    2015年<大数据>高被引论文Top10文章展示 [编者按]本刊将把2015年<大数据>高被引论文Top10的文章陆续发布,欢迎大家关注!本文为高被引Top10论文的No.2, ...

  7. 2015年《大数据》高被引论文Top10文章No.2——大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(上)...

    2015年<大数据>高被引论文Top10文章展示 [编者按]本刊将把2015年<大数据>高被引论文Top10的文章陆续发布,欢迎大家关注!本文为高被引Top10论文的No.2, ...

  8. 【2015年第4期】大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(下)...

    大数据时代的数据挖掘 -- 从应用的角度看大数据挖掘(下) 李 涛1,2,曾春秋1,2,周武柏1,2,周绮凤3,郑 理1,2 1. 南京邮电大学计算机学院 南京 210023:2. 美国佛罗里达国际大 ...

  9. 【2015年第4期】大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(上)...

    大数据时代的数据挖掘 -- 从应用的角度看大数据挖掘 李 涛1,2,曾春秋1,2,周武柏1,2,周绮凤3,郑 理1,2 1. 南京邮电大学计算机学院 南京 210023:2. 美国佛罗里达国际大学 迈 ...

最新文章

  1. 遗传:微生物组数据分析方法与应用
  2. https原理:证书传递、验证和数据加密、解密过程解析 (转)
  3. node升级命令_Laravel Mix 4升级说明与“排坑儿”指南
  4. CentOS7上搭建Hadoop集群(入门级)
  5. matlab的7.3版本是什么_王者荣耀:玩不好元歌的3大原因,无论什么版本,元歌起码T1.5_电竞...
  6. flowable 表结构大全
  7. python 添加图片_python3 tkinter添加图片和文本
  8. 计算机出现假桌面怎么解决办法,Win10系统桌面频繁假死的解决方法
  9. Spring cloud实现服务注册及发现
  10. 1.C#.Net面向对象基础知识点
  11. 软件GUI测试中的关注点
  12. 总结几个等价无穷小相关的关系运算
  13. 微信服务号使用微信支付
  14. Ipv6地址与Ipv6 Cidr合法性校验
  15. 云队友丨带不好人,就只能自己干到死
  16. MATLAB图中图绘制(局部放大图)
  17. kf.qq.com.lol.html,英雄联盟安全信用星级,英雄联盟封号查询中心
  18. php面试题狼兔,面试题总结 - 疯狂的兔子的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. 数字图像处理(5)- 图像恢复
  20. 豆瓣 vs 知乎 vs 简书

热门文章

  1. 【C语言学习笔记】SWAP函数详解
  2. Sql SqlServer 脏读、 不可重复读和幻读
  3. css字太多了省略_列表中文字太多 溢出使用省略号css方法
  4. 骨传导蓝牙耳机哪个好?骨传导蓝牙耳机品牌推荐
  5. 【人工智能】关于人类大脑模型的一些数学公式
  6. 连接字符串的几种方式
  7. 怎么观看twitchtv_构建一个TwitchTV Status App
  8. PHP redis 全部命令
  9. Win7/Win10双系统安装方法图文教程
  10. 基于视频的电熔镁炉工况识别系统→6.电熔镁炉服务器设计