Part I 空气曲棍球 Chapter8(8.2 Adding a Geometry Class)

8.2 定义形体(Adding a Geometry Class)

    我们现在已经明确的知道需要些什么去构建冰球及球棍;为了构建冰球,我们使用triangle fan命令构建冰球的顶部,再使用triangle strip构建冰球的边缘;为了构建球棍,我们需要使用两个triangle fan及两个triangle strip;为了使得构建这些形体变得更容易,我们将会增加一个定义基本形体的Geometry类,并使用ObjectBuilder执行实际的构建命令。
    tips: 为什么不使用第三方库?
    确实存在几十个用于Android的3D库,比如libgdxUnity3D,这些库可以提高你的效率,但是这是只有你理解OpenGL的一些基础、3D渲染以及这些机制是如何在底层完成工作之后;否则的话使用起来也没那么容易;举个例子:框架Spring及Hibernate可以使得java开发更有效率,但是如果你直接使用它的话你将不会理解Java是如何运作的。
    学习这些库也可以让你了解如何构建你自己的组件,Java3D jMonkeyEngine在桌面应用上面使用得比较多,由于相关文档比较容易获得所以他们都可以作为你学习的开始。

    现在开始构建Geometry类,在com.airhockey.android.util.包下面创建类Geometry,并增加如下代码:

//AirHockeyWithImprovedMallets/src/com/airhockey/android/util/Geometry.java
public static class Point {
    public final float x, y, z;
    public Point(float x, float y, float z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
    public Point translateY(float distance) {
        return new Point(x, y + distance, z);
    }
}

    我们定义了一个3D空间中的顶点以及一个可以沿y轴移动顶点的辅助方法,我们也需要定义一个圆,在Point类的后面增加如下代码:

//AirHockeyWithImprovedMallets/src/com/airhockey/android/util/Geometry.java
public static class Circle {
    public final Point center;
    public final float radius;
    public Circle(Point center, float radius) {
        this.center = center;
        this.radius = radius;
    }
    public Circle scale(float scale) {
        return new Circle(center, radius * scale);
    }
}

    同时增加了一个可以缩放加的辅助方法,最后增加圆柱的定义,代码如下:

//AirHockeyWithImprovedMallets/src/com/airhockey/android/util/Geometry.java
public static class Cylinder {
    public final Point center;
    public final float radius;
    public final float height;
    public Cylinder(Point center, float radius, float height) {
        this.center = center;
        this.radius = radius;
        this.height = height;
    }
}

    圆柱就像是一个拉伸了的圆,因此我们定义了中心坐标、半径以及高度。
    你可能已经注意到这里把Geometry类定义为immutable类型,当需要做些改变的时候,我们将会返回一个新的对象;这将会使得代码理容易使用及理解,但是当你需要考虑性能的时候你可能需要使用一个简单的float数组存储数据并提供改变他们的静态辅助方法。
    下一节我们将会定义一个对象构建者(点击进入下一节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值