4
我使用OpenGL繪製了幾個2D形狀,現在我想添加捏/縮放。我的觀點是透視(頂視圖)。我認爲它是z軸= 0的3D。Android捏/縮放和glfrustum
現在,我應該如何更改glfrustum並在觸摸方法中添加我的活動,以便我可以捏/縮放?
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 25);
我想應該是這樣的
gl.glFrustumf(-ratio, ratio, -1, 1, 1*zoom, 25*zoom);
,但應該如何觸摸方法寫入更改做兩個指縮放該縮放參數?
現在問題是rendrer,我在最後添加了縮放方法,但是在縮放方法中,它給了我gl.glfrustum的錯誤,同時onsurfacechanged它不會給我錯誤!我怎麼能解決這個問題?
public class GLrenderer implements Renderer {
public GLqueue tri;
public GLrenderer() {
tri = new GLqueue();
}
public void onSurfaceCreated(GL10 gl, EGLConfig eglConfig) {
// TODO Auto-generated method stub
gl.glDisable(GL10.GL_DITHER);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glClearColor(.0f, .0f, .0f, 0f);
gl.glClearDepthf(1f);
}
public void onDrawFrame(GL10 gl) {
// TODO Auto-generated method stub
gl.glDisable(GL10.GL_DITHER);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0, 0, -5, 0, 0, 0, 0, 2, 0);
//gl.glRotatef(1, 1, 0, 0);
// gl.glRotatef(10, 0, 0, 1);
tri.draw(gl);
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
// TODO Auto-generated method stub
gl.glViewport(0, 0, width, height);
float ratio = (float) width/height;
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 25);
}
public static void zoom(float d2) {
// TODO Auto-generated method stub
int zoom = (int) (zoom*d2);
gl.glFrustumf(-ratio, ratio, -1, 1, 1*zoom, 25*zoom);
}
}
你有這樣做的例子嗎?我不知道如何設置觸摸方法做這個和大多數在互聯網上縮放的例子使用縮放而不是相機 – matarsak
基本上'縮放'值是一個縮放因子,雖然它改變了'相機',而不是修改現場。如果你有一個方法可以從夾點計算出一個值,你可以插入它。否則,我可以在回家時發帖子。 – Jave
如果你給我舉一個例子(在變形的平截頭體參數上設置變焦)在一個三角形或任何形狀上,我會很感激。 – matarsak