本文整理汇总了C#中Texture.Evaluate方法的典型用法代码示例。如果您正苦于以下问题:C# Texture.Evaluate方法的具体用法?C# Texture.Evaluate怎么用?C# Texture.Evaluate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Texture
的用法示例。
在下文中一共展示了Texture.Evaluate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Bump
protected static DifferentialGeometry Bump(Texture<float> d,
DifferentialGeometry dgGeom,
DifferentialGeometry dgs)
{
// Compute offset positions and evaluate displacement texture
DifferentialGeometry dgEval = dgs;
// Shift _dgEval_ _du_ in the $u$ direction
float du = .5f * (Math.Abs(dgs.DuDx) + Math.Abs(dgs.DuDy));
if (du == 0.0f)
du = .01f;
dgEval.Point = dgs.Point + du * dgs.DpDu;
dgEval.U = dgs.U + du;
dgEval.Normal = Normal.Normalize((Normal) Vector.Cross(dgs.DpDu, dgs.DpDv) +
du * dgs.DnDu);
float uDisplace = d.Evaluate(dgEval);
// Shift _dgEval_ _dv_ in the $v$ direction
float dv = .5f * (Math.Abs(dgs.DvDx) + Math.Abs(dgs.DvDy));
if (dv == 0.0f)
dv = .01f;
dgEval.Point = dgs.Point + dv * dgs.DpDv;
dgEval.U = dgs.U;
dgEval.V = dgs.V + dv;
dgEval.Normal = Normal.Normalize((Normal) Vector.Cross(dgs.DpDu, dgs.DpDv) + dv * dgs.DnDv);
float vDisplace = d.Evaluate(dgEval);
float displace = d.Evaluate(dgs);
// Compute bump-mapped differential geometry
var dgBump = dgs.Clone();
dgBump.DpDu = dgs.DpDu + (uDisplace - displace) / du * (Vector)dgs.Normal +
displace * (Vector)dgs.DnDu;
dgBump.DpDv = dgs.DpDv + (vDisplace - displace) / dv * (Vector)dgs.Normal +
displace * (Vector)dgs.DnDv;
dgBump.Normal = (Normal) Vector.Normalize(Vector.Cross(dgBump.DpDu, dgBump.DpDv));
if (dgs.Shape.ReverseOrientation ^ dgs.Shape.TransformSwapsHandedness)
dgBump.Normal *= -1.0f;
// Orient shading normal to match geometric normal
dgBump.Normal = Normal.FaceForward(dgBump.Normal, dgGeom.Normal);
return dgBump;
}