GLU.gluLookAt(gl, eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ)
0> 如果没有主动调用这个函数,系统默认相当于调用了GLU.gluLookAt(gl, 0, 0, 0, 0, 0, 0, 0, 1, 0);
调用gl.glTranslatef(0,0,-1); 这个API后看到的效果等同于调用了GLU.gluLookAt(gl, 0, 0, 1, 0, 0, 0, 0, 1, 0);但调用后者不会影响当前全景坐标系。
1> eyeX, eyeY, eyeZ 是观察者所在点对应于在当前全景坐标系下的坐标。
2> centerX, centerY, centerZ是观察者的视线中心点在当前全景坐标系下的坐标。考虑你的手机屏幕这个平面,这个平面垂直于观察者的视线,所有屏幕上显示的物体形状,大小,其实是在全景坐标系下的物体沿视线投影到手机屏幕这个面的形状和大小。
3> upX, upY, upZ代表从(0,0,0)到 (x,y,z)的直线,它表示了观察者认为的“上”方向。改变这几个值相当于观察者的视线不变,自己的脸沿垂直于视线的平面旋转。
gl.glTranslatef(0,0,-1);
改变当前的全景坐标系, 使坐标系整体向屏幕内平移一个单位,这样所有的物体就看起来向屏幕内平移了一个单位。
glTexCoordPointer
坐标决定纹理贴图的大小,但是真正的纹理内容的左边总是在(0,1)之间,所以这个贴图越大,内容所占的比例就越小.
然后glTexCoordPointer决定的纹理贴图贴到glVertexPointer决定的”画布”上.这个过程是一比一的,”画布”是多大,纹理贴图就做相应的变形适合”画布”形状.
最后把画布显示在glViewport决定的屏幕显示区域,但是上面提到了,屏幕显示区域是一个坐标在(-1,+1)之间的一个正方形,所以”画布”的面积越大,即坐标范围越大,在显示这一步时是会被裁的,只剩(-1,+1)部分的图像.
贴图的方法
首先图片的操作依然是Bitmap作为图片的元素,如何读取Bitmap就不说了,在Opengl中准备可以贴的图片需要一个过程,首先,需要申明你需要贴图的图名字,这个是一个unsigned int ,用未用过的int来标志每一个你需要的texture,这个过程是通过:
gl.glGenTextures(1, textures , 0);
//1 代表制需要创建一个名字,textures 是个int 数组,用于把创建的名字存储回这个数组中,0是说从第0个位置开始存储。