android平台用OpenGL ES绘制图像的移动

huxueyan521 2011-05-30 03:54:04
我画了个简单的线段,想要隔一两秒中这个线段就的位置就变一下。不知道怎么实现。
1.OpenglActivity.java 主activity

public class OpenglActivity extends Activity {
private GLSurfaceView view;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

/* 创建一个 GLSurfaceView 用于绘制表面 */
view = new MyView(this);

/* 将创建好的 GLSurfaceView 设置为当前 Activity 的内容视图 */
setContentView(view);
}
}

2.MyView.java
public class MyView extends GLSurfaceView{
private GridRender myrender;

public MyView(Context context)
{
super(context);

myrender = new GridRender(context);

/* 设置 Renderer 用于执行实际的绘制工作 */
setRenderer(myrender);

/* 设置绘制模式为 持续绘制 */
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
// setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
}
}

3.GridRender.java
private MyLine myline;

public GridRender(Context context)
{
myline = new MyLine();
}

public void onDrawFrame(GL10 gl)
{
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();

myline.draw(gl);

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
OnSurfaceChanged 和OnSurfaceCreated省略。

4.MyLine.java
public class MyLine {
private FloatBuffer mVertexBuffer;
private float[] data = {
1,0,1,
2,0,1
};
private int num = 5;

public MyLine()
{
ByteBuffer vbb = ByteBuffer.allocateDirect(data.length*4);
vbb.order(ByteOrder.nativeOrder());
mVertexBuffer = vbb.asFloatBuffer();
mVertexBuffer.put(data);
mVertexBuffer.position(0);
}

public void draw(GL10 gl){

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);

gl.glDrawArrays(GL10.GL_LINES, 0, 2);
}
}

曾经试着在draw函数里面加一个update函数。意思是每次画完都更新一下data数组里面的坐标。但是不行。

望不吝赐教,谢谢!
...全文
297 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huxueyan521 2011-05-31
  • 打赏
  • 举报
回复
6楼正确!谢谢啦!
CrossTime 2011-05-31
  • 打赏
  • 举报
回复
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY)
...去掉或者改用GLSurfaceView.RENDERMODE_CONTINUOUSLY试试
木不且八 2011-05-30
  • 打赏
  • 举报
回复
看不出啥问题,估计是越界了,默认的范围是-1到1,,你用float处理看看,写一个循环加减的,,或者先在draw里面写一个log。,。,看看 是不是一直在调用
huxueyan521 2011-05-30
  • 打赏
  • 举报
回复
我把y值每次只增加0.2,一样是不行的啊。只移动一次就不再动了。。。
CrossTime 2011-05-30
  • 打赏
  • 举报
回复
默认情况下,坐标值范围-1 ~ 1, y值超过投影显示范围了
huxueyan521 2011-05-30
  • 打赏
  • 举报
回复
我在onDrawFrame里面加上Thread.sleep(1000)和glTranslatef(x,y++,z)两句,可以运行出的效果线段只动了一下,并没有按照我想要的那样循环着不停的移动。
CrossTime 2011-05-30
  • 打赏
  • 举报
回复
可以在onDrawFrame里面用gl.glTranslatef(x, y, z)更新当前坐标

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧