上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 39 下一页
摘要: 问题 使用你配置好的光照,BasicEffect可以很好地绘制场景。但是,如果你想定义一些更酷的效果,首先要实现的就是正确的光照。 本教程中,你将学习如何编写一个基本的HLSL effect实现逐顶点光照。 解决方案 传递每个顶点的3D位置和法线到effect中。显卡上的vertex shader需要对每个顶点做两件事。 首先,当绘制3D世界时,总是要使用世界矩阵,视矩阵和投影矩阵将3D... 阅读全文
posted @ 2011-02-14 14:39 AlexCheng 阅读(585) 评论(0) 推荐(0)
摘要: 问题 就算开启了逐像素明暗,有些金属或闪光表面仍显得有点暗淡。在现实生活中,当观察诸如金属、玻璃或一些塑料时,你会发现某些区域的反光非常强烈。这样的区域如图6-6的虚线圆圈所示。这些高亮的区域叫做镜面高光(specular highlights)。 图6-6 镜面高光 解决方案 和逐像素光照一样,你只需简单地告知BasicEffect创建镜面高光就可以开启它。 注意:镜面高光只... 阅读全文
posted @ 2011-02-14 14:36 AlexCheng 阅读(347) 评论(0) 推荐(0)
摘要: 问题 在前两个教程中,是在每个顶点中计算明暗程度,对三角形的每个像素需要对这个值进行插值。所以这叫做逐顶点光照(per-vertex lighting,又叫做高洛德着色,高洛德浓淡Gouraud shading)。 在某些情况中,逐顶点光照没不能产生最好的结果。特别是使用大三角形或有锐利的边缘或两者都有时,往往得不到想要的结果。 举例说明,如图左边是一个有三个面的立方体。图的右边表示共享的法... 阅读全文
posted @ 2011-02-14 14:32 AlexCheng 阅读(329) 评论(0) 推荐(0)
摘要: 问题 在前面的教程中,你学习了如何根据法线数据使三角形获取正确的光照。 但是,盲目地将这个方法施加到所有三角形中往往得不到最好的效果。 如果三角形的每个顶点具有相同的法线方向,那么光照是一样的,所有像素会获得同样的光照。如果两个相邻三角形(不在同一平面)也是如此施加光照,那么一个三角形的所有像素获得同样的光照,另一个三角形的所有像素获得另一个光照。这会导致很容易地可见看见两者的边界,因为两个... 阅读全文
posted @ 2011-02-14 14:28 AlexCheng 阅读(374) 评论(0) 推荐(0)
摘要: 问题 没有正确地光照,场景会缺乏真实感。在某些情况中,如果光照不正确3D效果会完全消失。 例如,一个有着不透明颜色的球,如果没有光照,球的所有像素将会是相同的颜色,在屏幕上看起来像一个平面的盘子。当光照正确时,球上面对光照的部分比其他部分的颜色更亮,使球看起来是一个真实的3D对象。 解决方案 在计算机图形学中,所有的3D对象都是由三角形组成的。你想使三角形对应入射光可以正确地被照亮。图6-... 阅读全文
posted @ 2011-02-14 14:25 AlexCheng 阅读(467) 评论(0) 推荐(0)
摘要: 给场景添加光照听起来很简单:设置3D世界中物体的位置,定义光源的位置就可以了。但是,虽然看起来让显卡实现光照很简单,其实不是。 对物体的每个表面,显卡需要计算表面接受光照的数量,这个光照数量是基于光线方向和表面法线方向的夹角的。幸运的是,XNA框架拥有BasicEffect,它可以为你进行所有的计算。本章第一部分解释如何使用BasicEffect给场景添加光照。 但是,如它的名称所示,Basi... 阅读全文
posted @ 2011-02-14 14:22 AlexCheng 阅读(220) 评论(0) 推荐(0)
摘要: 问题 给定三维空间中的一个基点集合,你想创建一条通过所有点的赛道。你想创建顶点,计算法线,在赛道上贴上纹理。 解决方案 你可以经过几个步骤从3D点的集合创建一个赛道。首先使用教程5-16中讨论的3维Catmull-Rom插值生成位于你预定义的点之间的样条上的额外点。第一步可用图5-33中的从“a”指向“b的箭头表示”。 基于这些点无法定义三角形。对样条上的每个点,你要计算垂直于样条的方向,... 阅读全文
posted @ 2011-02-14 14:17 AlexCheng 阅读(317) 评论(0) 推荐(0)
摘要: 问题 给定一个3D空间中的点序列,你想构建一个漂亮的,光滑曲线可以通过所有这些点。图5-32中的黑色曲线显示了这样条曲线,灰色线段表示使用简单的线性插值的情况,可参见教程5-9。 图5-32 通过5点的Catmul-Rom样条(spline) 这在许多情况中是很用的。例如,你可以用它产生一个赛道,可参见教程5-17。当相机非常靠近模型或地形时,你可以使用Catmull-Rom插值产... 阅读全文
posted @ 2011-02-14 14:14 AlexCheng 阅读(871) 评论(0) 推荐(0)
摘要: 问题 你可以在CPU上计算所有波的3D位置,但这样做会消耗大量的资源,每帧向显卡发送大量的数据是不可接受的。 解决方案 在XNA程序中,你只需创建一个三角形组成的平面网格。这和创建地形类似,在教程5-8中已经解释过了,只不过这次网格是平的,你将需一次性地把这些数据传递到显卡。当绘制网格时,vertex shader会在网格上添加水波,pixel shader添加反射,这一切都在GPU中完成,... 阅读全文
posted @ 2011-02-14 14:12 AlexCheng 阅读(600) 评论(0) 推荐(1)
摘要: 问题 虽然前一个教程中具有不变法线的平面物体工作良好,但如果对一个曲面或有转角的表面进行凹凸映射仍会遇到麻烦。 主要问题是包含在凹凸映射中的偏离法线是在切线空间中的,这意味着它与默认法线有联系。 为了形象化的说明这个问题,设想绘制一个圆柱体,如图5-30所示。左图表示圆柱体顶点的默认法线。 图5-30 圆柱体的默认法线和凹凸映射法线 想象一下你想对这个圆柱体使用凹凸映射。例如,... 阅读全文
posted @ 2011-02-14 14:06 AlexCheng 阅读(559) 评论(0) 推荐(0)
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 39 下一页