12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 6829|回复: 14
打印 上一主题 下一主题

[Java3D] Java3D探奇(六)——材质贴图

[复制链接]

1026

主题

1

听众

6011

积分

高级设计师

Rank: 6Rank: 6

纳金币
5996
精华
1

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2011-8-5 11:48:26 |只看该作者 |倒序浏览
材质贴图


材质贴图通过增加对象表面的额外视觉细节来增强场景的真实感。

假定您想在场景中绘制一堵石头墙。您可以为每块石头、每片灰泥定义几何对象,然后将渲染所有这些对象以模拟这堵石头墙。那样做的工作量会很大。一个替代的方法是使用材质贴图。在本例中,您可以使用一个矩形对象来表示整堵墙,然后将一副石头墙的图像粘贴到该矩形上(如随 Java 3D 提供的 stone.jpg 图像)。

为了使用材质贴图,您需要指定图像,要将该图像粘贴到对象的位置,以及当图像不能和粘贴位置完全吻合时该如何处理,例如将一副矩形位图粘贴到一个非矩形多边形上。在本节的余下部分中,我们将讨论这些任务。

近年来,材质贴图硬件方面的技术进展是突飞猛进的,从而产生了相当复杂的问题,该问题已超出了本教程的范围。如果您对材质贴图的更高级的细节感兴趣,我推荐您学习 Sun 的 Java 3D 网站上的实用材质的教程。



装入材质


同光照一样,材质贴图影响整个几何对象。我们将再一次使用 Appearance 类来指定材质贴图效果。

Java 3D 简化了装入材质图像的过程。TextureLoader 类位于 Java 3D 实用类中:



TextureLoader texLoader = new TextureLoader(url,imageobserver)

appearance.setTexture(texLoader.getTexture());



为了看起来更真实,请总是将材质图像的宽度和高度设置成 2 的幂。其它的值会导致 TextureLoader 将材质压变形。

如果图像文件只有 RGB 值,而没有 alpha 值,则使用:



TextureLoader texLoader = new TextureLoader(url,new String("RGB"), imageobserver)



粘贴到图像上


既然我们已经装入了一幅材质图,我们需要指定如何将它粘贴到对象上。我们通过对每个顶点使用材质坐标来完成这一任务。材质坐标定义了对您的对象的每个多边形使用材质图像的哪一块。一个有用的类比是想象如何将包装纸包装到礼品上。

幸运的是,Primitive 类将为您生成材质坐标 ― 就象它们为计算光照生成法线一样。

如果您没有使用 Primitive 类,那么您需要自己定义材质坐标。要完成这一任务,同时在 x 和 y 方向指定介于 0.0 和 1.0 之间的值。以石头墙为例,我们需要为石头墙的每一个角指定材质坐标。假定我们要在墙壁上使用整幅石头图像,我们需要为四个角中的每个角指定一个坐标:(0,0)、(1,0)、(1,1) 和(0,1)。这会将整个石头图像在组成这堵墙的矩形中拉伸。









压缩和拉伸材质


当需要将矩形材质用于非矩形区域时,材质贴图会变得复杂。将材质粘贴到对象上时对其进行的压缩或拉伸被称为过滤。

过滤时,如果提供材质的不同尺寸的表示(小地图)供 Java 3D 使用,材质贴图看起来将更真实。

有几种方法可用于过滤材质。您可以根据显卡的性能和期望的外观来选择过滤类型。您需要做一些尝试来确定哪种方式看起来最好。


材质贴图示例



该文件使用材质贴图的 Primitive。记住 Primitive 类将生成用于定义图像在对象上的粘贴位置的材质坐标。我们的示例使用 TextureLoader 实用程序来读入一幅 jpeg 图像并生成在 MIP 贴图中所用的过滤图像。请注意如何将材质压入球的两极和圆锥的锥顶。在每一个锥体/球体对中都使用了不同的材质过滤。您可以注意到在红色条纹和白色条纹之间的边界上的过滤差别。

为了让材质装入器为您生成预过滤图像,请在构造 TextureLoader 时指定 GENERATE_MIPMAP。在您的 Texture 对象(存储在 Appearance 对象中)指定 MIP 贴图过滤函数。







材质贴图要点



·材质贴图是一个将图像粘贴到几何对象上的过程。使用每个顶点的材质坐标来控制图像的方向和在几何对象上的位置。



·使用 TextureLoader 实用程序读入图像文件,并在构造函数中指定 TextureLoader.GENERATE_MIPMAP 标志。



·无需您亲自指定材质坐标,让 Primitive 类为您生成。在构造 Primitive 时,使用 Primitive.GENERATE_TEXTURE_COORDS。



·材质贴图是一个复杂的主题。不要急于掌握所有不同的选项。刚开始时可以使用缺省值。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2011-8-10 17:01:19 |只看该作者
“再次路过……”我造一个-----特别路过
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-1-28 23:26:26 |只看该作者
在关爱中让友情更深,在牵挂中让亲情更暖,在老实中让心底更静,在简单中让生活更美,在问候中让祝福更好,在祝福中让春节更快乐!
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-3-20 23:30:38 |只看该作者
好铁多多发,感激分享
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

5#
发表于 2012-3-29 23:24:13 |只看该作者
水。。。
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2012-4-6 23:32:01 |只看该作者
再次路过……
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2012-4-8 23:25:21 |只看该作者
凡系斑竹滴话要听;凡系朋友滴帖要顶!
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

8#
发表于 2012-4-14 23:24:45 |只看该作者
頂。。。
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2012-7-23 23:25:49 |只看该作者
都闪开,介个帖子,偶来顶
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2012-8-19 23:46:34 |只看该作者
呵呵,真得不错哦!!
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-21 13:36 , Processed in 0.091441 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部