- 博客(371)
- 资源 (14)
- 收藏
- 关注
转载 设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。 GoF的“设计模式”是第一次将设计模式提升到理论高
2010-01-23 14:21:00 1797 1
原创 Ogitor代码分析
引擎状态监听(观察者) 底层变化时, 需要高层UI做出反应. 这个有一个原则, 就是下层逻辑不能依赖上层逻辑, 所以通过一个接口进行消息的派发. 如果是.net的话, 可以用delegate/event实现. C++的话, 可以自己用模板写个delegate用, 效率比用接口高… 实体抽象(工厂方法) 扩展性是很强, 但是…类太多了-_-. 这里有种基于DLL
2010-01-17 22:36:00 5085 5
原创 常见图形数学英文单词备忘
单词翻译homogeneous齐次affine transform仿射变换linear transform线性变换polynomial(multinomial)多项式convex hull凸包
2010-01-11 22:07:00 2907 1
原创 X3DAudio中声道音量跳变的问题
对于3D音效, 左右耳的音量是不一样的. 当然, 眼下没有条件试验传说中的6.1声道是啥子效果, 所以不考虑这种情况. 正是因为左右有音量的差别, 才能根据耳朵去定位音源的方位. 如果是只有两个声道, 比如耳机, 那么两只耳朵的音量变化有时候就很突兀. 为什么呢? 以现实来说, 人的两耳所能感受的声音方向是不同的, 正好左右对称. 如下图. 横线上两耳的音量差别是最大的, 纵线上两耳的音量
2010-01-09 01:08:00 2556
原创 径向模糊效果
最先在这里看到:http://www.gamerendering.com/2008/12/20/radial-blur-filter/这效果在鬼泣4中切换场景时见过, 极品飞车12的运动模糊也有这种感觉.原理: 确定一个中心点(如0.5, 0.5), 跟当前像素连一条线. 以当前像素为中心, 在线上的附近像素进行采样, 最后取一下平均值.代码翻译成HLSL:// Th
2010-01-06 22:28:00 13748 2
原创 Bullet的最小化功能封装
既然是"最小化", 那么就要明确最少需要哪些功能. 对于一般的物理应用来说, 只是简单地模拟碰撞, 柔体什么的都用不到. 在这样的前提下, bullet的工程可以精简到三个: libbulletcollision, libbulletdynamics, libbulletmath.接下来, 需要明确一下基本的物理概念. 这个是跟用什么库(physx, havok, etc)是没有关系的. 在上
2010-01-03 22:16:00 2415
原创 基于屏幕像素抖动的PCF
PCF无非就是把周围的像素加吧加吧, 然后取个平均值. 结果的平滑程度, 跟Kernel的大小有直接关系.下面来对这个描过边的锯齿茶壶PCF一把:2x2:3x3:4x4:当然, Kernel越大, 效果越好. 但大到一定程度效果就不明显了, 而且还要考虑性能问题, 毕竟多次的纹理采样很慢. 其实呢, 通过抖动也可以使用少量的采样达到近似比较大Kernel的效果.
2009-12-16 21:46:00 4511
原创 我与SM不得不说的故事(一)
话说当年学shader的目的, 就是为了想实现一个当时天真地以为很NB的算法TSM, 一年多来朝着这个目标努力, 到最后却发现, 结果并没有想像中的美好-_- 最开始实现的是Projective Shadow, 也就是投影纹理的方法. 先把需要投影的物体从光源视角以单一颜色画到一张RTT上, 然后用投影矩阵生成纹理坐标投影到地表上去跟纹理进行混合. 为什么用它呢? 主要是它对硬件没什么要求
2009-12-03 22:41:00 156941 20
转载 MIT Computer Graphics Lecture Notes
Home > Courses > Electrical Engineering and Computer Science > Computer Graphics > Lecture Notes Lecture NotesLEC #TOPICS1Course Overview ( PDF - 1.1MB)C++ Tu
2009-11-26 22:38:00 2444 1
转载 You want to be a Graphics Programmer ...
From: http://diaryofagraphicsprogrammer.blogspot.com/2009/11/you-want-to-be-graphics-programmer.htmlAuthor: Wolfgang Engel I regularly receive e-mails with the question what kind of books I rec
2009-11-16 20:51:00 1965
原创 《火炬之光》中的“X射线”效果
玩了下《火炬之光》, 没想到能用OGRE做到这么个程度, 很让人惊叹!刚开始玩就注意到人被遮挡时, 并不是像其它游戏那把遮挡物半透明化, 而是把被遮挡的部分处理成一种透视效果:想了想, 其实也挺简单的, 把模型画两遍就成了:1. 先画场景2. 画被遮挡的部分, ZWrite=False; ZFunc=Greater; 开启Alpha混合, 光照亮度做为alpha值输出, 颜色由
2009-11-09 21:34:00 7829 5
翻译 Nebula3 SDK Nov 2009 更新内容
这是新版的 N3 SDK:下载链接跟以往一样, 只包含了Win32平台的源码. Console平台特定代码 (Xbox360, PS3 还有 Wii) 介于法律问题没有包括进去.这是Apr2009 SDK之后大体的改变: == 主要新特性XNAMath 在Win32 和Xbox360 平台上的统一支持 PS3 支持(不属于公开的SDK, 但是针对GCC 4.x做了一些代
2009-11-06 22:03:00 2797 2
原创 球面环境映射实现高光效果
前段时间在看wow的模型的时候, render flag中有一个很奇怪的渲染状态切换, 而且这个状态在WoWDev上也没有被提及. pass.useEnvMap = (texunitlookup[tex[j].texunit] == -1) && ((rf.flags & 0x10) !=0) && rf.blend>2; //&& rf.blend<5; // Use environmen
2009-11-01 20:06:00 4512 3
原创 看得让人DT的GLSL
GLES2.0封装到shader和vbo结合的部分, 蒙了vertex layout(或叫vertex declaration)要一个一个element的绑定到一个shader变量上(GL叫attribute), 也就是相当于HLSL的VS_INPUT结构体吧.问题是, GLSL里没有"semantic", 然后问题就来了举个例子:一个简单的顶点结构:struct Vertex
2009-10-16 21:15:00 4392 4
转载 KILLZONE 2 显示技术详解
转自 KILLZONE 2 显示技术详解【上】KILLZONE 2 显示技术详解【下】 人们开始摸索着如何抛弃现有的 Forward Rendering 而使用其他技术。作为其中一个方法,就是最近开始流行起来的 延迟着色( Deferred Shading )技术。延迟渲染是什么——重度渲染的优化手段之一 在欧美有着巨大人气的 FPS 游戏
2009-09-23 23:24:00 4302
原创 哇哈哈, 终于天上掉箱子了
基本步骤:初始化SDK创建场景, 设置重力设置默认材质, 摩擦力系数之类的创建一个地面每次按Enter创建一个Box, 让它自己往下掉主要的代码如下://------------------------------------------------------------------------------voidTestPhysXApp::OnP
2009-08-25 23:15:00 2141 3
翻译 Light Pre-Pass 渲染器----为多光源设计一个渲染器
作者: Wolfgang Engel, 原文: http://www.wolfgang-engel.info/RendererDesign.zip 渲染器设计就像为一座房子打地基, 结果可能比预期大了, 小了, 或者太笨重了. 预先了解要在它之上建造什么, 并且为未来的扩展做出合理的预测, 是建造一座稳定房子的先决条件. 用软件设计的术语来说, 打地基好比渲染器设计, 而房子,
2009-08-18 22:55:00 7786 8
原创 一个困扰我一个多星期的Nebula3的BUG
最近看了一些PhysX的东西, 本想写个demo练练手, 结果遇到一个非常诡异的问题当我兴冲冲的用Wizard建了一个工程, 编译, 运行, 竟然一片黑?奇怪啊, 这个Wizard程序应该没问题才对, 要不然我怎么敢发布出来?换成Release, 编译...结果正常!用PIX跟踪了一下发现, 两个版本的变换矩阵不一样!当时就茫然了...拿SDK自带的testviewer编译运行
2009-08-11 22:08:00 2135 4
原创 VS2005中Nebula3数据类型的调试信息显示
用过VS2003的应该知道, STL的容器调试起来非常麻烦, 因为调试时显示的信息非常不直观VS2005引入一个autoexp.dat, 可以定义数据在调试时显示的格式详细介绍可以参考:Writing custom visualizers for Visual Studio 2005这里暂时给出一些Nebula3相关的格式定义:这些放到[AutoExpand]字段下面:;---
2009-08-04 23:15:00 2204
原创 PhysX学习笔记(4): 动力学(3) Joint
(关节)Joint Joint和contact是约束body运动的两种方式Joint坐标系: Joint Limit: 相当于关节的活动范围Breakable Joint: 可以断开的, 由setBreakable控制. 断开时会响应onJointBreak()Joint类型:球形关节: 肩膀, 绳子卷动关节: 门棱柱关节: 防震器圆柱关
2009-07-28 22:49:00 3771
原创 PhysX学习笔记(3): 动力学(2) Actor
Actor Actor扮演两种角色: 静态对象, 动态刚体(也叫body). Actor包含shape. Shape之间相交会触发很多行为. Static actor主要作用是碰撞检测, 所以一般都会赋于对应的shapeDynamic actor可能只表示一个抽象的连接点, 所以不需要对应一个shape 创建actor:NxActorDesc actorDesc;a
2009-07-23 23:28:00 5056
原创 PhysX学习笔记(2): 动力学(1)
场景(Scene):物理模拟发生的场所, 包含了actor, joint, effector. 跟图形引擎里的Scene差不多, 可以有多个实例存在, 互不干涉.场景没有特别的大小限制. 功能有重力, 射线拣取, 开关硬拼检测等. 模拟时序(Timing):物理模拟导致物体的一些属性随着时间进行变化, 如位置, 速度等.模拟每经过一次时间步进进行一次, 通常要与渲染帧数进行
2009-07-22 22:50:00 3465 1
原创 PhysX学习笔记(1): 基础
简单形状l NxBound3: AABBl NxBox: OBBl NxCapsule: 胶囊(线段+距离)l NxPlanel NxRayl NxSegment: 线段l NxSphere SDK 初始化:跟D3D差不多, 直接NxCreatePhysicsSDK就OK. 释放时不能delete, 因为那是DLL内部的对象, 只能releas
2009-07-22 00:04:00 4323 1
原创 打算学物理了
突然心血来潮想学物理引擎了...以前老觉得这东西很神秘, 很高端...但是据说有高中物理水平就能用-_-刚来北京时配了一台很NB的台式机, 冲着物理加速和PerfHUD就买了块9800GT, 一直没发挥出它的潜力来, 天天拿它打dota, 汗~工作(算上实习的话)将近两年了, 发现自己对于游戏的热情已经渐渐往技术方面转移了最近几个能让我一口气玩通的游戏, 无一例外都使用了物理引擎:
2009-07-21 22:50:00 2129 4
原创 溶解效果
选人界面的角色出现时的效果非常酷, 一直不知道咋做的还是中speedtree在镜头前时的消隐也是这种溶解效果, 跟的圆形透明消隐差不多, 但是这种方法不用alphablend, 效率高些. (当时我形容是被虫子啃了...这机器上没装, 不截图了) 最近研究ShadowMap的Alpha穿透, 用到了clip()函数, 恍然大悟, 原来如此啊~clip (DirectX HLSL
2009-07-15 23:15:00 5168
原创 快速LightMap烘焙
什么是烘焙? 简单地说, 就是把物体光照的明暗信息保存到纹理上, 实时绘制时不再进行光照计算, 而是采用预先生成的光照纹理(lightmap)来表示明暗效果. 那么, 这样有什么意义呢?好处:由于省去了光照计算, 可以提高绘制速度对于一些过度复杂的光照(如光线追踪, 辐射度, AO等算法), 实时计算不太现实. 如果预先计算好保存到纹理上, 这样无疑可以大大提高模型的光影效果保
2009-07-12 21:30:00 25646 15
原创 在Nebula3中加载自定义模型的思路
Nebula3中目前还是没有地形…不过冒似国外的引擎除了CryEngine外对于地形都不重视…..之前看了下WOW的地形组织方式, 一直在想怎么把它加进来模模糊糊地感觉到, 它应该是把Model当成了最基本的渲染单位地形是不是也需要包装成模型呢? 也就是说, 地形对于引擎来说是个上层概念, 不应该放到Graphics内部去管理. 嗯, 虽说地形也是一种特殊的模型, 但它的管理方式相
2009-07-08 22:18:00 2644 4
原创 强大的PropertyGrid
PropertyGrid, 做工具一定要用这东西.....把要编辑的对象看成类的话, 所有要编辑的属性就是成员嗯嗯, 最近看了几眼Ogitor, 它对于PropertyGrid的使用就很不错所有要编辑的对象(灯光, 模型, 粒子等等)都有一个共同的基类, 每当选中一个可编辑对象时, 右边的属性框里就显示出当前对象的属性...(公司那个编辑器要多土就有多土-_-)尽管Ribbon界
2009-07-04 22:05:00 38043 4
原创 Nebula3 Render Application Wizard
使用方法同N3ConsoleAppWizard1. 修正stdafx.h第一次编译时会找不到的问题2. 输出目录定位到$(N3SDK)test/win32/下, 这样程序可以自动加载export*.zip里的系统资源3. DEBUG版的输出文件会加上_d后缀(因为2中输出目录改成跟RELEASE一样了) 注意: 环境变量$(N3SDK)已经改为SDK的根目录, 如"D:/Neb
2009-06-30 20:33:00 2230 2
原创 Nebula3的渲染线程插件(Render Thread Plugin)
上个版本的SDK把渲染放入一个独立的线程, 这是一个很先进的改动但是它也造成一个问题: 不好操作底层的渲染API了对于想自己控制VB, IB来绘制三角形级的demo程序来说, 一点也不方便之前我写过一个SyncRenderApplication, 但是很不完美, 比如不能使用InputServerApril2009加入了RTPlugin, 为写demo指明了方向, 嘿嘿(虽然作者原
2009-06-22 23:14:00 2578
翻译 Nebula3 RTTI 小技巧
注意: 以下代码省略了命名空间前缀和”using namespace xxx”声明来改善可读性. 另外, 因为我没有通过编译器运行这些代码, 不保证有些手误. 不要把Rtti跟RTTI搞混:Rtti 是类名, MyClass::RTTI 是类的Rtti对象的名字. 每个RefCounted派生的类都有一个Core::Rtti的静态实例, 它在main()之前初始化. 检查一个对
2009-06-16 23:59:00 2785
原创 Nebula3中的委托(Delegate)
April2009增加了不少好东西, 这段时间准备静下心来看看关于delegate这么个东西, 可能C++程序员很陌生, 但是Callback函数一定听说过吧? 其它两者本质上是一种东西不过C++对于成员函数的回调实在是.....(别跟我提boost)曾经用过fastdelegate, 确实不错. 我以为这就是C++中的完美实现了N3中增加的这个, 不比它差, 代码量更小, 呵呵
2009-06-15 21:58:00 2412 1
原创 做了Nebula3的应用程序向导
使用方法:1. 配置环境变量:2. 把下载的zip解压到一个合适的位置3. 把N3ConsoleAppWizard.ico, N3ConsoleAppWizard.vsdir, N3ConsoleAppWizard.vsz三个文件拷贝到Visual Studio 8/VC/vcprojects/下, 并更改N3ConsoleAppWizard.vsz中的路径为第2步中的解压路径
2009-06-08 23:32:00 2578 4
原创 反醒反醒
最近blog更新得很少从什么时候开始的呢?好像是从俩兄弟离职开始的.没有了共同探讨技术的人, 所以自己业余时间都拿来玩了玩什么? 玩dota现在的游戏, 不知道为什么, 只有这一个能玩的下去那些XXX大作, 没有一个能让我玩完的除了WorldOfGoo和CrayonPhysicsDeluxe这两个很有创意的游戏之外 好像N3新版本的推出也打断了我以前的学习计划
2009-06-06 14:45:00 2006 1
转载 Real-time Shadow Algorithms and Techniques
Last Updated: 10 / 09 / 2008Shadowing is a key component for convincing, solid-looking rendering. Whether hard or soft, physically correct or perceptually satisfying, NVIDIA has been at the fore
2009-05-14 12:10:00 4334
翻译 Nebula3中的骨骼动画: Animation子系统
就像CoreAnimation 中提到的, Nebula2动作系统急需一个全新的设计和编码. 在《龙歌》的开发和另一个针对表情动画的研究中, 我们不得不为这个天生不足的系统加入新的特性. 最后系统勉强可以正常工作了, 但从设计的角度来说, 它的可维性变得很差. 因为从事一个商业项目有很多约束(里程碑, 特性和质量), 这通常是惟一的选择, 最好是让一些事情在里程碑结束前可以工作(就算是内部的
2009-05-10 18:49:00 2474
翻译 怎样使用深度纹理
这个问题经常出现, 所以我试着来总结一下ATi和nVidia芯片对于深度纹理的支持情况. 如果发现我说错了nVidia的深度实现, 请告知我 :)ATi和nVidia在硬件上都支持深度纹理, 虽然方法不一样. 深度纹理的创建非常相似:* 曝光的格式- ATi曝光了两个FOURCC 来创建16或24位深度的纹理:#define FOURCC_DF16 ((D3DFORMAT) MAKEFOU
2009-05-04 17:55:00 4415 1
原创 XACT Q&A
1. 怎么做声音间切换时的淡入淡出效果? (1)对于背景音乐: 把所有背景音乐归为一个分类(catigory), 如Music, 属性设这样: (2)对于音效: 建立一个RPC, 在把里面的参数设置成AttackTime/ReleaseTime控制Volume的, 然后根据需要绘制一个音量随时间变化的曲线, 再把需要这个效果的sound全attach到这个RPC上就
2009-04-21 20:32:00 2404 2
翻译 Nebula3 SDK (Apr 2009)更新内容
相对于Sep 2008SDK的新内容:工具新命令行工具: archiver3 – 为多平台文件档案生成所做的包装 新命令行工具: n2converter3 – 转换.n2 文件到.n3文件(Nebula 图形对象) 新命令行工具: suiconverter3 –SUI (simple user interface)资源的批处理转换器, 现在只在Wii平台有效 新命令行工具:
2009-04-15 22:17:00 2669 1
翻译 Neubla3中的骨骼动画: CoreAnimation子系统
最早的一个设计是把动作代码分成两个子系统. CoreAnimation作为低层系统, 只为更复杂的高层动作系统提供简单而又高性能的”砖瓦”. 高层Animation子系统以CoreAnimation为基础, 提供了像抽像动作名和实际剪辑(clip)名的映射, 还有一个动作序列发生器(sequencer), 可以方便地处理复杂的动作融合情形. CoreAnimation主要关注于高性能的基础操作
2009-04-10 23:50:00 2523
View Frustum Culling Tutorial
2009-11-19
Introduction to 3D Game Programming with Direct3D 10(2)
2009-11-16
Introduction to 3D Game Programming with Direct3D 10(1)
2009-11-16
Programming Vertex, Geometry, and Pixel Shaders
2009-02-02
DirectX in C++/CLI
2008-11-02
Introduction to 3D Game Programming with DirectX9.0c A Shader Approach
2008-09-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人