Skip to content

conradplake/gframeAE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 

Repository files navigation

gframeAE

A Java 3D engine for Android applications. Uses a pure software renderer instead of an OpenGL implementation for broader availability. Original Java sources can be found at the gframe repository.

Features include:

  • pixel-perfect perspective correct texture mapping
  • sub-pixel & sub-texel accuracy
  • light attenuation
  • flat & phong shading
  • normal & specular mapping
  • shadow mapping
  • physics support & particles

As a first hands-on, here is an example Android View-Class that shows a single rotating cube:

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import gframe.ae.engine.Engine3D;
import gframe.ae.engine.Lightsource;
import gframe.ae.engine.Material;
import gframe.ae.engine.Model3D;
import gframe.ae.engine.NormalMappedMaterialShader;
import gframe.ae.engine.Shader;
import gframe.ae.engine.camera.Camera;
import gframe.ae.engine.camera.TripodCamera;
import gframe.ae.engine.generator.Model3DGenerator;
import gframe.ae.engine.generator.TextureGenerator;
import gframe.ae.engine.timing.Rotate;
import gframe.ae.engine.timing.Timer;

public class MyView extends View {

    private Engine3D engine;

    public MyView(Context context) {
        super(context);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    private void setupEngineAndWorld() {
        if (engine != null) {
            engine.clear();
        }

        engine = new Engine3D(getWidth(), getHeight());

        Lightsource lightsource = new Lightsource(0, 0, 0, gframe.ae.engine.Color.white, Lightsource.MAX_INTENSITY);
        engine.setLightsource(lightsource);

        Shader shader = new NormalMappedMaterialShader(lightsource, TextureGenerator.generateTileTextureNormalMap(256, 256, 32));
        engine.setDefaultShader(shader);

        // add something to the world..
        Model3D model = Model3DGenerator.buildBlock(80, 80, 80, gframe.ae.engine.Color.white);
        model = Model3DGenerator.facify(model);
        model.rotate(-45, -45, 45);  
        model.setMaterial(Material.GOLD);
        
        engine.register(model);

        // let object rotate
        Timer timer = Timer.getInstance();
        Rotate rotate = new Rotate(model, 100000000, 0.01f, Rotate.AXIS_Z);
        timer.registerTimedObject(rotate);

        // light and camera settings
        lightsource.setCoordinates(0, 0, -100);

        Camera camera = new TripodCamera();
        camera.move(0, 0, -200);
        engine.setCamera(camera);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (engine == null) {
            setupEngineAndWorld();
        }

        engine.drawScene(canvas);

        invalidate();
    }

}

Should look like so:

alt text alt text

About

A Java 3D engine for Android

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published