这几天看了OpenGL ES的相关资料和代码,总结了一些经验。
1. 要画图,得设定画的是什么图形,是点,直线还是三角形,通过gl.glDrawArrays( p1, 0, p2);中的p1来设定。可用的参数有GL10.GL_POINTS, GL10.GL_LINES, GL10.GL_TRIANGLES, GL10.GL_TRANGLES_FAN, GL10.GL_TRIANGLE_STRIP...
2. 知道了形状,要设定数据源,也就是要画的点有哪些。通过gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertexBuff );来设定。vertexBuff就是你想要画的哪些点。它表示为一个一维矩阵,但实际上根据你要画的形状来分成多个部分的。比如你想一个三角形。那么这个矩阵就可以表示为{-1,0,1,0,0,2},{-1,0}表示第一个点,{1,0}表示第二个点,{0,2}表示第三个点。如果之后还有的话,也应该是6*N个数字,以确定更多的三角形坐标。
3. 要是gl.glDrawArrays()方法起作用,之前得调用gl.glEnableClientState(int p1); p1表示要激活的数组的种类,比如要gl.glVertexPointer()设置vertex,那么必须先调用gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);要用数组设置颜色,先调用gl.glEnableClientState( GL10.GL_COLOR_ARRAY );
4. 画三维图像时,要激活深度测试。gl.glEnable( GL10.GL_DEPTH_TEST );
5. 使用texture之前必须先调用gl.glEnable( GL10.GL_TEXTURE_2D );同时调用gl.glEnableClientState( GL10.GL_TEXTURE_COORD_ARRAY );来激活texture数组画图。
6. glLoadIdentity():另当前绘图坐标系从新回到世界坐标系的位置,另他们重合。
glTranslatef(x,y,z):使绘图坐标系相对世界坐标系沿x,y,z轴移动x,y,z个单位。
glVertex3f(x,y,z):在当前绘图坐标系绘制一个点
glColor3f(r,g,b):设置以后绘图函数的绘图颜色,如果没有再次碰到glColor3f(),以后任何绘图函数绘制出的图形颜色都是这个颜色。r,g,b的范围从0.0-1.0。r-蓝色,g-绿色,b-蓝色,色彩是这三种颜色分量的混合,比如glColor3f(1.0,1.0,0.0)是黄色,glColor3f(1.0,0.0,0.0)是红色。
glRotatef(angle,x,y,z):和glTranslatef()属于一类函数,glTranslatef()是平移,glRotatef是旋转,就是使当前绘图坐标系绕世界坐标系的x,y,z旋转angle个角度,x,y,z的值非0既1,比如glRotatef(30,1.0f,0.0f,0.0f)就是绕x轴旋转30度,glRotatef(30,1.0f,1.0f,0.0f)就是绕x,y的夹角线旋转30度。
7. 用glRotatef能是对象本身围绕一个向量旋转,我们也可以改变观测镜头本身,参考点和向上向量来改变所看到的对象,能产生glRotatef同样的旋转效果。
GLU.gluLookAt(gl,
0.0f, 0.0f, 3.0f,//观测点在屏幕正中向外3.0f单位距离的地方
viewX, 0.0f, 0.0f, //参考点在屏幕中间水平位置viewX
0.0f, 1.0f, 0.0f );//表示Y轴向上
综合这三个点,表示你这个人的眼睛从屏幕正中向外的3.0单位距离的地方,拿着摄像机瞄准viewX的地方再看,看的时候你的头是向上的(如果设置成1.0f, 0.0f, 0.0f,那么表示你的头得向右歪过来,成水平来看)。
posted on 2010-08-31 21:30
MEYE 阅读(543)
评论(0) 编辑 收藏 所属分类:
Android3D