Please explain how to load objects and act on any
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menu05-16 18:59:39.503: D/dalvikvm(466): VFY: dead code 0x0005-0008 in Lcom/android/Game;.onStop ()V
05-16 18:59:39.512: D/AndroidRuntime(466): Shutting down VM
05-16 18:59:39.512: W/dalvikvm(466): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-16 18:59:39.523: E/AndroidRuntime(466): FATAL EXCEPTION: main
05-16 18:59:39.523: E/AndroidRuntime(466): java.lang.NoClassDefFoundError: com.threed.jpct.RGBColor
05-16 18:59:39.523: E/AndroidRuntime(466): at com.android.Game.<init>(Game.java:51)
05-16 18:59:39.523: E/AndroidRuntime(466): at java.lang.Class.newInstanceImpl(Native Method)
05-16 18:59:39.523: E/AndroidRuntime(466): at java.lang.Class.newInstance(Class.java:1429)
05-16 18:59:39.523: E/AndroidRuntime(466): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
05-16 18:59:39.523: E/AndroidRuntime(466): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
05-16 18:59:39.523: E/AndroidRuntime(466): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-16 18:59:39.523: E/AndroidRuntime(466): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-16 18:59:39.523: E/AndroidRuntime(466): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-16 18:59:39.523: E/AndroidRuntime(466): at android.os.Handler.dispatchMessage(Handler.java:99)
05-16 18:59:39.523: E/AndroidRuntime(466): at android.os.Looper.loop(Looper.java:123)
05-16 18:59:39.523: E/AndroidRuntime(466): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-16 18:59:39.523: E/AndroidRuntime(466): at java.lang.reflect.Method.invokeNative(Native Method)
05-16 18:59:39.523: E/AndroidRuntime(466): at java.lang.reflect.Method.invoke(Method.java:521)
05-16 18:59:39.523: E/AndroidRuntime(466): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-16 18:59:39.523: E/AndroidRuntime(466): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-16 18:59:39.523: E/AndroidRuntime(466): at dalvik.system.NativeStart.main(Native Method)
package com.android;
import java.lang.reflect.Field;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.content.res.Resources;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.ScaleGestureDetector.OnScaleGestureListener;
import com.threed.jpct.Camera;
import com.threed.jpct.FrameBuffer;
import com.threed.jpct.GLSLShader;
import com.threed.jpct.ITextureEffect;
import com.threed.jpct.Light;
import com.threed.jpct.Loader;
import com.threed.jpct.Logger;
import com.threed.jpct.Object3D;
import com.threed.jpct.Primitives;
import com.threed.jpct.RGBColor;
import com.threed.jpct.SimpleVector;
import com.threed.jpct.Texture;
import com.threed.jpct.TextureInfo;
import com.threed.jpct.TextureManager;
import com.threed.jpct.World;
import com.threed.jpct.util.MemoryHelper;
/**
*
*
* @author EgonOlsen
*
*/
public class Game extends Activity implements OnScaleGestureListener {
// Used to handle pause and resume...
private static Game master = null;
private ScaleGestureDetector gestureDec = null;
private GLSurfaceView mGLView;
private MyRenderer renderer = null;
private FrameBuffer fb = null;
private World world = null;
private RGBColor back = new RGBColor(50, 50, 100);
private float touchTurn = 0;
private float touchTurnUp = 0;
private float xpos = -1;
private float ypos = -1;
private Texture font = null;
private Object3D plane;
private Light light;
private GLSLShader shader = null;
private float scale = 0.05f;
protected void onCreate(Bundle savedInstanceState) {
Logger.log("onCreate");
Logger.setLogLevel(Logger.LL_DEBUG);
if (master != null) {
copy(master);
}
super.onCreate(savedInstanceState);
mGLView = new GLSurfaceView(getApplication());
// Enable the OpenGL ES2.0 context
mGLView.setEGLContextClientVersion(2);
renderer = new MyRenderer();
mGLView.setRenderer(renderer);
setContentView(mGLView);
gestureDec = new ScaleGestureDetector(this.getApplicationContext(), this);
}
@Override
protected void onPause() {
Logger.log("onPause");
super.onPause();
mGLView.onPause();
}
@Override
protected void onResume() {
Logger.log("onResume");
super.onResume();
mGLView.onResume();
}
@Override
protected void onStop() {
Logger.log("onStop");
super.onStop();
}
private void copy(Object src) {
try {
Logger.log("Copying data from master Activity!");
Field[] fs = src.getClass().getDeclaredFields();
for (Field f : fs) {
f.setAccessible(true);
f.set(this, f.get(src));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public boolean onTouchEvent(MotionEvent me) {
gestureDec.onTouchEvent(me);
if (me.getAction() == MotionEvent.ACTION_DOWN) {
xpos = me.getX();
ypos = me.getY();
return true;
}
if (me.getAction() == MotionEvent.ACTION_UP) {
xpos = -1;
ypos = -1;
touchTurn = 0;
touchTurnUp = 0;
return true;
}
if (me.getAction() == MotionEvent.ACTION_MOVE) {
float xd = me.getX() - xpos;
float yd = me.getY() - ypos;
xpos = me.getX();
ypos = me.getY();
touchTurn = xd / -100f;
touchTurnUp = yd / -100f;
return true;
}
try {
Thread.sleep(15);
} catch (Exception e) {
// No need for this...
}
return super.onTouchEvent(me);
}
protected boolean isFullscreenOpaque() {
return true;
}
class MyRenderer implements GLSurfaceView.Renderer {
private int fps = 0;
private int lfps = 0;
private long time = System.currentTimeMillis();
public MyRenderer() {
Texture.defaultToMipmapping(true);
Texture.defaultTo4bpp(true);
}
public void onSurfaceChanged(GL10 gl, int w, int h) {
if (fb != null) {
fb.dispose();
}
Resources res = getResources();
fb = new FrameBuffer(w, h);
if (master == null) {
world = new World();
TextureManager tm = TextureManager.getInstance();
Texture face = new Texture(res.openRawResource(R.raw.face));
Texture normals = new Texture(res.openRawResource(R.raw.face_norm), true);
Texture height = new Texture(res.openRawResource(R.raw.face_height2));
plane = Primitives.getPlane(1, 100);
TexelGrabber grabber = new TexelGrabber();
height.setEffect(grabber);
height.applyEffect();
int[] heighties = grabber.getAlpha();
AlphaMerger setter = new AlphaMerger(heighties);
normals.setEffect(setter);
normals.applyEffect();
font = new Texture(res.openRawResource(R.raw.numbers));
font.setMipmap(false);
tm.addTexture("face", face);
tm.addTexture("normals", normals);
TextureInfo ti = new TextureInfo(TextureManager.getInstance().getTextureID("face"));
ti.add(TextureManager.getInstance().getTextureID("normals"), TextureInfo.MODE_BLEND);
plane.setTexture(ti);
shader = new GLSLShader(Loader.loadTextFile(res.openRawResource(R.raw.vertexshader_offset)), Loader.loadTextFile(res.openRawResource(R.raw.fragmentshader_offset)));
plane.setShader(shader);
plane.setSpecularLighting(true);
shader.setStaticUniform("invRadius", 0.0003f);
plane.build();
plane.strip();
world.addObject(plane);
light = new Light(world);
light.enable();
light.setIntensity(60, 50, 50);
light.setPosition(SimpleVector.create(-10, -50, -100));
world.setAmbientLight(10, 10, 10);
Camera cam = world.getCamera();
cam.moveCamera(Camera.CAMERA_MOVEOUT, 70);
cam.lookAt(plane.getTransformedCenter());
MemoryHelper.compact();
world.compileAllObjects(fb);
if (master == null) {
Logger.log("Saving master Activity!");
master = Game.this;
}
}
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
Logger.log("onSurfaceCreated");
}
public void onDrawFrame(GL10 gl) {
if (touchTurn != 0) {
plane.rotateY(touchTurn);
touchTurn = 0;
}
if (touchTurnUp != 0) {
plane.rotateX(touchTurnUp);
touchTurnUp = 0;
}
shader.setUniform("heightScale", scale);
fb.clear(back);
world.renderScene(fb);
world.draw(fb);
blitNumber(lfps, 5, 5);
fb.display();
if (System.currentTimeMillis() - time >= 1000) {
lfps = fps;
fps = 0;
time = System.currentTimeMillis();
}
fps++;
}
private void blitNumber(int number, int x, int y) {
if (font != null) {
String sNum = Integer.toString(number);
for (int i = 0; i < sNum.length(); i++) {
char cNum = sNum.charAt(i);
int iNum = cNum - 48;
fb.blit(font, iNum * 5, 0, x, y, 5, 9, 5, 9, 10, true, null);
x += 5;
}
}
}
}
public boolean onScale(ScaleGestureDetector detector) {
float div = detector.getCurrentSpan() - detector.getPreviousSpan();
div /= 5000;
scale += div;
if (scale > 0.063f) {
scale = 0.063f;
}
if (scale < 0) {
scale = 0;
}
return true;
}
public boolean onScaleBegin(ScaleGestureDetector detector) {
// TODO Auto-generated method stub
return true;
}
public void onScaleEnd(ScaleGestureDetector detector) {
// TODO Auto-generated method stub
}
/**
* Merges the height map into the alpha channel of the normal map.
*
* @author EgonOlsen
*
*/
private static class AlphaMerger implements ITextureEffect {
private int[] alpha = null;
public AlphaMerger(int[] alpha) {
this.alpha = alpha;
}
public void apply(int[] arg0, int[] arg1) {
int end = arg1.length;
for (int i = 0; i < end; i++) {
arg0[i] = arg1[i] & 0x00ffffff | alpha[i];
}
}
public boolean containsAlpha() {
return true;
}
public void init(Texture arg0) {
// TODO Auto-generated method stub
}
}
/**
* Extracts the alpha channel from a texture.
*
* @author EgonOlsen
*
*/
private static class TexelGrabber implements ITextureEffect {
private int[] alpha = null;
public void apply(int[] arg0, int[] arg1) {
alpha = new int[arg1.length];
int end = arg1.length;
for (int i = 0; i < end; i++) {
alpha[i] = (arg1[i] << 24);
}
}
public int[] getAlpha() {
return alpha;
}
public boolean containsAlpha() {
return true;
}
public void init(Texture arg0) {
// TODO Auto-generated method stub
}
}
}
Page created in 0.079 seconds with 12 queries.