Android OpenGL ES 2:逐帧绘制

时间:2014-07-18 08:15:51

标签: android opengl-es-2.0

我对Android上的opengl es 2.0很新。我正在研究一个在屏幕上绘制几个平面指示器的项目(如高度计,指南针等)。在官方谷歌开发网站http://developer.android.com/training/graphics/opengl/index.html完成教程后,我继续沿着这条路走,画圆圈,三角形,正方形等(只有2d的东西)。我可以使用旋转和平移矩阵使绘制的对象移动,但我知道如何执行此操作的唯一方法(除了他们在教程中如何执行此操作)在我的渲染器类的onDrawFrame()方法中是这样的:

//set values for all Indicators
try {
Thread.sleep(1);
// for roll + pitch:
if(roll < 90) {
roll += 1.5f;
} else roll = 0;
if(pitch < 90) {
pitch += 0.5f;
} else pitch = 0;
// for compass:
if(compassDeg > 360) compassDeg = 0;
else compassDeg += 1;
//for altimeter
if(realAltitude >= 20000) realAltitude = 0;
else realAltitude += 12;
//for speedometer:
if(realSpeed >= 161) realSpeed = 0;
else realSpeed += 3;

} catch (InterruptedException e) {
e.printStackTrace();
}

roll,pitch,compassDeg,speed等是指标接收的参数,我设计它们相应地移动(例如,如果指南针指向罗盘,则罗盘将指向北方,依此类推)。这些参数最终将通过蓝牙接收,但是现在我正在从代码中直接修改它们,因为我还没有蓝牙实现。 我很确定这不是最好的方法,有时绘制的对象口吃,似乎回到几帧,然后再回来,我不认为暂停绘图方法一般是个好主意。 我在开头提到的教程中看到过,他们使用的是这样的东西:

//Use the following code to generate constant rotation.
//Leave this code out when using TouchEvents.        
long time = SystemClock.uptimeMillis() %4000L ;
float contAngle = -0.090f * ((int) time);
Matrix.setRotateM(contRotationMatrix, 0, contAngle, 0, 0, -1.0f);
Matrix.multiplyMM(contMVPMatrix, 0, mMVPMatrix4, 0, contRotationMatrix, 0);

我认为仍然有点奇怪,必须有一种更直接的方式来指定如何绘制每个帧,逐帧旋转和翻译对象。  所以我的问题是如何让所有东西一帧一帧地移动或类似的东西,或者至少我如何找出一帧画出的时间?

0 个答案:

没有答案