我画了个简单的线段,想要隔一两秒中这个线段就的位置就变一下。不知道怎么实现。
1.OpenglActivity.java 主activitypublic 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数组里面的坐标。但是不行。望不吝赐教,谢谢!

解决方案 »

  1.   

    可以在onDrawFrame里面用gl.glTranslatef(x, y, z)更新当前坐标
      

  2.   

    我在onDrawFrame里面加上Thread.sleep(1000)和glTranslatef(x,y++,z)两句,可以运行出的效果线段只动了一下,并没有按照我想要的那样循环着不停的移动。
      

  3.   

    看不出啥问题,估计是越界了,默认的范围是-1到1,,你用float处理看看,写一个循环加减的,,或者先在draw里面写一个log。,。,看看 是不是一直在调用 
      

  4.   

    setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY)
    ...去掉或者改用GLSurfaceView.RENDERMODE_CONTINUOUSLY试试