0
我想我的投影有問題。這是怎麼設置我的GL觀點:Android OpenGL ES投影:爲什麼我的原點位於左下角。
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
_displayWidth = width;
_displayHeight = height;
_halfWidth = width/2;
_halfHeight = height/2;
_scaleX = 0.5F;
_scaleY = 0.5F;
gl.glViewport(0, 0, _displayWidth, _displayHeight);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl, 0, _displayWidth, _displayHeight, 0);
DebugLog.i(TAG, "Size changed: " + _displayWidth + " * "
+ _displayHeight);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
GlSystem.setGl(gl);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glClearColor(0.0f, 0.0f, 0.0f, 1);
gl.glShadeModel(GL10.GL_FLAT);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_DITHER);
gl.glDisable(GL10.GL_LIGHTING);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
GL10.GL_MODULATE);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
String extensions = gl.glGetString(GL10.GL_EXTENSIONS);
String version = gl.glGetString(GL10.GL_VERSION);
String renderer = gl.glGetString(GL10.GL_RENDERER);
boolean isSoftwareRenderer = renderer.contains("PixelFlinger");
boolean isOpenGL10 = version.contains("1.0");
boolean supportsDrawTexture = extensions.contains("draw_texture");
boolean supportsVBOs = !isSoftwareRenderer
&& (!isOpenGL10 || extensions.contains("vertex_buffer_object"));
DebugLog.i(TAG, version + " (" + renderer + "): "
+ (supportsDrawTexture ? "draw texture," : "")
+ (supportsVBOs ? "vbos" : ""));
_game.load();
}
圖:
public void draw(float x, float y, float scaleX, float scaleY) {
GL10 gl = GlSystem.getGl();
if (gl != null && _sprite != null) {
gl.glBindTexture(GL10.GL_TEXTURE_2D, _sprite.getTexture());
float localX = x - (getWidth() * scaleX)/2;
float localY = y - (getHeight() * scaleY)/2;
float width = getWidth() * scaleX;
float height = getHeight() * scaleY;
((GL11Ext) gl).glDrawTexfOES(localX, localY, 0, width, height);
}
}
問題是我的,但是我初始化我投射我在屏幕與Y軸左下角原點向上增加(屏相對)。原點應該是左上角的Y軸向下增加(屏幕相對)。
這不會是一個問題,但作爲我從MotionEvent收到的座標是基於一個topleft角落的起源。
public class GameView extends GLSurfaceView {
private TouchHandler _motionHandler;
public GameView(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent e) {
_motionHandler.setMotionEvent(e);
queueEvent(_motionHandler);
return true;
}
public TouchHandler getMotionHandler() {
return _motionHandler;
}
public void setMotionHandler(TouchHandler motionHandler) {
_motionHandler = motionHandler;
}
}
這只是混淆了我,現在,IM afraif會導致更嚴重的問題,如果我不解決/明白什麼導致了這些問題。
是的,正如我讀你的答案,我發現這個http://www.opengl.org/archives/resources/features/KilgardTechniques/oglpitfall/。同樣在我的觸摸處理程序中,getY和getX讓我查看與rawX和rawY相關的相對座標,這使得屏幕相對。謝謝。 – twDuke 2012-02-05 13:24:08