2009年2月16日

1,完成near clip plane 在volume内的体绘制Advanced Raycasting for Virtual Endoscopy on Consumer Graphics Hardware

 实现了基于min-max octree的体绘制,实现了基于raycasting的等值面绘制

2,实现了x y z的volume clip plane

3,增加了light widget

4, 修改了之前的 phong shading

 

这样的我的体绘制引擎目前支持以下功能:

1,基于八叉树raycasting的体绘制,等值面绘制

2,基于八叉树的纹理体绘制

3,好质量的预积分体绘制

4,基于marching cube的等值面算法,

5,等值面的Exponential Shadow Maps算法、

6,等值面的depth peeling

7,x y z方向的裁剪面

8, 目前正在的实现有image-space acceraltion

 

未完成的:

1,实时的梯度计算,有错误

2,即将完成的toon shading, unsharp masking,tone mapping等

3,voluem shadow

4,实现gigatbyte raycasting

 

计划忙完4月1号的ieee vis,把该项目开源。

posted @ 2009-02-16 15:33 cloudseawang 阅读(67) | 评论 (0)编辑

2009年1月17日

自从12月初放弃eurovis的submission后,就一直在写程序。目前完成的工作如下:

1,加速的ray casting

2, shadow mapping && csm && esm

3, defered shading

4, depth peeling for multi-layer isosurface

5, preintegrated volume rendering && accelerated algorithm

没有完成的工作:

利用depth peeling的混合体会制

发现的问题

preintegrated volume rendering会影响渲染结果的对比度

改进的sub-range intergration会加速,但对应的lighting preintegration效果并不好

问题可能是他的linear weight function

 

年前必须完成的工作

1,direct isosurface rendeirng,应该很容易

2, mixed polygon isosurface rendeirng with raycasting volume rendering

3, screen-space ambient occlusion

4, 整理代码,开发对应的qt界面

posted @ 2009-01-17 16:59 cloudseawang 阅读(58) | 评论 (0)编辑

2008年12月10日

最近在在实现volume rendering和isosurface的mixed rendering,仔细研究了depth peeling以及相关的应用。

detph peeling基于z-buffer的多层渲染,每一层渲染是基于上一层渲染的深度值基础上进行的。

它是由Mamman 1989年在Transparency and antialiasing algorithms implemented with the
virtual pixel maps technique中
提出的。Everitt在2001年给出该方法在GPU上的实现,文章是Interactive order-independent transparency.

在这之后,该方法得到大量的应用。首先是在03年,Zoltan Nagy将其用到基于纹理的体会制中绘制多层等值面,Depth-Peeling for Texture-Based Volume Rendering

 

05年Govindaraju在I3D05提出Vis-Sort来实现depth peeling的效果。该方法假设没有交叉图元。Interactive Visibility Ordering and Transparency Computations among
Geometric Primitives in Complex Environments

05年Jan Fischer该方法直接绘制基于mesh表示的等值面,并用defered shading来实现illustrative 效果。Illustrative display of hidden iso-surface structures

该文章是将GPU的depth peeling的geometry pass与image processing pass相结合。

另外Steven05年提出了用K-buffer对无规则的多边形排序,实现无结构体会制。Hardware-Assisted Visibility Sorting for Unstructured Volume Rendering

06年Fabio用depth peeling实现了gpu-based tiled ray casting,GPU-based Tiled Ray Casting using Depth Peeling

06年Baoquan Liu 和liyi Wei利用fragment sort做多层depth peeling,从而减少depth peeling需要的pass.

07年Bavoil Louis “Multi-Fragment Effects on the GPU using the k-Buffer”推广了Steven05年的k-buffer,利用frament的read-modivy-write操作,使multi-pass的depth peeling变成一个pass 成为可能。同时该文给出了未来GPU上如何实现该方法的方案。

07年Ivan的学生用depth peeling实现了volume 和mesh的混合绘制,http://www.ii.uib.no/vis/teaching/vis-project/2007-fall/nes/index.html

08年Yoshihiro Kanamori等人利用depth peeling来渲染metaballs,发表在EG08上。GPU-based Fast Ray Casting for a Large Number of Metaballs

08年Nvidia SDK给出了dual depth peeling的实现。

 在grpahic hardware08上,有一篇Coherent Layer Peeling for Transparent High-Depth-Complexity Scenes。目前还没有认真看

Robust Soft Shadow Mapping with Backprojection and Depth Peeling 将depth peeling用到shadow map中

http://www.sci.utah.edu/~bavoil/research/shadows/melissa/

在SIGGRAPH07年上, Kevin Myers 和Louis Bavoil提出了Stencil Routed A-Buffer,用A-buffer来实现depth peeling,速度提高了8倍。不过我还没有实现

对于VIS而言, depth peeling不仅能绘制透明结构,而且能利用defered shading产生illustrative 效果。

 

 

posted @ 2008-12-10 11:51 cloudseawang 阅读(199) | 评论 (0)编辑

2008年12月7日

FBO: frame buffer object主要用来render-to-texture,进行off-screen rendering.

以下是使用步骤:

1,初始化glewInit(),然后检测 GPU是否支持GL_EXT_FRAMEBUFFER_OBJECT扩展

2,创建FBO ,

GLuint fbo, color;
// Create an FBO
glGenFramebuffersEXT(1, &fbo);
// Create color texture
glGenTextures(1, &color);
glBindTexture(GL_TEXTURE_2D, color);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);

glGenerateMipmapEXT(GL_TEXTURE_2D);//生成mipmap
// Bind the FBO and attach color texture to it
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, color, 0);

对于一个fbo,可以绑定多个GL_COLOR_ATTACHMENT(I)_EXT,即可以有多个color

对于深度缓存:使用32位float纹理

 Gluint depth,

  glGenTextures(1, &detph);

 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, depth);
  glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP);
  glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP);
  glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_DEPTH_COMPONENT32F_NV,
   widht, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);

 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_TEXTURE_RECTANGLE_EXT,depth, 0);

 对于stencil buffer,目前是和depth buffer绑定在一起的,需要支持GL_EXT_PACKED_DEPTH_STENCIL extension扩展。

其定义方式如下:

 Gluint depthStencil;

glGenTextures(1, &detphStencil);

glBindTexture(GL_TEXTURE_2D, depthStencil);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8_EXT, widht, height, 0,
GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, NULL);

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
GL_TEXTURE_2D, depthStencil,0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT,
GL_TEXTURE_2D, depthStencil,0);

对于depth, stencil buffer绑定的纹理,不支持mipmap.

另外也可以使用renderbuffer与fbo绑定。

 注意:fbo里如果不指定要写depth buffer,stencil buffer,仅仅enable depth test, 并不会写depth buffer!

3,使用fbo ,使用前一定要 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);

返回到主frambebuffer只需要

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

 

4,对于绑定多个color buffer,如果指定渲染到其中某一个buffer,则用glDrawBuffer

// Render to color0
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glDrawBuffer(GL_ COLOR_ATTACHMENT0_EXT);
// Render to color1
glDrawBuffer(GL_ COLOR_ATTACHMENT1_EXT);

5, 如果一次渲染多个color buffer,则是Mulitple rendering target (MRT)。如果要指定渲染的起始buffer,则用glDrawBuffers

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glDrawBuffers(GL_ COLOR_ATTACHMENT(I)_EXT);

6,读取fbo渲染的内容,有两种办法

定义输出图像:

  unsigned char output_image = new unsigned char[ width*height];

a,   直接读buffer, 

    glReadBuffer(GL_ COLOR_ATTACHMENT(I)_EXT)

     glReadPixels( 0,  0,width,height, GL_RGB,  GL_FLOAT,output_image);

b, 读绑定的texture ,color是绑定的纹理
  glBindTexture(GL_TEXTURE_RECTANGLE_ARB,color);
  glGetTexImage(GL_TEXTURE_RECTANGLE_ARB,0,GL_DEPTH_COMPONENT,GL_UNSIGNED_BYTE,output_image);

 7,delete FBO

glDeleteFramebuffersEXT(1,&fbo);

RBO和FBO To Texture区别:

 

  • when you want to make OpenGL do depth/stencil tests, but don't care about the actual values in the buffer, you will make a depth/stencil renderbuffer (no need to use textures if don't care about the values - and you can't for stencil).
    (Same if you don't care about the values in the color-buffer (perhaps you only need depth values))
  • when you need to process the values of a buffer on the CPU (not the GPU) you should use a renderbuffer instead of a texture
    (faster and easier than using a texture)
  • if you want build-in AA on the color-buffer, you have no choice but to use a renderbuffer

     

     

  • posted @ 2008-12-07 17:14 cloudseawang 阅读(313) | 评论 (0)编辑

    2008年12月2日

    这次真的要好好总结一下了。

     

    posted @ 2008-12-02 08:41 cloudseawang 阅读(127) | 评论 (3)编辑

    2008年11月26日

    Accept! Accept! Accept!

     

     

    posted @ 2008-11-26 23:54 cloudseawang 阅读(54) | 评论 (0)编辑

    2008年11月25日

    虽然交了之后,就觉的能中的可能性很小。

    毕竟实验部分,是前1个小时才真正做完。而且好几个重要的实验没做

    最近一直希望着奇迹出现,然而东西水平不够,肯定还是会被拒的。

    希望下周的结果有奇迹。。。。。。

     

     

    posted @ 2008-11-25 12:57 cloudseawang 阅读(100) | 评论 (2)编辑

    2008年11月13日

    拖延症
      
      Procrastination的形成
      
      1. 一个人认为自己5天之内可以做完一件事情,所以在离deadline还有15天的时候一点不着急,直到最后只剩5天了才开始。
      
      2. 这种紧迫感和焦虑往往促发人的斗志,会让自己觉得,自己只有在压力状态下才有做事情的状态。
      
      3.最后拿到成绩的时候,成绩往往不是很差,这样子就强化了自己最适合在之前短期高压的状态下工作的心态,并且对以后的行为不断进行自我暗示。这一个部分写得非常符合大部分有拖沓习惯的中国学生的经历。因为中国学生往往非常聪明,所以哪怕最后只剩一点点时间了,也会完成得不错;从而自认为自己最适合这样子的工作状态。周而复始,反复循环。
      
      Procrastination的其他特点
      
      1. 没有自信。因为每次完成任务都达不到自己最高的能力,对自我能力的评估会越来越低。
      2. 我太忙。我一直拖着没做因为我一直很忙。
      3. 顽固。你催我也没有用。我准备好了自然会开始做。
      4. 操控别人。他们着急也没用,一切都要等我到了才能开始。
      5. 对抗压力。因为每天压力很大,所以要做的事情一直被拖下来。
      6. 受害者心态。我也知道自己怎么会这样,别人能做得自己做不到。
      
      Procrastination的浅层原因
      
      1. 太难
      2. 太耗时间
      3. 没有相关知识技能
      4. 害怕别人知道自己做不好
      
      Procrastination深层原因,以及解决方法
      
      1.完美主义。所有事情都要达到一个很高的境界,要一次做好,所以不愿意匆匆忙忙开始,要万事俱备才行。解决方法:对自己说现在的状态就已经很好,可以开始了。每有一点进展都鼓励自己。意识到一点错误都不犯是不可能的。伟大的作家,诗人,艺术家都是断断续续完成他们的杰作的,自己也可以如此。
      
      2. 抵制与敌意。这个老师对我态度太差了,所以我不高兴作他布置的作业。解决办法:要意识到,不完成作业受害的是自己。不能仅仅因为一个老师的态度而影响到自己的前途。
      
      3.容易颓废。任务太难了,或者别人都不需要做我干吗要做,不能忍受持续做这件事情,等明天再做吧。但是往往明天到了,心里还是不高兴做,又继续往后推。解决办法:寻找一切可以找到的帮助,设法降低事情的难度,取得进展;暂时推迟自己想要放弃的心态,每天能多做一点就多做一点。这一点也很符合很多中国学生的现状。因为不是人人都对自己的课题感兴趣的,所以容易产生厌倦感,所以不容易定下心来完成相关任务。解决的办法如上所说,向别人寻求帮助,听取建议,同时可以把任务分成比较容易的小块,化整为零,告诉自己其实每一个小部分都很容易就能完成。
       
      4. 自我贬低。如果常常不能很好地完成任务,自己对自己的能力的估计会越来越低,即使以后完成好了,也认为是运气。解决办法:接受别人对自己工作的赞扬;自己对自己进行勉励。
      
      治疗的步骤:
      1. 意识到自己的拖沓是完全没有必要的。
      2. 把拖沓的原因一条条写出来
      3. 一条条克服这些原因
      4. 开始做事




      本文译自 Procrastination: Ten Things To Know 。
      拖拉是阻碍个人成功的绊脚石,却时常出现在我们左右。
      作者是两位对拖拉 (Procrastination) 进行研究的心理学教授,希望大家能从中有所收获,
      译者MetalDudu@Blog

      1. 百分之二十的人认为自己是长期拖拉的人。对他们来说拖拉是一种生活方式,虽然并不适应它。这种状态充满了他们的生活。他们不能按时付帐单,他们忘了买音乐会的门票,他们直到圣诞前一天才去买礼物……
      
      2. 拖拉并非不重要,虽然通常我们不把它当作一个严重问题。它其实是一个自我调节的深奥问题。通常我们都宽容别人拖拉的借口,这也是问题的根源。
      
      3. 拖拉并不是时间管理或者计划方面的问题。拖拉并不因个人对时间的估计能力而不同,虽然这些人会更乐观一些。Ferrari 博士强调说:“要一个拖拉的人做一个有计划的人,就像让一个长期消沉的人马上振奋起来一样。”
      
      4. 拖拉不是天生的。它是从周围的人学来的,但并不直接。它可能来自强权的家教,拖拉甚至可能是一种反抗的形式。这种家庭环境下,朋友对拖拉者的宽容会助长这种习惯。
      
      5. 拖拉的饮酒者会有更高的酒精需求量。拖拉的人会喝的更多,这是自我调节有问题的表现。
      
      6. 拖拉的人对自己撒谎。比如“我更想明天做这件事”,或者“有压力我才能做好”,但实际上并非如此。拖拉者的另一个谎言是时间压力会让他们更有创造力,其实这只是他们的感觉而已,他们是在挥霍时间。
      
      7. 拖拉的人不断找消遣的事儿,特别是自己不需要承诺什么。查看电子邮件就是绝佳的目标,这样的事情成为他们调节情绪(比如害怕失败)的一个途径。
      
      8. 拖拉并非一模一样。拖拉的人有不同的原因,Ferrari 博士定义了三种基本的拖拉者:
      * 鼓励型,或者说找刺激型,他们盼着最后几分钟忙碌带来的快感
      
      * 逃避型,他们回避失败的恐惧,甚至害怕成功,但实际上他们非常关心别人怎么看自己,他们更希望别人觉得他不够努力而不是能力不足。
      
      * 决心型,他们没法下决心。不下决心就可以回避对应对事情的拖拉。
      
      9. 拖拉带来的损失巨大。健康是其中之一,研究表明拖拉的人更容易患病。拖拉也影响人的情绪,也会破坏团队协作和人际关系。
      
      10. 拖拉会改变人的行为,但不会耗费多少精神力量。这并不意味着一个念头就能马上改变。这个问题可以通过高度规范的认知行为治疗来解决。对行事拖拉的人进行劝诫就如同让抑郁症患者高兴起来那么困难。”法拉利教授认为,劝导对拖拉症患者来说作用微乎其微,关键还是要靠自己下定摆脱拖拉惯性的决心,这需要很大的精神动力才能完成。试着结合以下10个窍门,可能会更容易一些。记住,每达到其中一项,你就离成功进了一步。
       
      明日复明日 “拖延病”的处方
      case 1:我经常担心事做的不够完美。但尽力做了完美主义者,可做事的效率不是很高。经常接到任务以后,心里想的是尽快完成,可总是一拖再拖。为什么?
      →病名:担心引起的拖延病。
      →处方:总想把事情做的完美一些,但压力越大就越担心做不好事迟迟不敢付出行动。总是把万事的结果定为,不是成功就是失败、只要作错了一点,做的再好也都是错的。出了事就算不是自己的责任也会揽到自己身上。首先得醒悟“自找担心”是多么消极的事情。假如,在准备报告时,最初就能写出完美的报告是不可能的。一定会有一些偏差也有理论上说服力较小的地方。所以,完美是不存在的。追寻一下到现在为止你所做过是事有多少事是完美的,一定没有特别完美的事。但一定也没耽误什么事。
      
      case 2:一旦接到什么任务总会担心“我一定能做好吗?做错了教授会不会责备我?”在想这些的时候时间已悄悄溜走了。
      →病名:自我指责的拖延病
      →处方:对过去一些失败的记忆会变成一种压力。想治好自我指责的病,可以把责任都推托到别人身上。不要因为善良的自卑感而把一切问题都自己扛。这样只会让你的自信心下降。轻视自己之前先把责任都推到别人身上吧!然后,用另一种方式解释自己的失败。比如:在小组功课中有了一个好的创意。但因为没有时间,结果在报告中露掉了。在这种情况发生的时候,如果是自我指责的人就会想:“哎!因为没有发表这个创意,以后教授知道了会不会扣我的学分呢?”取代上面想法的应该是“我真了不起,能有这么好的创意。”或“下次写报告时用就可以了。那一定比这次轻松多了。”
      
      case 3:我特别的执着,一旦问题袭来的时候就感到不安和急躁。问题解决之前做不好任何事情。
      →病名:执着引起的拖延病
      →处方:“怎么会这样?”“到底那时候为什么那么做?”即使在过去的事情里找原因也不会有什么改变。澄清一件事也解决不了问题。因为事情是由几种因素合成的。什么时候才能把事情一一都弄清楚呢?在公司写企划案的时候写不好的原因也有很多种。期限太短或过去写过一次结果被上司责骂了一顿,留下了创伤。还有就是还没找到资料等等。澄清问题对以后没有任何帮助。所以,要往可以解决问题的方向行动。做企划案时应该想:“这次应该跟其他公司比较着做看看了。”  如果这样想着行动的话一定有效。

      case 4:我总是没有自信,怎么努力也改不了。为了从苦海中摆脱出来看过不少有关的书籍但都徒劳无功。因为没有自信做起事也不顺利。不知道能不能改变一下这样的我。
      →病名:封闭自我印象引起的拖延病
      →处方:在苦恼的边缘走不出来的人是因为被自己错误的想法封锁住了。一定要从误区的牢笼里走出来。为了打破错误的想法扪心自问一下自己“假如,我是能做到○○事的人,应该先想些什么?先做些什么?”假如,做报告的时候,因为忙于某些事迟迟没做出来。这时,应该想“如果我是个做报告的能手,应该先做什么事呢?”考试成绩不好,但还得向父母交代的时候应该想“假如,我是个成绩不好,但能向父母主动表白的人,应该先做什么事?”想这些问题的时候,不能用太长的时间。第一个想到的就是正确答案。所以直接实第一个想发就可以了。
      
      case 5:我在所有决定中没有自信。当决定了做某件事的时候,往往因为不确定是对的还是错的而烦恼。这样一来事就一拖再拖。不是因为我懒,而是因为每次都不能付出行动。所以人们都说我办事的效率不高。
      →病名:不安感或懒惰引起的拖延病
      →处方:你在想自己的想法对不对那是因为“为了想这个办法用了那么长时间,付出了那么大的努力,但要是失败了怎么办?就不就功亏于溃了吗?”因为这些不安感一直浮现在脑海里。所以不想做任何事情。假如,要学习但桌子很乱找书都很不容易。明知道应该收拾一下,但怕麻烦迟迟不行动。这时候,父母要唠叨个不停,就有了叛逆的心理更是不收拾。这时你应该冷静下来好好想一想。是打扫一下好还是睁一只眼闭一只眼过的好。然后再决定。把最初的想法扭转过来很难,但一旦习惯了就觉得行动比拖延更轻松。
    posted @ 2008-11-13 10:19 cloudseawang 阅读(74) | 评论 (0)编辑

    2008年10月30日

    以前比较笨,每写一个qt相关的.h文件,就手动设置custom build moc....

    最近发现,可以利用vs2005d的makefile project自动完成该工作。

    而且利用生成的makefile,可以直接在linux下编译。

    步骤可参考http://svshift.blogspot.com/search/label/QT

     

    qmake -project 生成.pro文件

    qmake 生成makefile

    nmake 编译

     

    qmake -tp vc xx.pro生成xx的vc project文件

    posted @ 2008-10-30 16:15 cloudseawang 阅读(199) | 评论 (0)编辑

    很早之前就接触qt了,但自己一直没有动手编译过。

    最近想把自己就的volume rendering engine和正在做的global illumination enginge的interface从

    难看的GLUI转移到QT上了。这两天认真研究了一下QT。

    其编译步骤如下:

    1,download qt  source code,最新版是4.4.3

    2, 我以前用的4.3.0需要先 install patch,产生windows编译需要的makefile

    现在的版本,直接输入以下命令。

    注:cmd需要加载vs环境,因此最好从vs命令行输入

    configure -debug-and-release -platform win32-msvc2005

    编译过程中可能会出现一些问题:

    1,没有找到mspdb80.dll.将Common7\IDE下的该dll拷到此处

    2,拷完后,可能会dll mispatch,此时再把改dll删去,接没问题了。

     

    3 接下来就是nmake 可能要3到4个小时

    4 安装插件Qt Integration for Visual Studio 网上有很多

    5 设置环境变量QTDIR QMAKESPEC

     

    posted @ 2008-10-30 16:11 cloudseawang 阅读(275) | 评论 (0)编辑

    导航

    <2009年7月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    统计

    与我联系

    搜索

     

    常用链接

    留言簿

    随笔档案

    最新随笔

    积分与排名

    最新评论

    阅读排行榜

    评论排行榜