浏览 11778 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-15
最后修改:2010-12-16
怎么上截图? public class GLRender implements Renderer{ float rotateAngle; //顶点数组,GL ES只能用这个办法画圆吗? private float[] vertices = new float[720]; //度到弧度的转换 public float DegToRad(float deg) { return (float) (3.14159265358979323846 * deg / 180.0); } @Override public void onDrawFrame(GL10 gl) { // TODO Auto-generated method stub // 进入这个函数第一件要做的事就是清除屏幕和深度缓存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); //画圆形 drawCircle(gl); } public void drawCircle(GL10 gl) { //重置投影矩阵 gl.glLoadIdentity(); // 移动操作,移入屏幕(Z轴)5个像素, x, y , z gl.glTranslatef(0.0f, 0.0f, -5.0f); //旋转, angle, x, y , z gl.glRotatef(rotateAngle, 1.0f, 0.0f, 0.0f); // 设置当前色为红色, R, G, B, Alpha gl.glColor4f(1.0f, 0.1f, 0.1f, 1.0f); //设置圆形顶点数据,这个是在创建时生成 FloatBuffer verBuffer = FloatBuffer.wrap(vertices); //设置顶点类型为浮点坐标(GL_FLOAT),不设置或者设置错误类型将导致图形不能显示或者显示错误 gl.glVertexPointer(2, GL10.GL_FLOAT, 0, verBuffer); //打开顶点数组 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); //向OGL发送实际画图指令 gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 360); //关闭顶点数组功能 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); //画图结束 gl.glFinish(); //更改旋转角度 rotateAngle += 0.5; } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { // TODO Auto-generated method stub float ratio = (float) width / height; //设置OpenGL场景的大小 gl.glViewport(0, 0, width, height); //设置投影矩阵 gl.glMatrixMode(GL10.GL_PROJECTION); //重置投影矩阵 gl.glLoadIdentity(); // 设置视口的大小 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // 选择模型观察矩阵 gl.glMatrixMode(GL10.GL_MODELVIEW); // 重置模型观察矩阵 gl.glLoadIdentity(); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // TODO Auto-generated method stub // 启用阴影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 黑色背景 gl.glClearColor(0, 0, 0, 0); // 设置深度缓存 gl.glClearDepthf(1.0f); // 启用深度测试 gl.glEnable(GL10.GL_DEPTH_TEST); // 所作深度测试的类型 gl.glDepthFunc(GL10.GL_LEQUAL); // 告诉系统对透视进行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); //初始化圆形数据 for (int i = 0; i < 720; i += 2) { // x value vertices[i] = (float) (Math.cos(DegToRad(i)) * 1); // y value vertices[i+1] = (float) (Math.sin(DegToRad(i)) * 1); } } } 完整程序见附件 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-16
再补充一点:
上面的例子画的是实心的圆,如果想画空心的圆只要把这句: gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 360); 改为 gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 360); 即可 嘿嘿,我也是多此一举,玩GL的高手就不要笑了,这个是给刚初学GL的同学看的 |
|
返回顶楼 | |