Q96:PT(3.5):木纹纹理(Wood Texture)
标题中的“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)相关推荐
- CUDA C 纹理提取Texture Fetching
CUDA C 纹理提取Texture Fetching 一.参数曲面的纹理 使用纹理指定参数曲面属性. 二.CUDA C 纹理获取开发 用于计算纹理函数,根据纹理引用的各种属性返回的值的公式(请参见纹 ...
- 初识OpenGL (-)纹理过滤(Texture Filtering)
1. OpenGL需要知道怎样将纹理像素(Texture Pixel,也叫Texel)映射到纹理坐标. 纹理坐标 不依赖于分辨率(Resolution),它可以是任意浮点值, 给模型顶点设置的那个数组 ...
- cuda 纹理内存texture使用时显示不是模板解决办法
按教程使用纹理内存texture时显示 texture不是模板. 网上找了半天,只知道这个报错是VS没有识别的问题,运行起来并没有实质性影响. 但是一条红线在这画着总觉得很别扭,于是就想取消它,最终给 ...
- 【OpenGL】OpenGL入门之纹理(Texture)
目录 纹理 纹理环绕方式 纹理过滤 多级渐远纹理(Mipmap) 加载与创建纹理 stb_image.h 生成纹理 应用纹理 纹理单元 参考 纹理 在此之前,我们已经可以为每个顶点添加颜色来增加图 ...
- Threejs纹理对象Texture阵列、偏移、旋转(纹理动画)
纹理对象Texture阵列.偏移.旋转 本文是Three.js电子书的8.4节 8.1节给大家提到过纹理对象Texture,简单的说纹理对象Texture就是包含一张图片的对象,纹理对象Texture ...
- opengl地球贴纹理_一文看懂材质/纹理 Material, Texture, Shading, Shader 的区别
在计算机图形学和三维设计中,有几个容易混淆的概念.今天我们来一举拿下. 概念整理 可以这么总结: Material 是表现 Shading 的数据集.其他几个概念都是生成这一数据集的资源或者工具. 这 ...
- starling教程-纹理(Texture)
texture是被创建来填充Image对象的,Texture和Image的关系就好像是本地的BitmapData和Bitmap的关系一样.Texture类包含如下的apis: • base : Th ...
- spine 导出纹理_Spine 纹理打包Texture packing_官方文档中文版
马上注册,加入CGJOY,让你轻松玩转CGJOY. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 笑虾 于 2014-10-7 20:45 编辑 欢迎入群 Spine2D骨骼动 ...
- 卷积神经网络图像纹理合成 Texture Synthesis Using Convolutional Neural Networks
卷积神经网络的图像纹理合成 TextureSynthesis Using Convolutional Neural Networks Taylor Guo, 2017年4月29日 星期六 摘要 本文介 ...
最新文章
- inux系统中如何进入退出vim编辑器
- 收藏网站制作常用经典css.div.布局.设计实例打包下载
- 坚果云开发团队分享高效代码审查经验
- 云图说|读请求太多怎么办?一键读写分离来帮忙
- Android开发笔记(一百一十六)网络学习资源
- FreeMarker基本操作(二)
- day08【后台】权限控制-上
- 计算机网络与通信pdf谢希仁_考情分析|2020年同济大学计算机考研考情分析
- 6,JESD204B接口简介
- 图论(graph)相关算法总结
- 把你的 Mac 从 Catalina 降级回 Mojave 系统的避坑指南
- excel 宏把多个工作表合并成一个工作表
- 关于keras.sum()和kears.softmax()等函数中维度的理解
- 数据结构软件测试,资讯详情-java常见数据结构-柠檬班-自动化测试-软件测试培训-自学官网...
- 微信小程序 MinUI 组件库系列之 abnor 异常流组件
- 改变屏幕显示方向,让屏幕显示旋转
- 文字翻译器有哪些?文字翻译器哪个好?
- springboot + Vue 整合阿里云视频点播 | Spring Boot 20
- 小米手机产品全球不再使用“MI”品牌,改用“xiaomi”全称品牌
- 微信公众号config:invalid signature签名失效
热门文章
- xshell登陆腾讯云服务器
- 7-14 与数据库相连
- 浅谈MySQL索引背后的数据结构及算法
- Leetcode 278.第一个错误的版本
- Latex中的常用公式模板
- script标签中type为script type=text/x-template是个啥
- 产品原型设计5:移动App原型设计神器 - POP(Prototyping on Paper)
- 【Android学习】三种布局include /、merge /、ViewStub /
- linux基本使用(一)
- angularjs 学习笔记(一) -----JSONP跨站访问