当前位置: 首页>>代码示例>>C++>>正文


C++ FloatImage::allocate方法代码示例

本文整理汇总了C++中FloatImage::allocate方法的典型用法代码示例。如果您正苦于以下问题:C++ FloatImage::allocate方法的具体用法?C++ FloatImage::allocate怎么用?C++ FloatImage::allocate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在FloatImage的用法示例。


在下文中一共展示了FloatImage::allocate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: distribution

FloatImage * nv::createNormalMipmapMap(const FloatImage * img)
{
	nvDebugCheck(img != NULL);
	
	uint w = img->width();
	uint h = img->height();
	
	uint hw = w / 2;
	uint hh = h / 2;
	
	FloatImage dotImg;
	dotImg.allocate(1, w, h);
	
	FloatImage shImg;
	shImg.allocate(9, hw, hh);
	
	SampleDistribution distribution(256);
	const uint sampleCount = distribution.sampleCount();
	
	for (uint d = 0; d < sampleCount; d++)
	{
		const float * xChannel = img->channel(0);
		const float * yChannel = img->channel(1);
		const float * zChannel = img->channel(2);
		
		Vector3 dir = distribution.sampleDir(d);
		
		Sh2 basis;
		basis.eval(dir);
		
		for(uint i = 0; i < w*h; i++)
		{
			Vector3 normal(xChannel[i], yChannel[i], zChannel[i]);
			normal = normalizeSafe(normal, Vector3(zero), 0.0f);
			
			dotImg.setPixel(dot(dir, normal), d);
		}
		
		// @@ It would be nice to have a fastDownSample that took an existing image as an argument, to avoid allocations.
		AutoPtr<FloatImage> dotMip(dotImg.fastDownSample());
		
		for(uint p = 0; p < hw*hh; p++)
		{
			float f = dotMip->pixel(p);
			
			// Project irradiance to sh basis and accumulate.
			for (uint i = 0; i < 9; i++)
			{
				float & sum = shImg.channel(i)[p];
				sum += f * basis.elemAt(i);
			}
		}
	}
	
	
	
	FloatImage * normalMipmap = new FloatImage;
	normalMipmap->allocate(4, hw, hh);
	
	// Precompute the clamped cosine radiance transfer.
	Sh2 prt;
	prt.cosineTransfer();
	
	// Allocate outside the loop.
	Sh2 sh;
	
	for(uint p = 0; p < hw*hh; p++)
	{
		for (uint i = 0; i < 9; i++)
		{
			sh.elemAt(i) = shImg.channel(i)[p];
		}
		
		// Convolve sh irradiance by radiance transfer.
		sh *= prt;
		
		// Now sh(0) is the ambient occlusion.
		// and sh(1) is the normal direction.
		
		// Should we use SVD to fit only the normals to the SH?
		
	}
	
	return normalMipmap;
}
开发者ID:DanielGeorge,项目名称:nvidia-mesh-tools,代码行数:85,代码来源:NormalMipmap.cpp


注:本文中的FloatImage::allocate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。