Overview

Model viewer is another application we provided for large display. It is designed for viewing 3D models in .obj format. It also utilizes the output of the calibration phase, makes the necessary geometric and photometric correction and shows the resulted model on the multi-projector display.

Algorithms

The geometric and photometric correction algorithms used in ModelViewer is similar to those used in ImageViewer. The major difference here is that the texture source used for geometric and photometric correction doesn't come from any static image. Instead, we need to render the .obj model first into the back buffer of the graphic card and transfer it back to the texture buffer as texture source. Then we apply the necessary geometric and photometric correction the same as what we did in ImageViewer. So it is critical to have a graphic card with decent performance which supports double buffering and texture transfer from FrameBuffer to texture memory. Luckily, most relatively new graphics cards (on market since 2005) have no problem with this.

    The other thing need to pay attention to is that since this is a distributed system, the rendering PCs may have different graphics card (so it's better if you could use the same cards on all the PC, but it's still OK if you couldn't) and different speed in executing the texture copying, geometric and photometric correction. This will cause the display system visually unsynchronized: some projectors with better graphics cards may refresh faster. The effect is severe if user starts some animation on the rendered model. In order to deal with this, we add another synchronizer to the system. All the rendering PCs will send a signal to the synchronizer after finishing the texture copying, geometric and photometric correction and before actually showing the frame on projectors. If the synchronizer receives the signals from all the rendering PCs, it will send back a message to all the rendering PCs to indicate that they can swap the buffer and refresh the frame. Since the swap is a super-fast operation, refreshing of the display system on different render PCs will be well synchronized. You can refer to the code for more details.

Download

Please go to the downloadpage.

How to use the code

We only support the multi-projector multi-PC configuration for this ModelViewer. Below are the step-by-step instructions of how to use the code:

Multi-Projector Multi-PC Configuration:

  1. Download the corresponding binary package named ModelClient (control client running on master PC), ModelServer (render server running on render PC) and ModelSync (Synchronizer running on another PC, which can also be the master PC) from the above "Download" Section;
  2. Connect the PCs and projectors as showed in Figure 3 except not necessary to connect the camera;
  3. Copy the calibration result (such as reslut2x2.txt), alpha masks (Px.bmp) and .obj files to the working directory of all the render servers;
  4. Run the following program on all the rendering PC from command line with:
    ModelServer.exe
  5. Modify the configuration file named Client4.cfg according to your actual configuration (IP address, port, gamma, etc);
  6. Run the synchronizer on the master PC from command line with:
    ModelSync.exe Client4.cfg
  7. Run the control client program on the master PC from command line with:
    ModelClient.exe cube.obj Client4.cfg
  8. If everything goes well, you will see the model named cube.obj showing on the large display correctly;
  9. You can use mouse and keyboard to zoom in/zoom out, change the position and so on, please see the command line help of the program.

Multi-Projector Based Display Code ---- ModelViewer的更多相关文章

  1. Multi-Projector Based Display Code ------- Home

    Overview This project provides you with the tools and techniques you need to create your own large-a ...

  2. Multi-Projector Based Display Code ---- ImageViewer

    Overview Image viewer is a typical application for large display. It makes use of the high-resolutio ...

  3. Multi-Projector Based Display Code ---- FAQ

    Frequently Asked Question How do I know that my camera has a proper lens? Answer: If you can see exa ...

  4. Multi-Projector Based Display Code ---- Calibration

    Overview As mentioned previously, there are two main steps in generating a seamless display. The fir ...

  5. Multi-Projector Based Display Code ---- Download

    The code providing are for your reference. Please download the code according to your hareware confi ...

  6. Peer Code Reviews Made Easy with Eclipse Plug-In

    欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...

  7. Code Pages

    https://docs.microsoft.com/en-us/windows/desktop/intl/code-pages Most applications written today han ...

  8. 设备管理 USB ID

    发现个USB ID站点,对于做设备管理识别的小伙伴特别实用 http://www.linux-usb.org/usb.ids 附录: # # List of USB ID's # # Maintain ...

  9. Oracle Database 11g express edition

    commands : show sys connect sys as sysdba or connect system as sysdba logout or disc clear screen or ...

随机推荐

  1. Pycharm新建模板默认添加作者时间等信息

    在pycharm使用过程中,对于每次新建文件的shebang行和关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便. 方法如下: 1.打开pycharm,选择File-Settings 2. ...

  2. git知识总结-1.git基础之基本术语

    1.前言 git是一种分布式版本管理工具,本文主要是通过阅读博客中几篇讲述git的优秀文章,并对文章进行整理.提炼总结得出一份git的说明文档. 本文档介绍了git的基本原理及常用操作,目标是通过阅读 ...

  3. aiohttp使用队列

    获取百度的搜索结果,然后把百度的长链接,获取到真实的url import time import aiofiles import aiohttp import asyncio from lxml im ...

  4. Script error.解决方法

    1. 添加 crossorigin="anonymous" 到script标签 <script src="https://xxx.com/xxx.js" ...

  5. C语言学习及应用笔记之六:C语言extern关键字及其使用

    在C语言中,修饰符extern用在变量或者函数的声明前,用来以标识变量或者函数的定义在别的文件中,提示编译器遇到此变量或者函数时,在其它文件中寻找其定义.extern关键字的用法有几种,我们下面对其进 ...

  6. 命令制作Mac系统U盘启动

    命令 sudo /Applications/Install\ macOS\ Mojave.app/Contents/Resources/createinstallmedia --volume /Vol ...

  7. SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介

    本文介绍SQL的基本查询语句 (1) select... from  * 表示全部, 选择的东西还可以进行简单的运算, 可以列别名 select * from student; -sage from ...

  8. 在Windows环境下搭建Nginx文件服务器(简单实用版)

    为了解决项目组内容应用,打算把本地的e:tools目录共享出来,具体操作步骤如下1.下载安装包:http://nginx.org/download/nginx-1.9.15.zip2.解压缩3.修改配 ...

  9. Postgresql查询出换行符和回车符:

    1.有时候,业务因为回车和换行出现的错误,第一步,首先要查询出回车符和换行符那一条数据: -- 使用chr()和chr()进行查询 SELECT * )||)||'%'; -- 其实查询chr()和c ...

  10. sklearn交叉验证3-【老鱼学sklearn】

    在上一个博文中,我们用learning_curve函数来确定应该拥有多少的训练集能够达到效果,就像一个人进行学习时需要做多少题目就能拥有较好的考试成绩了. 本次我们来看下如何调整学习中的参数,类似一个 ...