Part I 空气曲棍球 Chapter6(6.3 Adding the W Component to Create Perspective)

6.3 使用w分量创建透视效果(Adding the W Component to Create Perspective)

    假如我们能在实践中看到w分量的效果,那么就能够更容易理解w分量的作用,因此我们把它加入到桌面顶点数据中并看看会产生什么效果。因为对于一个顶点我们将会指定x、y、z、w四个分量,因为我们将按照如下代码更新变量POSITION_COMPONENT_COUNT 的值:

//AirHockey3D/src/com/airhockey/android/AirHockeyRenderer.java
private static final int POSITION_COMPONENT_COUNT = 4;

    我们需要确定给OpenGL传递了正确的分量数量,否则我将不会得到想要的结果或者将会直接导致应用崩溃。
    下一步是按照如下代码更新顶点数据:

//AirHockey3D/src/com/airhockey/android/AirHockeyRenderer.java
float[] tableVerticesWithTriangles = {
    // Order of coordinates: X, Y, Z, W, R, G, B
    // Triangle Fan
       0f,    0f, 0f,  1.5f,   1f,   1f,   1f,
    -0.5f, -0.8f, 0f,    1f, 0.7f, 0.7f, 0.7f,
     0.5f, -0.8f, 0f,    1f, 0.7f, 0.7f, 0.7f,
     0.5f,  0.8f, 0f,    2f, 0.7f, 0.7f, 0.7f,
    -0.5f,  0.8f, 0f,    2f, 0.7f, 0.7f, 0.7f,
    -0.5f, -0.8f, 0f,    1f, 0.7f, 0.7f, 0.7f,
    // Line 1
    -0.5f,    0f, 0f,  1.5f,   1f,   0f,   0f,
     0.5f,    0f, 0f,  1.5f,   1f,   0f,   0f,
      0f,  -0.4f, 0f, 1.25f,   0f,   0f,   1f,
      0f,   0.4f, 0f, 1.75f,   1f,   0f,   0f
};

    在顶点数组中增加了z、w两个分量,所有位于屏幕底部的顶点的w分量为1,位于位于屏幕顶部的顶点的w分量为2;我们同时更新了中心分隔线及两个球体(目前是两个点)拥有一个位于两者之间w分量。这将会有一种使得桌面顶部比桌面底部小的效果,就像是我们从一端看向另一端时所产生的效果一样。同时我们把所有的z分量设置为0,因为我们在z轴上并没有真正要显示的东西来获得一个透视投影的效果。
    OpenGL将会自动使用w分量执行透视分割的操作,而我们现在的正交投影仅仅只是拷贝w分量而已;现在运行我们项目将会看到如下所示的效果:

    现在看起来更有一种3D的感觉了,而我们做的仅仅只是加入了w分量而已;但是假如我们想让事情变得更复杂些呢,比如改变桌面的方向或者放大或者缩小呢?我们将不再直接写死w分量,而是使用矩阵为我们产生所需要的w分量。现在还原刚刚的所有修改,在下一节中我们将会学习如何使用透视投影矩阵自动产生所需要的w分量。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值