Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

12045 Posts in 1593 Topics- by 593 Members - Latest Member: zhang

19. June 2013, 02:48:15 am
Xith3D CommunityProjectsYour Projects (Moderator: 'n ddrylliog)Where I am wrong
Pages: [1]
Print
Author Topic: Where I am wrong  (Read 3748 times)
tugalsan
Just dropped in

Offline Offline

Posts: 2



View Profile WWW Email
« on: 14. May 2009, 07:30:06 pm »

I am lazy.

I always want to simplfy things, by making 10 functions out of 1000s.

Below is my simplifier adapter class:

Code:
package com.tk.libraries.gui.xith3D;

import com.tk.libraries.io.file.TK_FileUtils;
import com.tk.libraries.lang.TK_GeneralUtils;
import java.io.File;
import java.net.URL;
import net.jtank.input.KeyPressedEvent;
import net.jtank.input.KeyReleasedEvent;
import net.jtank.input.MouseMask;
import net.jtank.input.MouseMovedEvent;
import net.jtank.input.MousePressedEvent;
import net.jtank.input.MouseReleasedEvent;
import net.jtank.input.MouseWheelEvent;
import org.openmali.vecmath2.Point3f;
import org.openmali.vecmath2.Vector3f;
import org.xith3d.base.Xith3DEnvironment;
import org.xith3d.loaders.models.base.Model;
import org.xith3d.loaders.models.impl.ac3d.AC3DLoader;
import org.xith3d.loaders.models.impl.ac3d.AC3DModel;
import org.xith3d.loaders.models.impl.ase.AseLoader;
import org.xith3d.loaders.models.impl.ase.AseModel;
import org.xith3d.loaders.models.impl.obj.OBJLoader;
import org.xith3d.loaders.models.impl.md2.MD2Loader;
import org.xith3d.loaders.models.impl.md2.MD2Model;
import org.xith3d.loaders.models.impl.md5.MD5Loader;
import org.xith3d.loaders.models.impl.md5.MD5Model;
import org.xith3d.loaders.models.impl.tds.TDSLoader;
import org.xith3d.loaders.models.impl.tds.TDSModel;
import org.xith3d.loaders.models.impl.obj.OBJModel;
import org.xith3d.loaders.models.impl.bsp.BSPLoader;
import org.xith3d.loaders.models.impl.cal3d.Cal3dLoader;
import org.xith3d.loaders.models.impl.cal3d.Cal3dModel;
import org.xith3d.loaders.models.impl.celshading.CelShadingLoader;
import org.xith3d.loaders.models.impl.celshading.CelShadingModel;
import org.xith3d.loop.InputAdapterRenderLoop;
import org.xith3d.loop.UpdatingThread.TimingMode;
import org.xith3d.loop.opscheduler.OperationScheduler;
import org.xith3d.picking.NearestPickListener;
import org.xith3d.picking.PickResult;
import org.xith3d.picking.PickingLibrary;
import org.xith3d.render.Canvas3D;
import org.xith3d.render.Canvas3DFactory;
import org.xith3d.render.config.FSAA;
import org.xith3d.scenegraph.BranchGroup;
import org.xith3d.ui.hud.HUD;
import org.xith3d.ui.hud.base.Widget;
import org.xith3d.utility.screenshots.ScreenshotEngine;

abstract public class TK_Xith3DUniverse {

    private String URL_Base = TK_FileUtils.getCurrentDirectory();
    public Canvas3D canvas3D;
    public Xith3DEnvironment environment;
    private ScreenshotEngine sse;
    private NearestPickListener nearestPickListener;
    public InputAdapterRenderLoop renderLoop;
    public HUD hud;
    public boolean keyPressed[] = new boolean[256];
    public boolean mousePressed[] = new boolean[3];
    public int mouseLoc[] = new int[2];
    public static final int MOUSE_MASK_LEFT = MouseMask.LEFT_BUTTON;
    public static final int MOUSE_MASK_MIDDLE = MouseMask.MIDDLE_BUTTON;
    public static final int MOUSE_MASK_RIGHT = MouseMask.RIGHT_BUTTON;
    private long pickId = 0L;
    private long pickResultId = 0L;
    private String picked = null;

    public TK_Xith3DUniverse() {
        this(TK_GeneralUtils.getScreenWidth(), TK_GeneralUtils.getScreenHeigth(), true, FSAA.OFF);
    }

    public TK_Xith3DUniverse(int width, int height, boolean vsync, FSAA fsaa) {
        canvas3D = Canvas3DFactory.createFullscreen(width, height, vsync, fsaa);

        environment = new Xith3DEnvironment();
        environment.addCanvas(canvas3D);
        lookAtDefault();

        sse = environment.getScreenshotEngine();

        nearestPickListener = new NearestPickListener() {

            public void onObjectPicked(PickResult nearest, Object userObject, long pickTime) {
                pickResultId++;
                picked = nearest.getNode().getName();
            }

            public void onPickingMissed(Object userObject, long pickTime) {
                pickResultId++;
                picked = null;
            }
        };

        renderLoop = new InputAdapterRenderLoop() {

            @Override
            public void onKeyPressed(KeyPressedEvent e) {
                System.out.println(e.getKeyCode());
                keyPressed[e.getKeyCode()] = true;
            }

            @Override
            public void onKeyReleased(KeyReleasedEvent e) {
                keyPressed[e.getKeyCode()] = false;
            }

            @Override
            public void onMouseButtonPressed(MousePressedEvent e) {
                mouseLoc[0] = e.getX();
                mouseLoc[1] = e.getY();
                if (e.getButton() == MOUSE_MASK_LEFT) {
                    mousePressed[0] = true;
                    TK_Xith3DUniverse.this.onMouseButtonPressed(MOUSE_MASK_LEFT);
                } else if (e.getButton() == MOUSE_MASK_MIDDLE) {
                    mousePressed[1] = true;
                    TK_Xith3DUniverse.this.onMouseButtonPressed(MOUSE_MASK_MIDDLE);
                } else if (e.getButton() == MOUSE_MASK_RIGHT) {
                    mousePressed[2] = true;
                    TK_Xith3DUniverse.this.onMouseButtonPressed(MOUSE_MASK_RIGHT);
                } else {
                    TK_Xith3DUniverse.this.onMouseButtonPressed(-1);
                }
            }

            @Override
            public void onMouseButtonReleased(MouseReleasedEvent e) {
                mouseLoc[0] = e.getX();
                mouseLoc[1] = e.getY();
                if (e.getButton() == MOUSE_MASK_LEFT) {
                    mousePressed[0] = false;
                    TK_Xith3DUniverse.this.onMouseButtonReleased(MOUSE_MASK_LEFT);
                } else if (e.getButton() == MOUSE_MASK_MIDDLE) {
                    mousePressed[1] = false;
                    TK_Xith3DUniverse.this.onMouseButtonReleased(MOUSE_MASK_MIDDLE);
                } else if (e.getButton() == MOUSE_MASK_RIGHT) {
                    mousePressed[2] = false;
                    TK_Xith3DUniverse.this.onMouseButtonReleased(MOUSE_MASK_RIGHT);
                } else {
                    TK_Xith3DUniverse.this.onMouseButtonPressed(-1);
                }
            }

            @Override
            public void onMouseMoved(MouseMovedEvent e) {
                mouseLoc[0] = e.getX();
                mouseLoc[1] = e.getY();
            }

            @Override
            public void onMouseWheelMoved(MouseWheelEvent e) {
                mouseLoc[0] = e.getX();
                mouseLoc[1] = e.getY();
                TK_Xith3DUniverse.this.onMouseWheelMoved(e.getWheelDelta());
            }

            @Override
            protected void prepareNextFrame(long gameTime, long frameTime, TimingMode timingMode) {
                TK_Xith3DUniverse.this.update(gameTime, frameTime, timingMode, timingMode.getMilliSeconds(gameTime));
            }

            @Override
            protected void onRenderLoopStarted() {
                TK_Xith3DUniverse.this.init();
            }
        };
        renderLoop.addRenderEngine(environment);
        renderLoop.getInputManager().registerKeyboardAndMouse(canvas3D);
        hud = new HUD(canvas3D, renderLoop.getOperationScheduler());
        environment.addHUD(hud, renderLoop.getInputManager());
        renderLoop.begin();
    }

    public long pickNearest(BranchGroup bg, int mouseMask) {
        PickingLibrary.pickNearest(bg, canvas3D, mouseMask, mouseLoc[0], mouseLoc[1], nearestPickListener);
        pickId++;
        return pickId;
    }

    public String getPickResult(long pickId) {
        while (pickResultId < pickId);
        return pickResultId > pickId ? null : picked;
    }

    public void lookAt(Point3f eyePosition, Point3f viewFocus, Vector3f vecUp) {
        environment.getView().lookAt(eyePosition, viewFocus, vecUp);
    }

    public void addParallelBranch(BranchGroup bg) {
        environment.addParallelBranch(bg);
    }

    public void addPerspectiveBranch(BranchGroup bg) {
        environment.addPerspectiveBranch(bg);
    }

    public void addWidget(Widget w, float locX, float locY) {
        hud.addWidget(w, locX, locY);
    }

    public File takeScreenShot() {
        return sse.takeScreenshot(false);
    }

    public OperationScheduler getOperationScheduler() {
        return renderLoop.getOperationScheduler();
    }

    abstract public void preExit();

    public void exit() {
        preExit();
        renderLoop.end();
        System.exit(0);
    }

    abstract public void onMouseButtonPressed(int mouseMask);

    abstract public void onMouseButtonReleased(int mouseMask);

    abstract public void onMouseWheelMoved(int mouseWheel);

    abstract public void update(long gameTime, long frameTime, TimingMode timingMode, long gameMilliSeconds);

    abstract public void init();

    public OBJModel loadModelOBJ(URL url) {
        try {
            return new OBJLoader().loadModel(url);
        } catch (Exception ex) {
            return null;
        }
    }

    public AC3DModel loadModelAC3D(URL url) {
        try {
            return new AC3DLoader().loadModel(url);
        } catch (Exception ex) {
            return null;
        }
    }

    public AseModel loadModelASE(URL url) {
        try {
            return new AseLoader().loadModel(url);
        } catch (Exception ex) {
            return null;
        }
    }

    public Model loadModelBSP(URL url) {
        try {
            return new BSPLoader().loadModel(url);
        } catch (Exception ex) {
            return null;
        }
    }

    public Cal3dModel loadModelCAL3D(URL url) {
        try {
            return new Cal3dLoader().loadModel(url);
        } catch (Exception ex) {
            return null;
        }
    }

    public CelShadingModel loadModelCELSHADING(URL url) {
        try {
            return new CelShadingLoader().loadModel(url);
        } catch (Exception ex) {
            return null;
        }
    }

    public org.xith3d.loaders.models.impl.dae.Model loadModelDAE(URL url) throws Exception {
        throw new Exception("now implemented yet");
    }

    public MD2Model loadModelMD2(URL url) {
        try {
            return new MD2Loader().loadModel(url);
        } catch (Exception ex) {
            return null;
        }
    }

    public MD5Model loadModelMD5(URL url) {
        try {
            return new MD5Loader().loadModel(url);
        } catch (Exception ex) {
            return null;
        }
    }

    public TDSModel loadModelTDS(URL url) {
        try {
            return new TDSLoader().loadModel(url);
        } catch (Exception ex) {
            return null;
        }
    }

    public void setURLBase(String base) {
        URL_Base = base;
    }

    public URL getURL(String fileName) {
        return TK_FileUtils.getURL(URL_Base + fileName);
    }

    public void lookAtDefault() {
        lookAt(new Point3f(0f, 0f, 5f), Point3f.ZERO, Vector3f.POSITIVE_Y_AXIS);
    }
}

Below is my game ( I am open to ideas :> )

Code:
package com.tk.programs.world.xith3D.xith3DGame;

import com.tk.libraries.gui.xith3D.TK_Xith3DUniverse;
import java.awt.event.KeyEvent;
import org.xith3d.loop.UpdatingThread.TimingMode;
import org.xith3d.scenegraph.BranchGroup;

public class Run {

    public static void main(String[] s) {
        new TK_Xith3DUniverse() {

            @Override
            public void onMouseButtonPressed(int mouseMask) {
                System.out.println("mp" + mouseMask);
            }

            @Override
            public void onMouseButtonReleased(int mouseMask) {
                System.out.println("mr" + mouseMask);
            }

            @Override
            public void onMouseWheelMoved(int mouseWheel) {
                System.out.println("mw" + mouseWheel);
            }

            @Override
            public void update(long gameTime, long frameTime, TimingMode timingMode, long gameMilliSeconds) {
                if (keyPressed[KeyEvent.VK_ESCAPE]) {
                    exit();
                }
            }

            @Override
            public void init() {
                setURLBase("C:\\Documents\\Utils\\src\\com\\tk\\programs\\world\\xith3D\\xith3DGame\\data\\");
                BranchGroup bg = new BranchGroup();
                bg.addChild(loadModelOBJ(getURL("jeep.obj")));
                addPerspectiveBranch(bg);
            }

            @Override
            public void preExit() {
            }
        };
    }
}

and last one; Below is my exception list

run:
Code:
WARNING: Theme "GTK" could not be loaded. Using Fallback-Theme
javax.media.opengl.GLException: Method "glClientActiveTexture" not available
        at com.sun.opengl.impl.GLImpl.glClientActiveTexture(GLImpl.java:993)
        at org.xith3d.render.jsr231.TextureShaderPeer.clutchTextureUnit(TextureShaderPeer.java:457)
        at org.xith3d.render.jsr231.TextureShaderPeer.shade(TextureShaderPeer.java:731)
        at org.xith3d.render.RenderPeer.setState(RenderPeer.java:291)
        at org.xith3d.render.RenderPeer.renderAtom(RenderPeer.java:333)
        at org.xith3d.render.jsr231.RenderPeerImpl.drawBin(RenderPeerImpl.java:374)
        at org.xith3d.render.jsr231.RenderPeerImpl.renderMain(RenderPeerImpl.java:628)
        at org.xith3d.render.jsr231.RenderPeerImpl.renderRenderPass(RenderPeerImpl.java:760)
        at org.xith3d.render.jsr231.RenderPeerImpl.render(RenderPeerImpl.java:844)
        at org.xith3d.render.jsr231.CanvasPeerImplBase.doRender(CanvasPeerImplBase.java:306)
        at org.xith3d.render.jsr231.CanvasPeerImplAWT.display(CanvasPeerImplAWT.java:570)
        at com.sun.opengl.impl.GLDrawableHelper.display(GLDrawableHelper.java:78)
        at javax.media.opengl.GLCanvas$DisplayAction.run(GLCanvas.java:435)
        at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:194)
        at javax.media.opengl.GLCanvas$DisplayOnEventDispatchThreadAction.run(GLCanvas.java:452)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
BUILD SUCCESSFUL (total time: 6 seconds)

The question is: Why are these exceptions happening?
I need desperate help.
« Last Edit: 14. May 2009, 09:08:19 pm by Marvin Fröhlich » Logged
tugalsan
Just dropped in

Offline Offline

Posts: 2



View Profile WWW Email
« Reply #1 on: 14. May 2009, 07:49:20 pm »

TK_FileUtils...
Code:
    public static URL getURL(String string) {
        try {
            return getFileObject(string).toURI().toURL();
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
    public static File getFileObject(String fileOrDirectoryName) {
        try {
            return new File(fileOrDirectoryName);
        } catch (Exception e) {
        }
        return null;
    }

TK_GeneralUtils...
Code:
    public static int getScreenWidth() {
        return Toolkit.getDefaultToolkit().getScreenSize().width;
    }

    public static int getScreenHeigth() {
        return Toolkit.getDefaultToolkit().getScreenSize().height;
    }
« Last Edit: 14. May 2009, 09:08:57 pm by Marvin Fröhlich » Logged
Marvin Fröhlich
Xith Lord
Administrator
Guru
*****
Offline Offline

Posts: 4403


May the 4th, be with you...


View Profile
« Reply #2 on: 14. May 2009, 09:51:04 pm »

First you need the hudthemes.jar in your classpath. And then you need OpenGL 1.3 support. I assume, your hardware is capable of that. So you should install recent drivers.

And please use a recent version of Xith3D. Please check it out from SVN. I have already ported your code to the current API. You will see, that it has become a lot simpler and shorter.

Marvin
Logged
Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic