如何将对象转换为顶点?

时间:2013-12-03 23:18:02

标签: java android opengl-es

我想让一个对象遵循OpenGL ES中的预定义行(曲线)。我提出的最简单的解决方案是创建一个圆并使用沿边缘的点(顶点)来引导对象。我迷失了如何使用translatem()(使用逻辑屏幕单位)来从顶点定位对象。我对替代解决方案持开放态度,但更愿意将解决方案放在更简单的一面。

1 个答案:

答案 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'是子对象,它将位于父对象的边缘。