标题中的“PT”表示:Procedural Texture(过程纹理)。表示该章节属于“过程纹理”的内容。
当前章节在“过程纹理”内容中的位置:
过程纹理(0)——概述
过程纹理(1)——方格纹理(1)——3D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(1)——平面2D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(2)——球面2D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(3)——圆柱2D方格纹理
过程纹理(2)——纹理的仿射变换
过程纹理(3)——基于噪声的纹理(0)——概述
过程纹理(3)——基于噪声的纹理(1)——Basic Noise Texture
过程纹理(3)——基于噪声的纹理(2)——Wrapped Noise Texture
过程纹理(3)——基于噪声的纹理(3)——Marble
过程纹理(3)——基于噪声的纹理(4)——Sandstone Texture
过程纹理(3)——基于噪声的纹理(5)——Wood Texture

0,引言

该章节的内容理论参考:
《Advanced RenderMan》2000版本的12.4章节”Wood Grain”。

代码来自与《Ray Tracing from the Ground Up》作者按照《Advanced RenderMan》算法整理的C++代码。

本章节的内容,主要是个人对上面这两部分知识的理解和测试。

1,Wood类的基本版本


测试代码:

#define TYPE 0
// TYPE = 0: (0,1,0)
// TYPE = 1: (0,0,1)void
World::build(void) {int num_samples = 9;vp.set_hres(300);vp.set_vres(300);vp.set_samples(num_samples);tracer_ptr = new RayCast(this);background_color = black;Ambient* ambient_ptr = new Ambient;ambient_ptr->scale_radiance(1.0);set_ambient_light(ambient_ptr);Pinhole* pinhole_ptr = new Pinhole;
#if TYPE == 0pinhole_ptr->set_eye(0, 100, 0);
#elsepinhole_ptr->set_eye(0, 0, 100);
#endif // TYPEpinhole_ptr->set_lookat(0.0);pinhole_ptr->set_view_distance(15000.0);pinhole_ptr->compute_uvw();set_camera(pinhole_ptr);Directional* light_ptr = new Directional;
#if TYPE == 0light_ptr->set_direction(0, 1, 0);
#elselight_ptr->set_direction(0, 0, 1);
#endif // TYPElight_ptr->scale_radiance(4.0);add_light(light_ptr);// wood texture// This Wood constructor just specifies the light and dark colors.// The other parameters are defaults.RGBColor light_color(0.5, 0.2, 0.065);RGBColor dark_color(0.05);Wood* wood_ptr = new Wood(light_color, dark_color);wood_ptr->set_grainy(1.0);wood_ptr->set_ringy(1.0);InstanceTexture* transformed_wood_ptr = new InstanceTexture(wood_ptr);transformed_wood_ptr->scale(0.4);
//  transformed_wood_ptr->rotate_x(5); // for figure 3// materialSV_Matte* sv_matte_ptr = new SV_Matte;sv_matte_ptr->set_ka(0.75);sv_matte_ptr->set_kd(0.85);sv_matte_ptr->set_cd(transformed_wood_ptr);// planePoint3D p0(0.0, 0.0, 0.0);#if TYPE == 0Plane* plane_ptr = new Plane(p0, Normal(0, 1, 0));
#elsePlane* plane_ptr = new Plane(p0, Normal(0, 0, 1));
#endif // TYPEplane_ptr->set_material(sv_matte_ptr);add_object(plane_ptr);
}

输出图形:
(前边的是从+y方向向原点看的图形;后边的是从+z方向向原点看的图形)

2,添加各种噪声

2.1 第一步:添加“整体噪声”

输出图形:
(前边的是从+y方向向原点看的图形;后边的是从+z方向向原点看的图形)

2.2 第二步:给树干添加噪声

输出图形:
(前边的是从+y方向向原点看的图形;后边的是从+z方向向原点看的图形)

2.3 第三步:给年轮加“角度噪声”

输出图形:
(前边的是从+y方向向原点看的图形;后边的是从+z方向向原点看的图形)

2.4 第四步:给年轮的半径加噪声


输出图形:
(前边的是从+y方向向原点看的图形;后边的是从+z方向向原点看的图形)

(这种状态的木纹纹理,远看还OK,但是近看则显得有失真实)

2.5 第五步:加产生“细碎纹理”的噪声


输出图形:
(前边的是从+y方向向原点看的图形;后边的是从+z方向向原点看的图形)

(从这个图形中可以看出前面提到的“细长细长的细碎纹理”)

3,其他测试图形

3.1 测试代码

void
World::build(void) {int num_samples = 16;vp.set_hres(300);vp.set_vres(300);vp.set_samples(num_samples);vp.set_gamut_display(true);background_color = RGBColor(0.5);tracer_ptr = new RayCast(this);Pinhole* pinhole_ptr = new Pinhole;pinhole_ptr->set_eye(0, 20, 100); // sphere: (0, 0, 100)pinhole_ptr->set_lookat(0.0);pinhole_ptr->set_view_distance(4750.0);pinhole_ptr->compute_uvw();set_camera(pinhole_ptr);PointLight* light_ptr = new PointLight;light_ptr->set_location(10, 10, 20);light_ptr->scale_radiance(2.5);add_light(light_ptr);// wood texture// This Wood constructor just specifies the light and dark colors.// The other parameters are defaults.RGBColor light_color(0.5, 0.2, 0.065);RGBColor dark_color(0.05);Wood* wood_ptr = new Wood(light_color, dark_color);wood_ptr->set_grainy(1.0);wood_ptr->set_ringy(1.0);InstanceTexture* transformed_wood_ptr = new InstanceTexture(wood_ptr);transformed_wood_ptr->scale(0.4);
//  transformed_wood_ptr->rotate_z(110);// material:SV_Matte* sv_matte_ptr = new SV_Matte;sv_matte_ptr->set_ka(0.25);sv_matte_ptr->set_kd(0.85);sv_matte_ptr->set_cd(transformed_wood_ptr);// the sphere://  Sphere* sphere_ptr = new Sphere();SolidCylinder* sphere_ptr = new SolidCylinder();Instance* instance_ptr = new Instance(sphere_ptr);instance_ptr->scale(2.0);
//  instance_ptr->rotate_x(-60);
//  instance_ptr->rotate_y(-30);instance_ptr->set_material(sv_matte_ptr);add_object(instance_ptr);
}

3.2 输出图形

给球面添加木纹:

给圆柱添加木纹:

4,其他说明

完整代码下载路径:http://download.csdn.net/detail/libing_zeng/9800234

Referrance:
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.
[2]. Anthony A. Apodaca, Larry Gritz, Advanced RenderMan, Academic Press, 2000.

Q96:PT(3.5):木纹纹理(Wood Texture)相关推荐

  1. CUDA C 纹理提取Texture Fetching

    CUDA C 纹理提取Texture Fetching 一.参数曲面的纹理 使用纹理指定参数曲面属性. 二.CUDA C 纹理获取开发 用于计算纹理函数,根据纹理引用的各种属性返回的值的公式(请参见纹 ...

  2. 初识OpenGL (-)纹理过滤(Texture Filtering)

    1. OpenGL需要知道怎样将纹理像素(Texture Pixel,也叫Texel)映射到纹理坐标. 纹理坐标 不依赖于分辨率(Resolution),它可以是任意浮点值, 给模型顶点设置的那个数组 ...

  3. cuda 纹理内存texture使用时显示不是模板解决办法

    按教程使用纹理内存texture时显示 texture不是模板. 网上找了半天,只知道这个报错是VS没有识别的问题,运行起来并没有实质性影响. 但是一条红线在这画着总觉得很别扭,于是就想取消它,最终给 ...

  4. 【OpenGL】OpenGL入门之纹理(Texture)

    目录 纹理 纹理环绕方式 纹理过滤 多级渐远纹理(Mipmap) 加载与创建纹理 stb_image.h 生成纹理 应用纹理 纹理单元 参考 纹理   在此之前,我们已经可以为每个顶点添加颜色来增加图 ...

  5. Threejs纹理对象Texture阵列、偏移、旋转(纹理动画)

    纹理对象Texture阵列.偏移.旋转 本文是Three.js电子书的8.4节 8.1节给大家提到过纹理对象Texture,简单的说纹理对象Texture就是包含一张图片的对象,纹理对象Texture ...

  6. opengl地球贴纹理_一文看懂材质/纹理 Material, Texture, Shading, Shader 的区别

    在计算机图形学和三维设计中,有几个容易混淆的概念.今天我们来一举拿下. 概念整理 可以这么总结: Material 是表现 Shading 的数据集.其他几个概念都是生成这一数据集的资源或者工具. 这 ...

  7. starling教程-纹理(Texture)

    texture是被创建来填充Image对象的,Texture和Image的关系就好像是本地的BitmapData和Bitmap的关系一样.Texture类包含如下的apis: •  base : Th ...

  8. spine 导出纹理_Spine 纹理打包Texture packing_官方文档中文版

    马上注册,加入CGJOY,让你轻松玩转CGJOY. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 笑虾 于 2014-10-7 20:45 编辑 欢迎入群  Spine2D骨骼动 ...

  9. 卷积神经网络图像纹理合成 Texture Synthesis Using Convolutional Neural Networks

    卷积神经网络的图像纹理合成 TextureSynthesis Using Convolutional Neural Networks Taylor Guo, 2017年4月29日 星期六 摘要 本文介 ...

最新文章

  1. inux系统中如何进入退出vim编辑器
  2. 收藏网站制作常用经典css.div.布局.设计实例打包下载
  3. 坚果云开发团队分享高效代码审查经验
  4. 云图说|读请求太多怎么办?一键读写分离来帮忙
  5. Android开发笔记(一百一十六)网络学习资源
  6. FreeMarker基本操作(二)
  7. day08【后台】权限控制-上
  8. 计算机网络与通信pdf谢希仁_考情分析|2020年同济大学计算机考研考情分析
  9. 6,JESD204B接口简介
  10. 图论(graph)相关算法总结
  11. 把你的 Mac 从 Catalina 降级回 Mojave 系统的避坑指南
  12. excel 宏把多个工作表合并成一个工作表
  13. 关于keras.sum()和kears.softmax()等函数中维度的理解
  14. 数据结构软件测试,资讯详情-java常见数据结构-柠檬班-自动化测试-软件测试培训-自学官网...
  15. 微信小程序 MinUI 组件库系列之 abnor 异常流组件
  16. 改变屏幕显示方向,让屏幕显示旋转
  17. 文字翻译器有哪些?文字翻译器哪个好?
  18. springboot + Vue 整合阿里云视频点播 | Spring Boot 20
  19. 小米手机产品全球不再使用“MI”品牌,改用“xiaomi”全称品牌
  20. 微信公众号config:invalid signature签名失效

热门文章

  1. xshell登陆腾讯云服务器
  2. 7-14 与数据库相连
  3. 浅谈MySQL索引背后的数据结构及算法
  4. Leetcode 278.第一个错误的版本
  5. Latex中的常用公式模板
  6. script标签中type为script type=text/x-template是个啥
  7. 产品原型设计5:移动App原型设计神器 - POP(Prototyping on Paper)
  8. 【Android学习】三种布局include /、merge /、ViewStub /
  9. linux基本使用(一)
  10. angularjs 学习笔记(一) -----JSONP跨站访问