我想让一个对象遵循OpenGL ES中的预定义行(曲线)。我提出的最简单的解决方案是创建一个圆并使用沿边缘的点(顶点)来引导对象。我迷失了如何使用translatem()
(使用逻辑屏幕单位)来从顶点定位对象。我对替代解决方案持开放态度,但更愿意将解决方案放在更简单的一面。
答案 0 :(得分:0)
我通过以下方式获得标准化的屏幕坐标。
glSurfaceView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event != null) {
// Convert touch coordinates into normalized device
// coordinates, keeping in mind that Android's Y
// coordinates are inverted.
final float normalizedX =
(event.getX() / (float) v.getWidth()) * 2 - 1;
//final float normalizedY = -((event.getY() / (float) v.getHeight()) * 2 - 1);//commented to kill z axis
//final float normalizedY;
final float scrnx =event.getX();
final float scrny =event.getY();
if (event.getAction() == MotionEvent.ACTION_DOWN) {
normalizedY = -((event.getY() / (float) v.getHeight()) * 2 - 1);
glSurfaceView.queueEvent(new Runnable() {
@Override
public void run() {
airHockeyRenderer.handleTouchPress(
normalizedX, normalizedY);
}
});
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
normalizedY = -((event.getY() / (float) v.getHeight()) * 2 - 1);
glSurfaceView.queueEvent(new Runnable() {
@Override
public void run() {
airHockeyRenderer.handleTouchDrag(
normalizedX, normalizedY, scrnx, scrny);
}
});
}
return true;
} else {
return false;
}
}
});
翻译父对象后,我使用我的父圆的x和z顶点,它在z平面上平放。
circPosition1.x = rcircle.vertexArray.rawFloatbuff[3*circcnter];
circPosition1.z = rcircle.vertexArray.rawFloatbuff[(3*circcnter)+2];
'rcircle'是父对象。
'circcnter'是曲线上的位置,或者在这种情况下为圆圈。
'circPosition1'是子对象,它将位于父对象的边缘。