kvs(Kyoto Visualization System)的初次使用
笔者在做毕设的时候使用到了Kyoto Visualization System(以下简称kvs)的可视化工具。在初步使用的过程中,笔者发现网上相关的资料很少,因此写了本篇文档,希望能够帮助后来者少走弯路,尽快上手。
kvs的github地址先贴出来:kvs github
下面就按照流程逐步介绍kvs的安装使用。
笔者默认读者有一个ubuntu系统的电脑,不管是不是虚拟机。
安装前的准备
安装kvs之前我们要安装kvs的必要环境例如opengl和glut
- 安装opengl基本库:
sudo apt-get install build-essential
- 安装 OpenGL Library:
sudo apt-get install libgl1-mesa-dev
- 安装OpenGL Utilities
sudo apt-get install libglu1-mesa-dev
- 安装OpenGL Utility Toolkit
sudo apt-get install freeglut3-dev
下载安装kvs
使用下列命令下载kvs:
git clone https://github.com/naohisas/KVS.git
假设我们把下载后的压缩包解压到名为KVS的文件夹里
- 我们需要修改一个文件
找到KVS/Source/Core/OpenGL下的Texture.h文件,加入头文件<stdlib.h>,保存并关闭
- 打开命令行,使用如下命令在环境变量中加入kvs编译器
//这个地方填你的自定义路径,安装之后会在这个地方生成文件夹。我是解压到KVS,安装在了kvs,注意区别
export KVS_DIR=~/Downloads/kvs
//加入环境变量
export PATH=$KVS_DIR/bin:$PATH
上述命令为临时加入环境变量,当前bash关闭后就会无效。所以可以去path文件中进行修改,以后不需要重新添加了。
- 编译与安装
进入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)的初次使用相关推荐
- Graph Visualization and Navigation in Information Visualization: A Survey 译文
图像可视化和信息可视化导航:文献综述 Ivan Herman, Member, IEEE Computer Society, Guy MelancËon, and M. Scott Marshall ...
- ### Paper about Event Detection
Paper about Event Detection. #@author: gr #@date: 2014-03-15 #@email: forgerui@gmail.com 看一些相关的论文. 1 ...
- 三维地形可视化开源项目TerraVision
今天不经意看到,似乎很强大,但好像2002年后没更新过了,记录一下不定后边用得上. 网站上的资源: http://www.ai.sri.com/digitalearth/index.shtml htt ...
- 开放源代码GIS资源集锦
转自 http://www.opensourcegis.org/ ,供不能访问该网址的朋友参考 ---------------------------------------------------- ...
- 深度解析,教你如何打造自动驾驶的数据闭环
最近自动驾驶和数据闭环结合在一起,原因是自动驾驶工程已经被认可是一个解决数据分布"长尾问题"的任务,时而出现的corner case(极端情况)是对数据驱动的算法模型进行升级的来源 ...
- 2015年《大数据》高被引论文Top10文章No.2——大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(下)...
2015年<大数据>高被引论文Top10文章展示 [编者按]本刊将把2015年<大数据>高被引论文Top10的文章陆续发布,欢迎大家关注!本文为高被引Top10论文的No.2, ...
- 2015年《大数据》高被引论文Top10文章No.2——大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(上)...
2015年<大数据>高被引论文Top10文章展示 [编者按]本刊将把2015年<大数据>高被引论文Top10的文章陆续发布,欢迎大家关注!本文为高被引Top10论文的No.2, ...
- 【2015年第4期】大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(下)...
大数据时代的数据挖掘 -- 从应用的角度看大数据挖掘(下) 李 涛1,2,曾春秋1,2,周武柏1,2,周绮凤3,郑 理1,2 1. 南京邮电大学计算机学院 南京 210023:2. 美国佛罗里达国际大 ...
- 【2015年第4期】大数据时代的数据挖掘 —— 从应用的角度看大数据挖掘(上)...
大数据时代的数据挖掘 -- 从应用的角度看大数据挖掘 李 涛1,2,曾春秋1,2,周武柏1,2,周绮凤3,郑 理1,2 1. 南京邮电大学计算机学院 南京 210023:2. 美国佛罗里达国际大学 迈 ...
最新文章
- 遗传:微生物组数据分析方法与应用
- https原理:证书传递、验证和数据加密、解密过程解析 (转)
- node升级命令_Laravel Mix 4升级说明与“排坑儿”指南
- CentOS7上搭建Hadoop集群(入门级)
- matlab的7.3版本是什么_王者荣耀:玩不好元歌的3大原因,无论什么版本,元歌起码T1.5_电竞...
- flowable 表结构大全
- python 添加图片_python3 tkinter添加图片和文本
- 计算机出现假桌面怎么解决办法,Win10系统桌面频繁假死的解决方法
- Spring cloud实现服务注册及发现
- 1.C#.Net面向对象基础知识点
- 软件GUI测试中的关注点
- 总结几个等价无穷小相关的关系运算
- 微信服务号使用微信支付
- Ipv6地址与Ipv6 Cidr合法性校验
- 云队友丨带不好人,就只能自己干到死
- MATLAB图中图绘制(局部放大图)
- kf.qq.com.lol.html,英雄联盟安全信用星级,英雄联盟封号查询中心
- php面试题狼兔,面试题总结 - 疯狂的兔子的个人空间 - OSCHINA - 中文开源技术交流社区...
- 数字图像处理(5)- 图像恢复
- 豆瓣 vs 知乎 vs 简书