move spinning quad to touch point
This commit is contained in:
parent
569ff8ac00
commit
76fd3ad35d
@ -7,6 +7,6 @@ varying vec3 color_i;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = projection * modelview * vec4(pos * 0.75, 1);
|
||||
gl_Position = projection * modelview * vec4(pos, 1);
|
||||
color_i = color;
|
||||
}
|
||||
|
@ -3,15 +3,25 @@ package com.homelinux.holtrop.opengltest;
|
||||
import android.opengl.GLSurfaceView;
|
||||
import android.content.Context;
|
||||
import android.content.res.AssetManager;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
public class MyGLSurfaceView extends GLSurfaceView
|
||||
{
|
||||
MyRenderer m_renderer;
|
||||
|
||||
public MyGLSurfaceView(Context context, AssetManager am)
|
||||
{
|
||||
super(context);
|
||||
|
||||
setEGLContextClientVersion(2);
|
||||
|
||||
setRenderer(new MyRenderer(am));
|
||||
m_renderer = new MyRenderer(am);
|
||||
setRenderer(m_renderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent e)
|
||||
{
|
||||
return m_renderer.onTouchEvent(e);
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import android.opengl.Matrix;
|
||||
import android.os.SystemClock;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
public class MyRenderer implements GLSurfaceView.Renderer
|
||||
{
|
||||
@ -25,6 +26,10 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
||||
private AssetManager m_asset_manager;
|
||||
private float m_proj_matrix[] = new float[16];
|
||||
private float m_modelview[] = new float[16];
|
||||
private int m_width;
|
||||
private int m_height;
|
||||
private float m_x = 0.0f;
|
||||
private float m_y = 0.0f;
|
||||
|
||||
public MyRenderer(AssetManager am)
|
||||
{
|
||||
@ -119,7 +124,10 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
||||
|
||||
long time = SystemClock.uptimeMillis() % 4000L;
|
||||
float angle = 0.090f * ((int) time);
|
||||
Matrix.setRotateM(m_modelview, 0, angle, 0, 0, 1);
|
||||
Matrix.setIdentityM(m_modelview, 0);
|
||||
Matrix.translateM(m_modelview, 0, m_x, m_y, 0);
|
||||
Matrix.rotateM(m_modelview, 0, angle, 0, 0, 1);
|
||||
Matrix.scaleM(m_modelview, 0, 0.2f, 0.2f, 0.2f);
|
||||
GLES20.glUniformMatrix4fv(
|
||||
GLES20.glGetUniformLocation(m_program, "modelview"),
|
||||
1, false, m_modelview, 0);
|
||||
@ -144,6 +152,9 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
||||
|
||||
public void onSurfaceChanged(GL10 unused, int width, int height)
|
||||
{
|
||||
m_width = width;
|
||||
m_height = height;
|
||||
|
||||
GLES20.glViewport(0, 0, width, height);
|
||||
|
||||
if (width < height)
|
||||
@ -164,4 +175,18 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
||||
GLES20.glGetUniformLocation(m_program, "projection"),
|
||||
1, false, m_proj_matrix, 0);
|
||||
}
|
||||
|
||||
public boolean onTouchEvent(MotionEvent e)
|
||||
{
|
||||
if (e.getAction() == MotionEvent.ACTION_DOWN)
|
||||
{
|
||||
float x = (e.getX() / (float) m_width) * 2.0f - 1.0f;
|
||||
float y = -((e.getY() / (float) m_height) * 2.0f - 1.0f);
|
||||
|
||||
m_x = x;
|
||||
m_y = y;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user