DIET3D : FREE 3D ENGINE DEMO (JAVA / J2ME) FOR MOBILES


Language :
English
French / Francais
About :
The idea is to provide a FREE Open Source Real Time 3d engine for phones and mobile devices.
Currently don't expect to play quake on your device, but it can display spinning logos with lightning (like old-school demo of early 1990s).
Upcoming, Features are : texture mapping, Rubik's cube game

Main Features :
Portable to MANY devices (vs native 3D)
Rendering Modes : Vertex, Wire-frame, Filled, Color, Back-face Culling, Dynamic Lightning (Fresnel), Triangle Filler, Z-Sort
Requirements :
It is available for different profiles more or less based on MIDP API (Mobile Internet Device Profile) : Supported device are too long to mention (today Diet3D has been tested over 30 devices, see testers)


Contact :
Project URL is : http://rzr.online.fr/java.htm
I started this stuff as a showcase of my skills in the Java Programming Language.
I also have a résumé online , and I am to hire : http://rzr.online.fr/job.htm
You can reach me Philippe COVAL at http://rzr.online.fr/contact.htm for Questions, Remarks, Ideas, Features Request, and bug reports
Project Official name is Diet3D (because Mini3D was already one of my project)

Support Author & Software:
Because I am not paid (so far) for this project, it does not mean that I don't need encouragements : http://rzr.online.fr/help.htm
Please Can you visit sponsors at top/bottom of the page (I'll get a few cents)
Also contact me if you want a specific 3D logo for yourself or your company. I can charge a few bucks for that (or making some documentation).

License :
It is GPL Licensed That's mean you can afford it for $0 and for $0 extra you'll get the sources code. https://github.com/rzr/diet3d
BUT you have no right until you read this : http://rzr.online.fr/license.htm

Contribute :
PLEASE reports me your tests, patches, documentations are also welcome, (I can set a CVS up if needed)

Download Byte Code & Sources (GPL Licenced)
There is a GPL version of the sources (midp1.0 wireframe only) at : http://groups.yahoo.com/group/rzr-en/files
Applet:
Support appletviewer.exe on windows-xp (JDK 1.8u131) thx @Tarnyko

Please visit sponsors or donate, for speeding up project.
Misc:
Linux J2ME + Tutorial
Funny Applets

DOWNLOAD & INSTALL


On a Real phone device (Over the Air, with WAP, GRPS or BlueTooth)
If you open this page with your mobile (it detects, wap or html) and select .JAD link (or .jar if problems)
http://37337.free.fr/
If having trouble with this address, you can try this alternate ones (SE dont support redirection)
http://rzr.online.fr/wap.wml
http://rzr.online.fr/wap.html
It should install by itself (fast , because it is less than 10Kb)
On a Real phone device (Beam it with cable,Infra Red,Bluetooth etc)
Pick the both files .jar & .jad
http://rzr.online.fr/docs/java/diet3d/
It is Available in several flavor
WWW / (java Applet)
Inside your web browser (java must be supported) :
http://rzr.online.fr/docs/java/diet3d/jclasses-j2se/applet.htm
Inside Micro Emulator Applet (not working w/ MS JVM)
http://rzr.online.fr/docs/java/diet3d/jclasses-midp1_0/Diet3D.html
On your Desktop Comp
# with RI
/opt/midp2.0fcs/bin/midp -transient -force ${URL}

# with java
appletviewer applet.htm
java Diet3DApplet

NEWS

Work in progress & TODO's
Look at OpenGL ES
Think about math optimizations
Try ant vs gmake
Port to more plate-form using API extensions, Deploy for ExEn , KPN, Brew, Mophun, MS SmartPhone, etc
Working on C++ port for SymbianOS (help welcome)
IF LASTEST VERSION CRASH : PICK STABLE ONE
Texture mapping
ReDesign and freeze some API (partially inspired from M3G JSR-184)

News
2010-03-02 :
Diet3D ported to blackberry
Tested on blackberry Curve 9900
diet3d.jad
2009-01-19 :
Diet3d ported to dalvik (android) unoptimized
Tested ok on nitdroid n770 and G1 (must center it)
Diet3D.apk
2008-10-24 :
Work in progress , android port is possible, currently tracing lines...
Random notes : http://rzr.online.fr/q/diet3d
2004-04-23 :
Since I got a new full time job, I let this project on sleep state.
I will release source code if enough people ask for it in the "rzr-en Forum"
and a texture mapping code still needs to be debugged (see forum)
Thank everyone for testing,
2004-04-01 :
Remaining Random bugs on 3210i 3650
Misc Info move here from now on : http://rzr.online.fr/q/diet3d
2004-03-04 : Version 0.9
Nokia3650 @ mahadeva1 : tux/spin/zsort+light = 6-9 Fps cube+zsort+light= 32fps cube+pixel=7fps
cube/spin/pixel = 5-8 pfs @ Nokia7650
dyn light
exen / supported on panasonic
works again (one profile more)
2004-02-25 :
support for PalmOS (.prn)
ZSorting (wip)
Pixel Filler (wip)
Ported to Doja (Nttdocomo / Imode) (wip)
2004-02-01 :
Project renamed to Diet3D (mini3d is another of my projects), btw I thought about other names like Mobile3d ? PoorMan3d? Handy3d?
GUI added (Info Button)
Filled Face Mode for midp1.0
Profile Detection / Redirection
Inverse video (black on white)
2003-12-03 : Port to ExEn v2 API (In-Fusio.com)
ExEn SDK seems quite usable under Linux
PVC gen works, the emulator as well (see doc)
2003-11-24 : Tested and Code frozen
Bugs fixed
See troubleshooting section if curious
Display Fps stats, interact with keys
2003-11-18 : Optimizing
Some optimizations, join classes together, macros
New Sphere shape
2003-11-17 : Demo Released for 3 profiles
Key toggle rendering modes and shape
Using Nokia extensions with Nokia SDK
2003-11-16 : Fast lightning rendering
Using Timer Thread at 10fps
Started to Optimize Maths (unroll loops, reuses objects etc)
MicroEmu applet
2003-11-14 : Use Preprocessor
I Use a preprocessor from now on to generate midp 1.0 / 2.0 sources
Project tree changed (also usable with ktoolbar)
Disabled some rendering features (will add them once optimized)
2003-11-13 : 1st Release @ 2fps+
Back-ported to 1.0 and works
Back face culling
Disabled all 2.0 extensions (will add them again later)
Works also with mipd2.0fcs (Reference implementation)
Interactivity
2003-11-11 : Testing Alpha Engine
new applet : port of j2me 3d engine as an applet (or application) , new sources
2003-11-09 : Getting Familiar with tools
Page shows up
I thought about adapting a 3d applet made some years ago http://rzr.online.fr/net3d.htm but for some reasons I preferred to start it over from scratch.and remain it free (as libre).

USERS REPORTS

I like to thank all the users and devices owners who took time to test my buggy midlets.
Reports if it works on your device
Wiki : http://rzr.online.fr/wiki.htm
Or email me :
Supported Devices : (brand, model , (comments) @ tester#date )
http://java.sun.com/webapps/device/device

    MIDP-2.0

  1. HTC SPV C500 (Orange) on Windows Mobile (fastest ever saw so far)
  2. Nokia 6630
  3. "Nokia6600/1.0 (3.49.1) SymbianOS/7.0s Series60/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.0" (midp2.0 ,176x208x16b , 150 Mhz ) @ Hoppa#20031124 , fisch , Hiisty (v3.42.1) , robban, sKiz0 http://www.forum.nokia.com/main/0,6566,015_291,00.html
  4. Motorola V525, "MOT-V525M/0B.09.1DR MIB/2.2 Profile/MIDP-2.0 Configuration/CLDC-1.0 UP.Link/5.1.1.5a"
  5. Motorola i730 @ kjkjkjkiu (0fps on pixel and zsort)
  6. Motorola V600 "MOT-V600/0B.09.1DR MIB/2.2 Profile/MIDP-2.0 Configuration/CLDC-1.0"
  7. Sony-Ericsson P900 (midp2.0 200Mhz) @ zell|rhk
  8. Sony-Ericsson V800 : "Vodafone/SonyEricssonV800/R1S025 Browser/SEMC-Browser/4.1 Profile/MIDP-2.0 Configuration/CLDC-1.1" @ http://cybertooth.free.fr/carnet
  9. Sony Ericsson Z1010 @ jojo (tux zortlight) = 11 FPS @ jojo
  10. Sony Ericsson K700i "SonyEricssonK700i/R2A SEMC-Browser/4.0 Profile/MIDP-1.0 MIDP-2.0 Configuration/CLDC-1.1" = ~17-20fps tux zsort+light @roopi%jorosa.com
  11. Sagen myV-65 (midp2.0) : "SAGEM-myV-65/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.0 UP.Browser/6.2.2.3.e.2 (GUI) MMP/1.0" Ecco@fr#20031227
  12. Sanyo8100 http://www.sanyo.com/wireless/handsets/scp-8100.htm
    (1fps) @ http://osnippets.org/
  13. Samsung sgh D500 @ pseudogaetan (support redirect)
  14. Samsung ??? @ ~pyxxis.net

    MIDP-1.0-nokia

  15. "NokiaN-Gage/1.0 SymbianOS/6.1 Series60/1.2 Profile/MIDP-1.0 Configuration/CLDC-1.0" @ glass#20040112,
  16. Nokia 7650 (Serie 60 , color 176x208) "Nokia7650/1.0 SymbianOS/6.1 Series60/0.9 Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.2.4" @ mrhill#20040125/c, fov#20040116 , patrikcrs , Hiisty#20031116
  17. Nokia 7250i @ szilsan "Nokia7210/1.0 (4.18) Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.1a"
  18. Nokia 7210 @ anton@ru#20031124
  19. "Nokia6650/1.0 (13.89) Profile/MIDP-1.0 Configuration/CLDC-1.0"
  20. Nokia 6310i
  21. Nokia6100/1.0 (05.16) Profile/MIDP-1.0 Configuration/CLDC-1.0 (4k colors) @ nithril.fr#20040122 , MXV , alfy1@fr , xmd@fr#20031203 (5.52)
  22. Nokia 5210i (col 96x64) @ Caribou.fr
  23. "Nokia5100/1.0 (4.05) Profile/MIDP-1.0 Configuration/CLDC-1.0" "java/lang/NullPointer/Exception" (menu) @ wap.lnxbx.dk
  24. Nokia 3650 (150 Mhz , gprs, 176x208, col 4096) "Nokia3650/1.0 SymbianOS/6.1 Series60/1.2 Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.1.1a" "Nokia3650/1.0 (4.13) SymbianOS/6.1 Series60/1.2 Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/1.1@" mahadeva1
    toco#20040122 , potsmoker , JyriH_
  25. Nokia3595/1.0 (7.00) Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/1.1 @ http://www.pandora.la
  26. Nokia 3510i "Nokia3510i/1.0 (03.51) Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.1a (Google WAP Proxy/1.0)" @ anAKiN(cable)#20031230
  27. Nokia 3410 (b/w , 1st generation of j2me) @ moise.fr#20031124
  28. Nokia3300/1.0 (4.05) Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.1a @ keysie12#20040122
  29. Nokia 3210i
  30. Nokia 3200 (64 KB) "Nokia3200/1.0 () Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.1a" @ neonatus #20040113=52pfs

    MIDP-1.0

  31. Siemens S55 @ bamboos#20031124
  32. Siemens MC60 (midp1.0) @ Lenny^^#20040126 (xfer only the jar file)
  33. Siemens SL45i @viraptor#20040129
  34. Siemens C55 @ you.au
  35. Siemens M55

  36. Sony-Ericsson T630 (128x160) @ http://www.fsck.ch
    #20040227
  37. Sony Ericsson T610 (midp1.0) "SonyEricssonT610/R101 Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.1.5a" @ valdo404
    , Bertil@se#20031220, eirikhm@no#20031217, maczar
  38. Sony-Ericsson z600 (midp1.0) @ beady#20040113=CubeWire30fps http://www.sonyericsson.com/z600/
  39. Sony-Ericsson P800 (midp1.0) : http://www.sonyericsson.com/P800/ @ nuk#20040207 , Moak#20040116=cube_wf25fps , caos

  40. Motorola : T720 "MOT-T720/G_05.07.23R MIB/2.0 Profile/MIDP-1.0 Configuration/CLDC-1.0 UP.Link/5.1.2.2" @ whickie
  41. motorolla a835 @ trippah

  42. Sagem SX1 (Symbian6) mem=114688 http://www.my-siemens.com/sx1/
  43. Samsung E700 (SGH-E700 Firmware E70XADA1) @ xmd@fr#20031203 "SAMSUNG-SGH-E700/BSI UP.Browser/6.1.0.6 (GUI) MMP/1.0"

    Others

  44. Palm / I TungstenT2 + Sun JVM (midp1.0)
  45. Palm m515 (Palm OS 4.1 + java HQ 1.0) (midp1.0) @ http://bdav.net
  46. panasonic gd87 (exen file must be converted) @ vinou http://gd87bios.pagesonline.net/
  47. Samsung SGH-E700 "SAMSUNG-SGH-E700/BSI UP.Browser/6.1.0.6 (GUI) MMP/1.0 UP.Link/5.1.1a"

Unsupported devices (please help?) :
Other Hardware To test :

OTHER JAVA DEMOS & PROJECTS


Here are some java stuff and other projects I was involved in.
J2ME 3d Engine (2003)
Read details on this page
open Applet window (port of engine to Applet's AWT)
3D Engine (100% java 1.0) + Vrml + live motion capture and streaming (2000)
open applets window
visit website
Psychelic Applet (1997)
funny 2D effect
open applet window
Database Wizard (1998)
auto-generated gui for databases
short doc
Raising island (1996)
I think thats my first applet
open applet window
I've been involved in other projects, you can check them out :
3d for the web (java+vrml+rmi+eai)
http://rzr.online.fr/net3d.htm
free pinball game (C++/OpenGL/SDL)
http://pinball.sourceforge.net
The Win32 port (House Version) http://rzr.online.fr/game.htm
Free 1st person shooter game (C++/OpenGL/SDL)
http://rwvsndj.tuxfamily.org
My Linux and open source Contribs
http://rzr.online.fr/linux.htm
Free Simple 3D toolbox for conversions etc (C)
used in previous projects http://project.tuxfamily.org/mini3d
Diablo like game project (in Java)
http://www.signfiction.com

DEVELOPER DOCUMENTATION

Environment & Tutorial
Linux J2ME + Tutorial
The problems & the tracks
no java.awt.* : nevermind we dont use them just Graphics
java.awt.Graphics ~!= javax.microedition.lcdui.Graphics : just replace or/and adapt
No double or float, sqrt, cos, and trigo : fixed point reals, tables, limited developments etc
Solutions & Explanations :
I created a MathFixed class that does float operations and trigonometric on int's and sinus are stored in a table.
For info the 3D mesh was generated in java with a external mini3d toolbox,
Compute sequential rotations
This could be also run in an applet or application (just replace imports)
Using a Preprocessor in Java ? (H4x0r stuff)
Most of the code is the same between different sdk and api, To ensure genericity I use GNU cpp preprocessor to generate java file, Java Reflexion could solve this ugly method but can't be used in j2me.

If you familiar with C or C++ (or Povray) using a preprocessor, should not be a trouble for you. Else here are some basic sample code :

// file://~/MyCanva.java.in
#ifdef MIDP20
#define paintTriangle(g,a,b,c,col)  { \
     DirectGraphics dg = DirectUtils.getDirectGraphics(g); \
     dg.fillTriangle(a[0],a[1],b[0],b[1],c[0],c[1], 0xFF000000|col ); \
    }
#else //default
#define paintTriangle(g,a,b,c,col)  { \
        g.drawLine( a[0] , a[1] , b[0] , b[1] ); \
        g.drawLine( a[0] , a[1] , c[0] , c[1] ); \
        g.drawLine( c[0] , c[1] , b[0] , b[1] );
#endif

class MyCanvas { // ...
  protected void paint(Graphics myg) { paintTriangle(myg,mya,myb,myc,mycol); }
}
Then you need to "compile the file"
cpp -undef -fno-show-column -DMIDP20 -C -P -I. -I \
 < MyCanvas.java.in > MyCanva.java
And you'll get a new file where macro was replaced :
// file://~/MyCanva.java
class MyCanvas { // ...
  protected void paint(Graphics myg) {
     DirectGraphics dg = DirectUtils.getDirectGraphics(myg);
     dg.fillTriangle(mya[0],mya[1],myb[0],myb[1],myc[0],myc[1], \
           0xFF000000|mycol );
  }
}
Got the Idea ? It is pretty simple , but can really be obfuscated thats why Java designers removed this feature in the language.
Evolutions & Révolutions :
Store mesh in compressed stream not class, and make a parser because there is a 32Kb file class limit :
java.lang.OutOfMemoryError: Mesh: Maximum byte code length (32kB) exceeded
Compute combinated rotations with Quaternion
Check for Stability in Numerics
Re-implement 3D algos for hidden faces removal (Zsorting, Zbuffer, BSP etc)
Texture mapping and lightning etc

www.Philippe.COVAL.online.FR
Last modified: Sat Apr 21 01:38:02 CEST 2007