惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
博客园 - 司徒正美
Last Week in AI
Last Week in AI
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
博客园 - 聂微东
M
MIT News - Artificial intelligence
博客园_首页
Jina AI
Jina AI
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Vercel News
Vercel News
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
B
Blog
Google DeepMind News
Google DeepMind News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - AppleSeeker(冯峰)

XNA游戏开发——播放音效(2) XNA游戏开发——播放音效(1) 粒子系统介绍 在游戏框架中实现天空体 创建天空体 天空体介绍 添加雾化效果 使用追踪相机 实现追踪摄像机 创建一个追踪摄像机(2) 创建一个追踪摄像机(1) 相机定位 XNA——相机类 XNA——使用摄像机 在游戏框架中添加支持 渲染已保存的几何图形 将已保存的几何图形导入到XNA项目中 导出3D几何体 导入几何图形——SketchUp介绍
公告板
AppleSeeker(冯峰) · 2012-07-09 · via 博客园 - AppleSeeker(冯峰)

公告板是简单的四边形(平滑,平面或矩形的纹理对象),在游戏世界中渲染,所以它们直接面对相机。当相机围绕世界移动时,公告板对象旋转以便它们持续直接面对相机。

不同于粒子系统,公告板有大量潜在的用途,包括渲染围绕光照的明亮光点的镜头光晕和使用2D图片渲染的基础树,如此,它们总是面对相机出现。

对于很多类型的渲染对象,适用于公告板的这种方式将给予深度外观,即使对象实际上是完全平滑的。举例,想象下你想在你的游戏中去渲染没有纹理,未点亮的特殊对象。这样一个球体看上去正好和所有角度相同,所以如果你可以简化渲染一个平滑的球体绘制并保持它直接面对相机的角度,它将无法区分实际的球体,但需要相当少的计算能力来显示它。

公告板四边形是非常有用的粒子系统。如果我们想渲染一个框架,我们需要去确保所有渲染的光照点实际上是可见的。如果我们不使用公告板,组成烟火的四边形可以绘制到相机的边缘,使它们几乎看不见。

四边形作为公告板渲染,然而,仍然放置在3D场景中。它们将仍然保持它们在游戏世界中的坐标,将观察视角的转换,收到z-缓冲的影响,就像任何普通对象世界那样。

下图演示了四边形顺序调整为了它们作为公告板显示的这个方式。箭头显示的它们所面对的方向。请注意所有箭头都朝相机对准。随着相机移动,旋转四边形以便它们总是朝向它。

imageimage

从上面看的场景视角,用公告板四边形朝2个不同相机位置旋转。

让四边形旋转的这个方式实际上是相当简单的。再次,我们可以调用另一个非常有用的静态Matrix函数,这次称为CreateBillboard。当我们调用这个函数时,传递它的公告板对象的坐标和相机位置和方向的细节,它将返回一个矩阵,能转化对象到指定位置并旋转对象直接对着相机。

CreateBillboard期望传递下列参数:
objectPosition:公告板对象的坐标。
cameraPosition:相机的坐标,可以通过查询Camera.Transformation.Translation属性来简单获得。
cameraUpVector:相机的向上矢量。从Camera.Transformation.Up属性中获得。
cameraForwardVector:一个指明方向的矢量,相机所看的方向。从Camera.Transformation.Forward属性中获得。

在这个矩阵的帮助下,我们确保粒子系统总是对齐的面对相机。下面部分代码将描述,一个粒子类的Update的一部分代码,使用新函数来转化自身来准备显示。请注意,在申请公告板转换后,它在z坐标轴旋转:因为旋转对象于随想的坐标,它在坐标轴上旋转和相机对齐,无论相机如何放置在世界中。

// Calculate  the  transformation matrix
SetIdentity();

// Apply the  billboard  transformation
ApplyTransformation(Matrix.CreateBillboard(Position,
        Game.Camera.Transformation.Translation, 
        Game.Camera.Transformation.Up,
        Game.Camera.Transformation.Forward));

// Rotate and scale
ApplyTransformation(Matrix.CreateRotationZ(AngleZ));
ApplyTransformation(Matrix.CreateScale(Scale));