实时阴影绘制技术研究

C++博客 首页 新随笔 联系 聚合 管理
  48 Posts :: 20 Stories :: 57 Comments :: 0 Trackbacks

置顶随笔 #

我的个人知识管理更新

posted @ 2006-03-24 12:28 苦行僧 阅读(937) | 评论 (3)编辑 收藏

2006年8月2日 #

     摘要: BHRE是由北京航空航天大学计算机学院虚拟现实与可视化研究所自主研发的新一代图形绘制引擎。

BHRE使用OpenGL作为底层图形API,采用CG作为Shader开发语言,在场景组织和状态管理的基本数据结构基础上,研发了包括一系列面向三维游戏、仿真模拟、漫游展示等实时三维图形应用的功能。

* Features
o 基本3DS模型载入
o 视点运动
o 对象运动
o 裁减算法
o 天空盒
o 大规模地形
o 三维声音
o 碰撞检测
o 雾效果
o 多光源效果
o 基于GPU的水波特效
o Video纹理
o LOD   阅读全文
posted @ 2006-08-02 21:05 苦行僧 阅读(2669) | 评论 (17)编辑 收藏

2006年6月2日 #

     摘要:   阅读全文
posted @ 2006-06-02 14:02 苦行僧 阅读(3412) | 评论 (1)编辑 收藏

2006年5月29日 #

     摘要:   阅读全文
posted @ 2006-05-29 15:25 苦行僧 阅读(1056) | 评论 (0)编辑 收藏

2006年5月25日 #

2006-5-25

  • 一切为了真实 物理加速卡之前世今生 技术,物理加速卡,PPU,PhysX [板卡应用技巧] IT.com.cn IT世界网-您身边的数字专家 #
    PPU的一篇相对重量级的文章,涉及到了第一块PPU的一些技术细节和效果介绍,摘要一些:当AGEIA在GDC2005上提出了PPU的 概念,同时也是第一块物理加速卡展现在世人的面前。PhysX外型类似目前的显卡,采用PCI-E/PCI 接口,可兼容绝大部的主流平台。它采用TSMC 0.13微米制程,集成的晶体管数量为1亿2千万个,核心尺寸为182平方毫米,要大于目前主流的GPU规格。而在功率方面,AGEIA宣称PhysX的 功率非常低,大约只有25W左右。和显卡一样,由于要涉及到大规模的数据运算和处理,PhysX也搭配了128M的GDDR3显存,所以说物理加速除了没 有视频输出接口以外,外观上和显卡的区别并不大。 Novodex SDK软件开发包 ,EPIC的Unreal3.0就采用了PPU技术,直接导致XBOX360对PPU的使用,PS3也宣布将采用这一先进技术。已经看到以及将要看到的使 用PPU的游戏包括:Rise of Nations:Rise of Legends(国家的崛起:崛起传奇)、Ghost Recon 3(幽灵行动 3)、City of Villians ,Bet on Soldier(赌命战士) 。目前PPU的价格大约是100-400美刀,略有点贵,但是相信随着技术的进步和市场竞争的加剧,比然会引起一轮革命。
  • AGEIA #
    Ageia(奥加)的官方网站
  • Ageia PhysX Card - Cheng's Command Center - by Cheng #
    这一篇PPU的文章,可以加深一下印象,简单易于理解。
  • 真实游戏场景,PPU物理卡效果惊人!——家用电脑-->硬件广场-->硬件最前线 #
    此文是另外一篇介绍PPU的文章,通过这篇文章我对PPU有了一个直观的了解,想来也算是虚拟现实领域的一种发展方向,所以有机会还是了解一下吧。
  • Havok公开指责PPU物理加速卡--Mydrivers.com驱动之家新闻中心 #
    今天在BBS上看到Ageia在找人,看到PPU的字样,想到原来大牛师兄曾经提到过该名次,还玩了一款游戏,顺便查了一下,发现几篇文章。此文是其中一篇。
posted @ 2006-05-25 22:28 苦行僧 阅读(879) | 评论 (0)编辑 收藏

2006-5-24

2006-5-22

  • #pragma用法 #
    #pragma是总体来说在程序里边而不是在IDE里边指定编译选项的做法
posted @ 2006-05-25 14:42 苦行僧 阅读(767) | 评论 (0)编辑 收藏

2006年5月20日 #

2006-5-15

2006-5-12

     Humus#
太人也女马白勺牛了,这个世界上这么多牛人聚集在图形里边,发誓毕业以后绝对不干这一行。
posted @ 2006-05-20 01:24 苦行僧 阅读(687) | 评论 (0)编辑 收藏

2006年5月19日 #

终于把基于CgFx的引擎调出来了,这周要重新规划一下了,又要考虑好多东西,还没有形成思路,就零零散散的记录一些吧。

1,FragmentProgram不处理的东西,如fog,depth会自动流到处理他们的环节。
2, VertexProgram替代掉的就只是Tranform和Lighting,FragmentProgram替代掉的时Fragment的Color和纹理插值出来的Color按照纹理的颜色模式进行混合的部分。
3,openGL的高级版本中有,光照中glLightMode()中可以指定将Specular的部分带到光栅化以后起作用,就是说即便VertexProgram只是输出一个Color值,最后即便采用GL_REPLACE的方式也可以体现出Specular来。我想这一部分FS是不能控制的。


看到一个网址:http://tony3d.cnblogs.com/archive/2006/05/02/390753.html
本来我写这个是想保存一点资料,转载一点文章(现在也不转了,有时候涉及版权的问题),记录一点心得,没想到这家伙居然把我的blog也列进去了,真是丢人现眼,呵呵,还是找写真正高手的blog吧,比如http://www.humus.ca/。
posted @ 2006-05-19 16:09 苦行僧 阅读(708) | 评论 (0)编辑 收藏

2006年5月15日 #

1,当析构函数为protected时,不能delete掉该对象的指针,这样就可以用来实现智能指针,结果就是从来不会显式调用delete一个refptr的对象。
2,在vs.net环境中,要把working directory设置一下,才能找到bin目录。
3,LNK2019错误涉及到的往往是在定义class的时候没有在前边添加NSGDLL的标识,这样就不会被编译到lib里边,就会在另外一个工程使用该lib造成链接的时候出问题。
4,cgFx的初始化工作要在glutCreateWindows之后进行,因为没有windows窗口句柄产生的时候是不能createContext的。

待续...
posted @ 2006-05-15 16:11 苦行僧 阅读(914) | 评论 (0)编辑 收藏

2006年5月12日 #

2006-5-9

2006-5-8

HOWTO: Write a Summer of Code application | drupal.org #
Tell us how to write a SOC application
posted @ 2006-05-12 03:04 苦行僧 阅读(673) | 评论 (0)编辑 收藏

2006年4月25日 #

流水帐,随手记下:
  • 直到现在我才明白,CGCGCGFXCGFXCG是一种语言,CGFX是一套编程模型,而我们要做的是封装cgFX,有了CGFX就有更强的一种表达,可以对不同的Profile指定配置,可以设定openGL state
  • 对于D3D的绘制方式而言,是根据名字得到Technique的句柄,然后每次绘制Mesh前设定生效的Technique,在遍历该Technique下的所有Pass,逐一进行绘制;
  • 那么对于OpenGL来说,我们只知道在CreateProgram的时候指定一个入口函数,那对于具有多个Technique的情况我们还不知道怎么进行切换,是用两个Program表示呢,还是调用什么参数可以切换?
  • 但是不管怎么表示,从概念上是应该允许像D3D那样指定的,即在某一个Mesh绘制前指定用某一个Effect的某一个Technique,甚至Pass
  • 后来查到在cg1.2发布的cg_tookit里边提供了CgFx的很好的支持,能够想D3D Effect格式那样ICgFxEffect->setTechnique(),有pass->begin(),pass->end()这种方法,但是不知道为什么到cg1.4把这些东西去掉了。在cgReleaseNote里边写到:
    • Complete rewrite of CgFX, including an API integrated with the Cg runtime API, support for extensible, cross-platform graphics state management, and support for unsized arrays and interfaces.
    就是说重写了,跟以前不一样儿了,后边给了对于使用CgFx库的说明:
  • Applications and effects that used previous versions of CgFX will require modification.Applications that use CgFX will have to be modified to use the new CgFX API. If the supplied OpenGL state manager for CgFX is used, the effect files themselves must be modified. The effects must be changed to use OpenGL state assignments, rather than the D3D state assignments supported in prior versions of CgFX. A subsequent release of Cg will provide D3D and cross-platform state managers for CgFX.
  • CgFX has been redesigned and re-implemented. As noted above, existing applications that use CgFX must be modified if the new API is to be used. In addition, if you wish to use the supplied “native” OpenGL state manager, which assumes that OpenGL-style state names and vales are used in effects, existing effects must be modified to use OpenGL-style states. See the “Introduction to CgFX” chapter in the Cg Users Manual for more details. If you have questions or problems related to porting existing CgFX applications, please contact NVIDIA developer relations.
太恶心了,就是说原来如果你用了很好实现的CgFx,现在对不起,不能用了。所以我看到的早期的使用cg1.2的nebula2都封装了CGFX,但是到了1.4不知道为什么,发布的CG_tookit里边却去掉了这个CGFX的运行库。nebula2新的版本也去掉了CGFX,只剩下D3DShader的支持。
上边这段话最后说如果有问题,联系Nvidia developer relations。我想一想也没有办法了,去问wj大牛都不知道怎么回事儿,那只好去问一下了,结果到了nvidia developer网站上也差不到可以直接问谁,还填了一张表注册了一个用户,现在还没有被批下来。最后实在等不及了,去论坛上问吧。下面几个地址,没准儿有熟知cg的人可以答复一下.

http://www.gamedev.net/community/forums/topic.asp?topic_id=389475

 

http://www.smth.org/bbscon.php?bid=50&id=43518

 

http://www.smth.org/bbscon.php?bid=197&id=50169

 

http://forums.nvidia.com/index.php?showtopic=13875


再看看Nvidia到底怎么说的:
  • Cg1.1里边关于cgFX说:

CgFX beta support for DirectX 8, DirectX 9, and OpenGL

  • Cg1.2里边关于cgFX说:

Cg Effects Explained document 

CgFX beta support for DirectX 8, DirectX 9, and OpenGL

  • Cg1.4.1里边关于cgFX说:

Complete rewrite of CgFX, including an API integrated with the Cg runtime API, support for extensible, cross-platform graphics state management, and support for unsized arrays and interfaces.

  • Cg1.5beta里边关于cgFX说:

Cg 1.3 and 1.4 style Effects files supported



  • 又考察了openGL2.0GLSL,发现对于绘制的描述感觉跟CG1.4FX的运行库也差不多,又因为不熟悉,还是回头看cgFX吧。
  • 装了cg1.2看原来的文档,学习笔记如下:
  • cgFX主要提供了三点好处:
    • 不同硬件得以配置(technique,profile)
    • 多遍绘制的描述(pass)
    • 表达了环境信息(state)
  • cgFXmicrosoft FX2.0DirectX9.0Effect格式相似
  • cgFX既可以在openGL又可以在D3D上运行,便于以后扩展
  • 主要方法接口:
  • CgFXCreateEffect,CgFXCreateEffectFromFileA,CgFXCreateEffectCompiler,CgFXCreateEffectCompilerFromFileA
  • CgFXSetDevice,CgFXFreeDevice
  • CGFXHANDLE GetTechnique(UINT index);CGFXHANDLE GetTechniqueByName(LPCSTR name);
  • CGFXHANDLE GetPass(CGFXHANDLE technique, UINT index);CGFXHANDLE GetPassByName(CGFXHANDLE technique, LPCSTR name);
  • CGFXHANDLE GetParameter(CGFXHANDLE parent, UINT index);
  • CGFXHANDLE GetParameterByName(CGFXHANDLE parent, LPCSTR name);
  • CGFXHANDLE GetParameterBySemantic(CGFXHANDLE parent, LPCSTR name);
  • CGFXHANDLE GetParameterElement(CGFXHANDLE parent, UINT element);
  • HRESULT FindNextValidTechnique(CGFXHANDLE hTechnique,CGFXHANDLE *pTechnique);
  • HRESULT SetTechnique(CGFXHANDLE pTechnique);CGFXHANDLE GetCurrentTechnique();
  • HRESULT Begin(UINT* pPasses, DWORD Flags);HRESULT Pass(UINT passNum);HRESULT End();
  • HRESULT CloneEffect(ICgFXEffect** ppNewEffect);
  • HRESULT GetDevice(LPVOID* ppDevice);
  • HRESULT OnLostDevice();
  • HRESULT OnResetDevice();
  • 主要接口:
  • ICgFXBaseEffect
  • ICgFXEffect
  • ICgFXEffectCompiler
posted @ 2006-04-25 23:41 苦行僧 阅读(1281) | 评论 (0)编辑 收藏

2006年4月22日 #

shade 学习笔记( 3 )- cg openGL runtime library

  1. uniform 参数设置到 openGL 以后是保存在 CG openGL runtime 里边或者 cg core runtime 里边,而 d 3d 是直接保存到 GPU constant memory 里边。
  2. openGL 在使用 CG 的时候必须首先使用wglCreateContext() or glXCreateContext()来创建 openGL Context
  3. 设置 Uniform参数:
  • cgGLSetParameter,两种类型 float (f),double(d).
  • cgGLSetMatrixParameterfr , cgGLSetMatrixParameter dc, 四种, c 表示列向量为主, r 表示 row 向量为主。
  • cgGLSetStateMatrixParameter()可以用来设置状态矩阵,包括 ModelView 矩阵, Projection 矩阵,纹理矩阵。
  • cgGLSetParameterArray()用来设置 Uniform 的数组参数;cgGLSetMatrixParameterArrayfr用来设置矩阵数组
    设置变量参数:
  • 因为FP的变量参数是按照光栅化插值后的结果来设置的,所以只有VS程序有变量参数。
  • 设置变量参数两步:
    1. cgGLSetParameterPointer():设置变量数组,我理解就是顶点数组
    2. void cgGLEnableClientState(CGparameter parameter);和void cgGLDisableClientState(CGparameter parameter);使得该参数有效。
    • 注意:cgGLSetParameter也可以用来设置变量参数,这时采用的是openGL立即模式,也就相当于glVertex,glNormalglColor这样的做法吧,但是我想这显然是一种效率不高的做法。且cgGLGetParameter不能用来取变量参数。
    设置Sampler参数:Sampler和纹理是一一对应的,所以实际就是对一段顶点绘制指定一个纹理。
  • cgGLSetTextureParameter(CGparameter parameter,GLuint textureName);来指定一个纹理给CGParameter
  • void cgGLEnableTextureParameter(CGparameter parameter);来使纹理生效。void cgGLDisableTextureParameter(CGparameter parameter);使其失效,相当于glBindTexture命令。
void cgGLSetOptimalOptions(CGprofile profile);来使用最优的Profile。而CGbool cgGLIsProfileSupported(CGprofile profile);可以用来判断硬件是否支持该Profile

经过这几天的学习,终于大概明白了shader是怎么work的了,但是对于用programmable pipeline替换掉fixed function还是一头雾水。

 

posted @ 2006-04-22 06:37 苦行僧 阅读(2063) | 评论 (1)编辑 收藏

2006-4-22

365Key-天天网摘生成

posted @ 2006-04-22 05:53 苦行僧 阅读(650) | 评论 (0)编辑 收藏

2006年4月21日 #

     摘要:   阅读全文
posted @ 2006-04-21 01:29 苦行僧 阅读(1168) | 评论 (0)编辑 收藏

2006年4月20日 #

     摘要:   阅读全文
posted @ 2006-04-20 01:43 苦行僧 阅读(1820) | 评论 (0)编辑 收藏

     摘要:   阅读全文
posted @ 2006-04-20 01:33 苦行僧 阅读(612) | 评论 (0)编辑 收藏

2006年4月19日 #

     摘要:   阅读全文
posted @ 2006-04-19 00:42 苦行僧 阅读(573) | 评论 (0)编辑 收藏

2006年4月16日 #

     摘要:   阅读全文
posted @ 2006-04-16 05:19 苦行僧 阅读(616) | 评论 (1)编辑 收藏

2006年3月27日 #

     摘要:   阅读全文
posted @ 2006-03-27 13:57 苦行僧 阅读(980) | 评论 (2)编辑 收藏

2006年3月24日 #

我的个人知识管理更新

posted @ 2006-03-24 12:28 苦行僧 阅读(937) | 评论 (3)编辑 收藏

2006年3月18日 #

     摘要: 一般而言,比起C程序来说,C++游戏程序是可重用和可维护的。可这真的有价值吗?复杂的C++可以在速度上与传统的C程序相提并论吗?
  阅读全文
posted @ 2006-03-18 00:03 苦行僧 阅读(1133) | 评论 (2)编辑 收藏

仅列出标题  下一页