[JAVA/C++]Snelheid van JNI

Pagina: 1
Acties:

  • Oogst
  • Registratie: Juli 2001
  • Laatst online: 04-01 21:29
Voor een grote groepsopdracht voor mijn studie informatica aan de Universiteit Utrecht is het nodig dat we een spel maken waarbij de AI in JAVA wordt geschreven. Een andere eis van de opdrachtgever is dat we fancy 3d-graphics opleveren. Dit gaat natuurlijk niet echt goed samen: JAVA en fancy 3d-graphics. Vandaar dat we graag de engine in C++ zouden laten draaien en de AI dus in JAVA.

Hiervoor wilden we JNI gebruiken, want dit is daar tenslotte voor bedoeld. Het grote probleem van JNI is echter dat het erg omslachtig lijkt te zijn en daardoor veel tijd kost. Mijn vraag is dan ook: is dit überhaupt haalbaar? Kunnen we soepele 3d-graphics uit C++ krijgen wanneer we veel met JNI doen?

En wat zou sneller zijn? Wanneer we alles behalve de AI in C++ doen en vervolgens voor de AI via JNI JAVA-klassen aanroepen, of wanneer we alles in JAVA doen en alleen de engine in C++ laten doen?

Ik heb tot nog toe nog weinig kunnen vinden over de snelheid van JNI, alleen over de mogelijkheden. Wel heb ik deze natuurlijk gevonden:

http://java.sun.com/j2se/1.4.2/docs/guide/jni/

Alwaar ik ook las dat er speciaal voor graphics de AWT native interface is, die hopelijk flink versnelt. Maar is dat snel genoeg? Of is JNI dusdanig traag dat we beter álles in JAVA kunnen doen, zelfs de engine? Dat laatste lijkt me niet bepaald wenselijk, maar misschien toch?

En zijn er nog algemene tips om JNI zo snel en optimaal mogelijk te laten werken? Valkuilen die je moet ontwijken wanneer je snelheid wilt?

Devblog / portfolio
Swords & Soldiers
Awesomenauts
Proun
Cello Fortress


  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 07:53

NDF82

Doomed Space Marine

Je kunt denk ik beter een bestaande library gebruiken die java met opengl bind. Scheelt je een hoop werk denk ik.

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik zou idd ook gaan voor een opengl binding voor Java. Hiermee laat je de videokaart de 3d werkzaamheden doen, en hoeft java alleen nog maar aan te sturen.

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
De Java3D API die in SDK1.4 zit, is toch al heel wat geoptimaliseerd en dus ook qua snelheid zeer goed is. Dus ik denk dat je idd wel deze API ook kunt gebruiken ...

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • Oogst
  • Registratie: Juli 2001
  • Laatst online: 04-01 21:29
Maar dan heb ik nog geen engine, alleen OpenGL. Zijn er goede JAVA 3d-engines te vinden? Wat ik tot nog toe vond was zeer matig.

Devblog / portfolio
Swords & Soldiers
Awesomenauts
Proun
Cello Fortress


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

[shameless plug]
Je mag mijn (software) engine lenen :P
http://www.oisyn.nl/homeboxx
[/shameless plug]

Met java3d kun je wel grappige dingen doen, het is iig een stuk makkelijker dan een directe opengl binding. Met die binding ben je natuurlijk wel weer veel vrijer, maar jullie willen daar dus verder geen tijd in steken begrijp ik?

Het ligt een beetje wat je allemaal wilt. Een beetje een landschap weergeven met wat objecten erin is goed te doen in java3d. Indoor icm PVS lukt ook wel als je handig gebruikt maakt van een Switch (da's een speciale class binnen java3d).

Maar waarom moet de AI eigenlijk in java, als de rest wel gewoon in een andere taal mag?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Oogst
  • Registratie: Juli 2001
  • Laatst online: 04-01 21:29
Het is een onderwijsproject en studenten van verschillende scholen moeten die AI schrijven in JAVA, vandaar dat dat gedeelte in JAVA moet. De rest mogen we zelf weten. En software-rendering is gewoon geen optie. Flashy graphics is zo ongeveer een vereiste en er moeten eigenlijk toch wel 100 characters tegelijk in beeld komen.

Een vriend van me noemt nu een andere oplossing die wel leuk klinkt. Hij zou de AI's als aparte thread willen laten draaien en dan daarmee communiceren via TCP/IP. Al het andere kan dan in C++ gebeuren en er moet toch al heel veel via netwerken, want het moet over internet draaien. Is dit wat?

Devblog / portfolio
Swords & Soldiers
Awesomenauts
Proun
Cello Fortress


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom is dat een beter idee dan JNI?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Oogst
  • Registratie: Juli 2001
  • Laatst online: 04-01 21:29
Een groepsgenoot mailde me een citaat ergens vandaan dat een JNI-functie-call maar liefst tussen de 0,5ms en 1ms duurt. Dat is idioot lang. TCP/IP leek me sneller te kunnen, maar weten doe ik dat niet.

Devblog / portfolio
Swords & Soldiers
Awesomenauts
Proun
Cello Fortress


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat lijkt me echt onzin, maar daar kan ik geen zinnig woord over zeggen daar ik niet zo superveel ervaring heb met JNI ;)

Maar hoe denk je dat die opengl bindings en al die andere natives dan in elkaar zitten? Zoals ik al zei, 1 ms lijkt me echt overdreven veel, dat betekent op een 1 GHz processor dat de call uit zo'n 1 miljoen instructies bestaat, beetje onrealistisch als je het mij vraagt :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1