⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 globaltime.java

📁 google android code package
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        float ls = lerp(0.8f, 0.3f, brightness);        gl.glColor4f(ls * 1.0f, ls * 1.0f, ls * 0.8f, 1.0f);        if (mDisplayWorld) {            mClipPlaneEquation[0] = -mLightDir[0];            mClipPlaneEquation[1] = -mLightDir[1];            mClipPlaneEquation[2] = -mLightDir[2];            mClipPlaneEquation[3] = 0.0f;            // Assume we have glClipPlanef() from OpenGL ES 1.1            ((GL11) gl).glClipPlanef(GL11.GL_CLIP_PLANE0,                mClipPlaneEquation, 0);            gl.glEnable(GL11.GL_CLIP_PLANE0);        }        mLights.draw(gl);        if (mDisplayWorld) {            gl.glDisable(GL11.GL_CLIP_PLANE0);        }        mNumTriangles += mLights.getNumTriangles()*2;    }    /**     * Draws the atmosphere.     */    private void drawAtmosphere(GL10 gl) {        gl.glDisable(GL10.GL_LIGHTING);        gl.glDisable(GL10.GL_CULL_FACE);        gl.glDisable(GL10.GL_DITHER);        gl.glDisable(GL10.GL_DEPTH_TEST);        gl.glShadeModel(mSmoothShading ? GL10.GL_SMOOTH : GL10.GL_FLAT);        // Draw the atmospheric layer        float tx = mGLView.getTranslateX();        float ty = mGLView.getTranslateY();        float tz = mGLView.getTranslateZ();        gl.glMatrixMode(GL10.GL_MODELVIEW);        gl.glLoadIdentity();        gl.glTranslatef(tx, ty, tz);        // Blend in the atmosphere a bit        gl.glEnable(GL10.GL_BLEND);        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);        ATMOSPHERE.draw(gl);        mNumTriangles += ATMOSPHERE.getNumTriangles();    }    /**     * Draws the world in a 2D map view.     */    private void drawWorldFlat(GL10 gl) {        gl.glDisable(GL10.GL_BLEND);        gl.glEnable(GL10.GL_DITHER);        gl.glShadeModel(mSmoothShading ? GL10.GL_SMOOTH : GL10.GL_FLAT);        gl.glTranslatef(mWrapX - 2, 0.0f, 0.0f);        worldFlat.draw(gl);        gl.glTranslatef(2.0f, 0.0f, 0.0f);        worldFlat.draw(gl);        mNumTriangles += worldFlat.getNumTriangles() * 2;        mWrapX += mWrapVelocity * mWrapVelocityFactor;        while (mWrapX < 0.0f) {            mWrapX += 2.0f;        }        while (mWrapX > 2.0f) {            mWrapX -= 2.0f;        }    }    /**     * Draws the world in a 2D round view.     */    private void drawWorldRound(GL10 gl) {        gl.glDisable(GL10.GL_BLEND);        gl.glEnable(GL10.GL_DITHER);        gl.glShadeModel(mSmoothShading ? GL10.GL_SMOOTH : GL10.GL_FLAT);        mWorld.draw(gl);        mNumTriangles += mWorld.getNumTriangles();    }    /**     * Draws the clock.     *     * @param canvas the Canvas to draw to     * @param now the current time     * @param w the width of the screen     * @param h the height of the screen     * @param lerp controls the animation, between 0.0 and 1.0     */    private void drawClock(Canvas canvas,                           long now,                           int w, int h,                           float lerp) {        float clockAlpha = lerp(0.0f, 0.8f, lerp);        mClockShowing = clockAlpha > 0.0f;        if (clockAlpha > 0.0f) {            City city = mCities.get(mCityIndex);            mClock.setCity(city);            mClock.setTime(now);            float cx = w / 2.0f;            float cy = h / 2.0f;            float smallRadius = 18.0f;            float bigRadius = 0.75f * 0.5f * Math.min(w, h);            float radius = lerp(smallRadius, bigRadius, lerp);            // Only display left/right arrows if we are in a name search            boolean scrollingByName =                (mCityName.length() > 0) && (mCities.size() > 1);            mClock.drawClock(canvas, cx, cy, radius,                             clockAlpha,                             1.0f,                             lerp == 1.0f, lerp == 1.0f,                             !atEndOfTimeZone(-1),                             !atEndOfTimeZone(1),                             scrollingByName,                             mCityName.length());        }    }    /**     * Draws the 2D layer.     */    @Override protected void onDraw(Canvas canvas) {        long now = System.currentTimeMillis();        if (startTime != -1) {            startTime = -1;        }        int w = getWidth();        int h = getHeight();        // Interpolator for clock size, clock alpha, night lights intensity        float lerp = Math.min((now - mClockFadeTime)/1000.0f, 1.0f);        if (!mDisplayClock) {            // Clock is receding            lerp = 1.0f - lerp;        }        lerp = mClockSizeInterpolator.getInterpolation(lerp);        // we don't need to make sure OpenGL rendering is done because        // we're drawing in to a different surface        drawClock(canvas, now, w, h, lerp);        mGLView.showMessages(canvas);        mGLView.showStatistics(canvas, w);    }    /**     * Draws the 3D layer.     */    protected void drawOpenGLScene() {        long now = System.currentTimeMillis();        mNumTriangles = 0;        EGL10 egl = (EGL10)EGLContext.getEGL();        GL10 gl = (GL10)mEGLContext.getGL();        if (!mInitialized) {            init(gl);        }        int w = getWidth();        int h = getHeight();        gl.glViewport(0, 0, w, h);        gl.glEnable(GL10.GL_LIGHTING);        gl.glEnable(GL10.GL_LIGHT0);        gl.glEnable(GL10.GL_CULL_FACE);        gl.glFrontFace(GL10.GL_CCW);        float ratio = (float) w / h;        mGLView.setAspectRatio(ratio);        mGLView.setTextureParameters(gl);        if (PERFORM_DEPTH_TEST) {            gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);        } else {            gl.glClear(GL10.GL_COLOR_BUFFER_BIT);        }        if (mDisplayWorldFlat) {            gl.glMatrixMode(GL10.GL_PROJECTION);            gl.glLoadIdentity();            gl.glFrustumf(-1.0f, 1.0f, -1.0f / ratio, 1.0f / ratio, 1.0f, 2.0f);            gl.glMatrixMode(GL10.GL_MODELVIEW);            gl.glLoadIdentity();            gl.glTranslatef(0.0f, 0.0f, -1.0f);        } else {            mGLView.setProjection(gl);            mGLView.setView(gl);        }        if (!mDisplayWorldFlat) {            if (mFlyToCity) {                float lerp = (now - mCityFlyStartTime)/mCityFlightTime;                if (lerp >= 1.0f) {                    mFlyToCity = false;                }                lerp = Math.min(lerp, 1.0f);                lerp = mFlyToCityInterpolator.getInterpolation(lerp);                mRotAngle = lerp(mRotAngleStart, mRotAngleDest, lerp);                mTiltAngle = lerp(mTiltAngleStart, mTiltAngleDest, lerp);            }            // Rotate the viewpoint around the earth            gl.glMatrixMode(GL10.GL_MODELVIEW);            gl.glRotatef(mTiltAngle, 1, 0, 0);            gl.glRotatef(mRotAngle, 0, 1, 0);            // Increment the rotation angle            mRotAngle += mRotVelocity;            if (mRotAngle < 0.0f) {                mRotAngle += 360.0f;            }            if (mRotAngle > 360.0f) {                mRotAngle -= 360.0f;            }        }        // Draw the world with lighting        gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, mLightDir, 0);        mGLView.setLights(gl, GL10.GL_LIGHT0);        if (mDisplayWorldFlat) {            drawWorldFlat(gl);        } else if (mDisplayWorld) {            drawWorldRound(gl);        }        if (mDisplayLights && !mDisplayWorldFlat) {            // Interpolator for clock size, clock alpha, night lights intensity            float lerp = Math.min((now - mClockFadeTime)/1000.0f, 1.0f);            if (!mDisplayClock) {                // Clock is receding                lerp = 1.0f - lerp;            }            lerp = mClockSizeInterpolator.getInterpolation(lerp);            drawCityLights(gl, lerp);        }        if (mDisplayAtmosphere && !mDisplayWorldFlat) {            drawAtmosphere(gl);        }        mGLView.setNumTriangles(mNumTriangles);        egl.eglSwapBuffers(mEGLDisplay, mEGLSurface);        if (egl.eglGetError() == EGL11.EGL_CONTEXT_LOST) {            // we lost the gpu, quit immediately            Context c = getContext();            if (c instanceof Activity) {                ((Activity)c).finish();            }        }    }    private static final int INVALIDATE = 1;    private static final int ONE_MINUTE = 60000;    /**     * Controls the animation using the message queue.  Every time we receive     * an INVALIDATE message, we redraw and place another message in the queue.     */    private final Handler mHandler = new Handler() {        private long mLastSunPositionTime = 0;        @Override public void handleMessage(Message msg) {            if (msg.what == INVALIDATE) {                // Use the message's time, it's good enough and                // allows us to avoid a system call.                if ((msg.getWhen() - mLastSunPositionTime) >= ONE_MINUTE) {                    // Recompute the sun's position once per minute                    // Place the light at the Sun's direction                    computeSunDirection();                    mLastSunPositionTime = msg.getWhen();                }                // Draw the GL scene                drawOpenGLScene();                // Send an update for the 2D overlay if needed                if (mInitialized &&                                (mClockShowing || mGLView.hasMessages())) {                    invalidate();                }                // Just send another message immediately. This works because                // drawOpenGLScene() does the timing for us -- it will                // block until the last frame has been processed.                // The invalidate message we're posting here will be                // interleaved properly with motion/key events which                // guarantee a prompt reaction to the user input.                sendEmptyMessage(INVALIDATE);            }        }    };}/** * The main activity class for GlobalTime. */public class GlobalTime extends Activity {    GTView gtView = null;    private void setGTView() {        if (gtView == null) {            gtView = new GTView(this);            setContentView(gtView);        }    }    @Override protected void onCreate(Bundle icicle) {        super.onCreate(icicle);        setGTView();    }    @Override protected void onResume() {        super.onResume();        setGTView();        Looper.myQueue().addIdleHandler(new Idler());    }    @Override protected void onPause() {        super.onPause();        gtView.stopAnimating();    }    @Override protected void onStop() {        super.onStop();        gtView.stopAnimating();        gtView.destroy();        gtView = null;    }    // Allow the activity to go idle before its animation starts    class Idler implements MessageQueue.IdleHandler {        public Idler() {            super();        }        public final boolean queueIdle() {            if (gtView != null) {                gtView.startAnimating();            }            return false;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -