`
izuoyan
  • 浏览: 9222802 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 3D帖图扭曲

阅读更多

作者:whycloud 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=806

在上一篇Mascot Capsule 3D的技巧文章中(创建Java 3D MIDlet的技巧)提及帖图扭曲的问题是建立3D模型时产生的。该篇文章将在更深程度上解释这个问题,并给出该问题的解决办法。我们将集中经理在讨论一种最普遍的扭曲上,那就是片面不垂直摄影机引起的扭曲。

让我们来看一个最直接的例子。下面的两张图片展示了最简单的3D盒子,一个是没有帖图,一个是有帖图的。所有的一切看上去都没有问题,并且盒子和帖图看上去也没有问题。




在接下来的两个张图片中我们看到是同一个盒子,仅仅是相对摄影机旋转了一定的角度。通过透视法上下两个边会有一定的倾斜度。



这时就出现了一个以外,帖图看起来不在是这么好了。帖图非常清楚的发生了扭曲。究竟是发生了什么?这里要告诉大家,这个盒子在实质是由三角面构成。当发布帖图到三角面的时候,电脑并没有真正地依照透视法则改变帖图;而仅仅是将歪斜地位图放到了三角面上。所以上下两条边看起来是没有问题地,但左上方地砖块是根据定边设置,而右下方地砖块是根据底边设置地,在两个三角面相交地地方就很明显地发生了变形。

我们想要看到的是符合透视法则的砖。我们想要看到的是顶边和底边中间平滑的砖的形状,也就是中间的砖或多或少的平行的砖。然而在上面的图片中事实不是这样的。相反的所有的边都是平行于顶边或底边,并且中间并不是一个平滑的过渡。

一个解决的办法,就是下面的四张图片,我们可以增加组成这墙的三角面的数量。

电脑仍然像以前一样渲染每个多边形,只是多安装了些位图。现在我们有更多三角面,三角面之间的衔接也就更光滑了。

这个方法,只是简单的找了一个在三角面数量和最小可接受的扭曲的折中点。因为这样会带来处理时间延长。

另一个简单的解决办法是使用不对称的帖图来代替砖块帖图。如果你这样做,你可以使用最小的三角面数量,但是看起来仍然没有问题,就像下面的图片。比较下面的四张画面,你会发现它确实改进了很多。

译者心得:这篇文章虽然是在Mascot Capsule 3D范围内,但是JSR184同样存在这个问题,所以个人觉得不论你学习或制作3D程序,使用的是Mascot Capsule 3D或JSR184都应该好好的理解一下UV帖图的原理。

这时就出现了一个以外,帖图看起来不在是这么好了。帖图非常清楚的发生了扭曲。究竟是发生了什么?这里要告诉大家,这个盒子在实质是由三角面构成。当发布帖图到三角面的时候,电脑并没有真正地依照透视法则改变帖图;而仅仅是将歪斜地位图放到了三角面上。所以上下两条边看起来是没有问题地,但左上方地砖块是根据定边设置,而右下方地砖块是根据底边设置地,在两个三角面相交地地方就很明显地发生了变形。

我们想要看到的是符合透视法则的砖。我们想要看到的是顶边和底边中间平滑的砖的形状,也就是中间的砖或多或少的平行的砖。然而在上面的图片中事实不是这样的。相反的所有的边都是平行于顶边或底边,并且中间并不是一个平滑的过渡。

一个解决的办法,就是下面的四张图片,我们可以增加组成这墙的三角面的数量。

电脑仍然像以前一样渲染每个多边形,只是多安装了些位图。现在我们有更多三角面,三角面之间的衔接也就更光滑了。

这个方法,只是简单的找了一个在三角面数量和最小可接受的扭曲的折中点。因为这样会带来处理时间延长。

另一个简单的解决办法是使用不对称的帖图来代替砖块帖图。如果你这样做,你可以使用最小的三角面数量,但是看起来仍然没有问题,就像下面的图片。比较下面的四张画面,你会发现它确实改进了很多。

译者心得:这篇文章虽然是在Mascot Capsule 3D范围内,但是JSR184同样存在这个问题,所以个人觉得不论你学习或制作3D程序,使用的是Mascot Capsule 3D或JSR184都应该好好的理解一下UV帖图的原理。

在接下来的两个张图片中我们看到是同一个盒子,仅仅是相对摄影机旋转了一定的角度。通过透视法上下两个边会有一定的倾斜度。



这时就出现了一个以外,帖图看起来不在是这么好了。帖图非常清楚的发生了扭曲。究竟是发生了什么?这里要告诉大家,这个盒子在实质是由三角面构成。当发布帖图到三角面的时候,电脑并没有真正地依照透视法则改变帖图;而仅仅是将歪斜地位图放到了三角面上。所以上下两条边看起来是没有问题地,但左上方地砖块是根据定边设置,而右下方地砖块是根据底边设置地,在两个三角面相交地地方就很明显地发生了变形。

我们想要看到的是符合透视法则的砖。我们想要看到的是顶边和底边中间平滑的砖的形状,也就是中间的砖或多或少的平行的砖。然而在上面的图片中事实不是这样的。相反的所有的边都是平行于顶边或底边,并且中间并不是一个平滑的过渡。

一个解决的办法,就是下面的四张图片,我们可以增加组成这墙的三角面的数量。

电脑仍然像以前一样渲染每个多边形,只是多安装了些位图。现在我们有更多三角面,三角面之间的衔接也就更光滑了。

这个方法,只是简单的找了一个在三角面数量和最小可接受的扭曲的折中点。因为这样会带来处理时间延长。

另一个简单的解决办法是使用不对称的帖图来代替砖块帖图。如果你这样做,你可以使用最小的三角面数量,但是看起来仍然没有问题,就像下面的图片。比较下面的四张画面,你会发现它确实改进了很多。

译者心得:这篇文章虽然是在Mascot Capsule 3D范围内,但是JSR184同样存在这个问题,所以个人觉得不论你学习或制作3D程序,使用的是Mascot Capsule 3D或JSR184都应该好好的理解一下UV帖图的原理。

这时就出现了一个以外,帖图看起来不在是这么好了。帖图非常清楚的发生了扭曲。究竟是发生了什么?这里要告诉大家,这个盒子在实质是由三角面构成。当发布帖图到三角面的时候,电脑并没有真正地依照透视法则改变帖图;而仅仅是将歪斜地位图放到了三角面上。所以上下两条边看起来是没有问题地,但左上方地砖块是根据定边设置,而右下方地砖块是根据底边设置地,在两个三角面相交地地方就很明显地发生了变形。

我们想要看到的是符合透视法则的砖。我们想要看到的是顶边和底边中间平滑的砖的形状,也就是中间的砖或多或少的平行的砖。然而在上面的图片中事实不是这样的。相反的所有的边都是平行于顶边或底边,并且中间并不是一个平滑的过渡。

一个解决的办法,就是下面的四张图片,我们可以增加组成这墙的三角面的数量。

电脑仍然像以前一样渲染每个多边形,只是多安装了些位图。现在我们有更多三角面,三角面之间的衔接也就更光滑了。

这个方法,只是简单的找了一个在三角面数量和最小可接受的扭曲的折中点。因为这样会带来处理时间延长。

另一个简单的解决办法是使用不对称的帖图来代替砖块帖图。如果你这样做,你可以使用最小的三角面数量,但是看起来仍然没有问题,就像下面的图片。比较下面的四张画面,你会发现它确实改进了很多。

译者心得:这篇文章虽然是在Mascot Capsule 3D范围内,但是JSR184同样存在这个问题,所以个人觉得不论你学习或制作3D程序,使用的是Mascot Capsule 3D或JSR184都应该好好的理解一下UV帖图的原理。

分享到:
评论

相关推荐

    Java3D实现三维显示

    Java3D 实现三维显示 Java3D 是基于 Java 平台的三维技术,用于实现三维显示。Java3D 提供了基于 Java 的上层接口,使 3D 技术变得不再繁琐,并且可以加入到 J2SE、J2EE 的整套架构。Java3D 建立在 JAVA2(JAVA1.2)...

    java3d中已经导入到程序中的模型贴图的切换

    总结起来,要在Java 3D中实现模型贴图的切换,需要掌握以下关键点: 1. 通过遍历BranchGroup获取到对应的Shape3D,然后得到Appearance对象。 2. 设置Appearance对象的capability,使其可写,允许修改纹理状态。 3. ...

    java3D官方教程

    本章会讲解如何在3D物体表面贴图,包括加载纹理图像、纹理坐标计算和纹理混合等技术。 第五章:动画与交互性 这一章重点在于如何实现3D场景的动态效果和用户交互。内容包括时间驱动的动画、响应用户输入的交互逻辑...

    java3D_jar

    纹理映射则可以让3D对象看起来更加真实,通过贴图将2D图像应用到3D模型的表面上。 总的来说,Java3D是一个强大的工具,它使得Java开发者能够在不深入学习底层图形学的情况下,轻松地构建引人入胜的3D应用。这个...

    java3d作业带有动画

    至于图片,它们可能被用作纹理贴图应用到3D物体表面,或者作为背景图像展示在3D场景中。Java3D提供了`Texture2D`和`Texture3D`类来处理二维和三维纹理。 最后,提到的"move"主类可能是整个程序的入口点,它负责初始...

    java3d 编程源码

    这个源码集合显然是针对初学者设计的,旨在帮助他们理解和应用Java3D的关键概念,如材质、纹理贴图以及OBJ文件的导入。 1. **Java3D基础知识**:Java3D的核心是 scenegraph,这是一个数据结构,用于表示3D场景中的...

    java3d_tutorial(pdf)

    Java3D的Texture类允许用户将图像贴图应用于3D模型,从而使其外观更加逼真。这部分将探讨纹理映射的原理,以及如何使用Java3D的Texture类加载和应用纹理贴图。 #### 八、行为和插值器 行为和插值器是Java3D中用于...

    java 3D(计算机图形学)

    9. **高级特性**:Java 3D还提供了高级特性,如粒子系统、光照贴图、深度缓冲等,以实现更复杂的视觉效果。 通过对这本书中提供的程序代码学习,读者不仅可以掌握Java 3D的基本用法,还能了解到计算机图形学的一些...

    计算机图形学应用java2D和java3D

    在"计算机图形学应用java3D"中,你需要理解3D坐标系、物体的建模(如多边形网格、NURBS表面)、材质与纹理贴图、光照模型以及视图控制等概念。 在实际项目中,"src"目录可能包含了实现这些功能的Java源代码文件。...

    java 3D 效果图

    ### Java 3D 效果图制作技巧及应用解析 #### 一、Java 3D 概述 Java 3D 是一个高级图形库,它为开发者提供了丰富的三维图形渲染功能,可以创建复杂的3D场景并进行交互式操作。与传统的2D图形不同,3D图形能够提供...

    JAVA3D简介.JAVA3D简介.JAVA3D简介.JAVA3D简介.

    1. **颜色和纹理**:可以为3D对象赋予不同的颜色和贴图,增加视觉效果。 2. **灯光和阴影**:模拟真实光照,创建逼真的视觉体验。 3. **行为和动画**:通过定义行为(Behavior)来实现形体的动态变化,例如运动、...

    Unity3D动画贴图、滚动纹理、滚动贴图脚本2

    Unity3D 动画贴图、滚动纹理、滚动贴图脚本详解 Unity3D 是一个功能强大且广泛应用的游戏引擎,它提供了强大的图形处理能力和动画功能。今天我们将探讨 Unity3D 动画贴图、滚动纹理、滚动贴图脚本的实现细节。 一...

    Java3D开发包

    - **纹理映射(Texture Mapping)**:在3D物体表面贴图,增加真实感。 - **视点(View Point)**:控制观察3D场景的位置和方向。 - **渲染(Rendering)**:将3D场景转化为2D图像的过程,包括深度缓冲、抗锯齿等技术...

    xingzhenglou.zip_3D建模_3d max _java 3d 3dmax

    4. **应用材质和纹理**:根据导出的数据,为3D模型分配材质和贴图。 5. **渲染和交互**:设置光照、摄像机角度,并实现用户交互,如旋转、平移和缩放模型。 通过这样的过程,3D Max和Java 3D可以协同工作,使得...

    使用java 3d编写的魔方程序

    Java 3D是一种用于构建三维图形应用程序的Java API,它为开发者提供了丰富的工具来创建复杂的三维模型、动画以及交互式场景。在这个特定的项目中,"使用java 3d编写的魔方程序"是一个利用Java 3D库实现的魔方模拟器...

    JAVA版软3D引擎源码v1.0

    《JAVA版软3D引擎源码v1.0》是一个由个人开发者花费业余时间精心编写的3D图形渲染引擎,采用Java编程语言实现。在Java领域,3D引擎的开发是一项技术含量高、挑战性大的任务,因为Java并非原生支持高性能图形处理,但...

    java 3D 基础教程

    6. **纹理映射**:理解如何在3D物体表面贴图,以增加视觉细节和真实感。 7. **动画和交互性**:探讨如何实现3D对象的动态行为,如物体的运动、用户交互以及响应事件。 8. **视口和相机控制**:了解如何设置和控制...

    Introduction to Programming with Java 3D

    ### Java 3D编程入门详解 #### 一、Java 3D API概览 Java 3D是一款跨平台的应用程序接口(API),专为在Java环境中开发三维图形应用程序设计。其核心目标是促进复杂3D应用的快速开发,同时确保在不同平台上(包括...

    Computer Graphics Using Java 2D and 3D -- 计算机图形学(应用Java2D和3D)

    Java 2D提供了丰富的功能来创建二维图形,而Java 3D则用于构建三维场景。下面,我们将深入探讨这两个API以及它们在计算机图形学中的应用。 Java 2D API是Java平台的标准组件,它扩展了基本的Java图形库,提供了一个...

Global site tag (gtag.js) - Google Analytics