这篇主要讲述在移动3D图形API中如何使用纹理对象,并且会涉及到多重纹理和纹理变换的应用。本文中的源代码可以在文章的最后下载。
在例程中用到的主要对象是一个棱锥,下面的图片就是棱锥分别在没有应用纹理、应用一种纹理和应用两种纹理情况下的效果。
例程中用到的两种纹理图像如下:
在java移动3D中用到的纹理图像的大小必须是2的非负指数幂,如(2,4,8,16,32,64,128,256)。
我们首先建立棱锥,并设置将要使用的纹理坐标。尽管棱锥只有五个点组成,但是为了能够使纹理坐标与棱锥顶点正确匹配,我们还是要为棱锥的每一个侧面都指定所需要的三个顶点。
纹理坐标的值必须在从0到1的范围内,但是在程序中我们使用0到255范围内的整数值指定了纹理的坐标,所以我们使用1.0f/255.0f这个因数将这些坐标值等比例缩小。
纹理对象的左上角对应的纹理坐标是(0,0),右下角是(1, 1)。
我们在为棱锥指定纹理坐标时,一定要清楚纹理图像一直是一个正方形,所以正上方中间的纹理坐标应该为0.5,因此我们输入127,127*(1/255) ≈ 0.5。
一定要确保TEXTURES数组和POINTS数组相匹配。点(-1, -1, 1)是棱锥前侧面的左下角,而纹理坐标的左下角是(0,1)。请注重,棱锥的底面是由两个三角形组成。