[英]Android opengl Touch Event
我正在嘗試制作一個程序,在我觸摸屏幕的位置上創建信號基礎。這意味着我可以用手指改變水平線上的每個點。
但我不能讓你這樣做,因為它對你來說會很復雜,所以我想要一個圓圈跟隨我的手指。
我提到我沒有使用MyGLSurfaceView類,我只使用MyGLRenderer類(名為GL_Render.java):
public class GL_Render implements Renderer
{
private Context context;
private Polygon myPoly = new Polygon();
private desen myDesen= new desen();
private MainActivity mySignal = new MainActivity();
private MainActivity myAngle = new MainActivity();
private MainActivity myZoom = new MainActivity();
public GL_Render(Context context)
{
this.context = context;
}
public void onDrawFrame(GL10 gl)
{
float ZOOM =myZoom.zoom;
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity(); // reset the matrix to its default state
// When using GL_MODELVIEW, you must set the view point
GLU.gluLookAt(gl, 0f, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
//GLU.gluLookAt(gl, eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);
// float ratio = (float)( width / height ) ;
gl.glMatrixMode(GL10.GL_PROJECTION); // set matrix to projection mode
gl.glLoadIdentity(); // reset the matrix to its default state
if(ZOOM==0){
gl.glFrustumf(0f, -1f, -1, 1, 3, 7); // apply the projection matrix
//gl.glFrustumf(left, right, bottom, top, zNear, zFar);
}
else
{
gl.glFrustumf(0f, -1f/(2*ZOOM), -1, 1, 3, 7); // apply the projection matrix
//gl.glFrustumf(left, right, bottom, top, zNear, zFar);
}
myDesen.Desen(gl);
if(ZOOM!=0)
{
float l2[] =
{
(float)0.5/(2*ZOOM), 0.5f, 0.0f,
(float)0.5/(2*ZOOM), -0.5f, 0.0f
};
myPoly.Polygon(l2);
myPoly.draw(gl,1,0,0);
}
else{
float l2[] =
{
0.5f, 0.5f, 0.0f,
0.5f, -0.5f, 0.0f
};
myPoly.Polygon(l2);
myPoly.draw(gl,1,0,0);
}
// Create the moving Circle here if possible:
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height)
{
// Adjust the viewport based on geometry changes
// such as screen rotations
gl.glViewport(0, 0, width, height);
// make adjustments for screen ratio
float ratio = (float)( width / height ) ;
gl.glMatrixMode(GL10.GL_PROJECTION); // set matrix to projection mode
gl.glLoadIdentity(); // reset the matrix to its default state
gl.glFrustumf(0f, -1f, -1, 1, 3, 7); // apply the projection matrix
//gl.glFrustumf(left, right, bottom, top, zNear, zFar);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig arg1)
{
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
myPoly=new Polygon();
}
private void GL_Prepare(GL10 gl)
{
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glFrontFace(GL10.GL_CW);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
}
private void GL_Finish(GL10 gl)
{
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}
}
無論你使用什么視圖是否是GlSurfaceView,你都需要一個Touch Listener。 然后,您可以以標准方式使用觸摸偵聽器,唯一的區別是您需要將觸摸點從屏幕坐標轉換為opengl場景坐標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.