#jogamp @ irc.freenode.net - 20161122 05:05:57 (UTC)
20161122 05:05:57 -jogamp- Previous @ http://jogamp.org/log/irc/jogamp_20161121050556.html
20161122 05:05:57 -jogamp- This channel is logged @ http://jogamp.org/log/irc/jogamp_20161122050557.html
20161122 08:38:14 * Eclesia (~husky@anon) has joined #jogamp
20161122 08:38:35 <Eclesia> hi
20161122 08:41:11 <zubzub> hi
20161122 08:41:29 <zubzub> Eclesia: 13:17 < rmk0> meant to ask him how he ended up implementing inverse kinematics
20161122 08:42:28 <Eclesia> 'how' : with code ? :)
20161122 08:43:33 <Eclesia> I just wanted animated models, so I found a few docs on a recursive method and implemented it
20161122 08:45:08 <zubzub> rmk0: ^ :p
20161122 08:47:19 <Eclesia> zubzub the messager
20161122 09:01:08 * monsieur_max (~maxime@anon) has joined #jogamp
20161122 09:22:19 <bruce-> Eclesia: since you were/are also working on a gui toolkit. do you think having two opengl contexts on two threads (one for widgets, one for work) and somehow compositing/overlaying them in the same window is possible, or even a good idea?
20161122 09:24:32 <monsieur_max> bruce-: same window = same frame ?
20161122 09:25:31 <zubzub> bruce-: why not vulcan? :p
20161122 09:25:34 <Eclesia> bruce-: that's what I'm doing. but I noticed it doesn't work well on low-end device (gt210)
20161122 09:25:47 <bruce-> zubzub: because nobody supports it
20161122 09:25:56 <zubzub> details
20161122 09:26:14 <Eclesia> random freeze :/
20161122 09:26:21 <bruce-> zubzub, that's fine if you always want to work in the margins though
20161122 09:27:08 <bruce-> Eclesia: that sounds tricky
20161122 09:27:44 <Eclesia> yes, I'm even thinking about rendering my widgets on cpu for graphic cards < GL3
20161122 09:29:41 <bruce-> monsieur_max: yeah, so you have a thread running a renderer, that can potentially take a bit more them to present its work and on top of that you have a ui that should always be responding to user input
20161122 09:29:50 <bruce-> them->time
20161122 09:30:33 <bruce-> I don't support anything below GL3.3 though
20161122 09:31:43 <Eclesia> my widget renderer doesn't use a animator,I trigger the rendering only when needed an produce a texture which I swap in the main frame
20161122 09:31:44 <monsieur_max> how would one compose 2 differents gl context ?
20161122 09:32:22 <zubzub> using a hw overlay! :p
20161122 09:33:16 <bruce-> monsieur_max: I am figuring that out now. I know transparent windows on top of another application work well, so I am guessing it would also be possible to compose within an application
20161122 09:34:27 <monsieur_max> zubzub: ;)
20161122 09:34:49 <zubzub> bruce-: you know how that is done?
20161122 09:34:54 <monsieur_max> bruce-: what about FBOs ? could they be shared ?
20161122 09:35:24 <zubzub> the windows are basically just textures that are overlayed
20161122 09:35:47 <zubzub> and it's composed using a seperate application (the compositor)
20161122 09:36:15 <bruce-> that's fine
20161122 09:36:31 <zubzub> if you if you want to do it really fancy and fast, you should create 3 applications with a fast ipc
20161122 09:36:44 <zubzub> one that renders your ui
20161122 09:36:53 <zubzub> one the runs the business logic in ogl (lolwut)
20161122 09:36:58 <zubzub> and one that composites the 2
20161122 09:37:54 <zubzub> there are ogl extensions that allow you to share stuff between apps
20161122 09:38:38 <bruce-> sounds too complex
20161122 09:38:43 <bruce-> or complicated
20161122 09:38:49 <zubzub> that's because it is :)
20161122 09:39:30 <Eclesia> one app is fast enough. my widgets are running smoothly
20161122 09:39:39 <bruce-> monsieur_max: fbo's can be shared on contexts yeah
20161122 09:40:15 <bruce-> monsieur_max: I think that makes more sense than relying on the OS to do the compositing
20161122 09:40:34 <monsieur_max> i don't trust the OS
20161122 09:40:47 <monsieur_max> I'll start coding one
20161122 09:41:25 <Eclesia> monsieur_max: notify me when you are done ^^
20161122 09:41:41 <bruce-> a JVM based OS?
20161122 09:41:49 <monsieur_max> I might call it "Minus"
20161122 09:42:27 <Eclesia> not Maxus ?
20161122 09:43:24 <monsieur_max> let's stay humble ;)
20161122 09:52:13 * Eclesia (~husky@anon) Quit (Ping timeout: 256 seconds)
20161122 10:10:24 * Eclesia (~husky@anon) has joined #jogamp
20161122 10:21:58 * caelum19 (~Caelum@anon) has joined #jogamp
20161122 10:28:43 * Eclesia (~husky@anon) Quit (Ping timeout: 244 seconds)
20161122 10:47:57 * elect (~elect@anon) has joined #jogamp
20161122 11:07:36 * Eclesia (~husky@anon) has joined #jogamp
20161122 11:16:18 * Eclesia (~husky@anon) Quit (Ping timeout: 250 seconds)
20161122 11:37:20 <rmk0> Eclesia: the CCD algorithm?
20161122 11:37:35 <rmk0> or do you mean you only implemented forward kinematics?
20161122 12:15:16 * Eclesia (~husky@anon) has joined #jogamp
20161122 12:17:09 <Eclesia> rmk0: yes CCD, not jacobian
20161122 12:17:20 <rmk0> right!
20161122 12:18:03 <Eclesia> want the code ?
20161122 12:18:32 <rmk0> not yet
20161122 12:18:38 <rmk0> going to try implementing it first
20161122 12:19:39 <rmk0> i may integrate your solver as an optional component
20161122 12:19:51 <rmk0> as in... have multiple solvers conforming to an interface and allow users to pick one
20161122 12:20:00 <rmk0> there's also this thing: https://github.com/FedUni/caliko
20161122 12:20:13 <rmk0> implements an algorithm i hadn't heard of... supposedly usable for realtime work
20161122 12:21:37 <Eclesia> I have the interface too ^^ and an empty jacobian solver class
20161122 12:22:17 <rmk0> hehe, right
20161122 12:22:31 <rmk0> the jacobian method looks... nasty
20161122 12:22:40 <Eclesia> +1
20161122 12:24:21 <Eclesia> just the API : https://bitbucket.org/Eclesia/unlicense/src/tip/api/api-physics/src/main/java/un/api/physic/skeleton/IKSolver.java https://bitbucket.org/Eclesia/unlicense/src/tip/api/api-physics/src/main/java/un/api/physic/skeleton/InverseKinematic.java
20161122 12:26:26 <Eclesia> hmm cool : http://www.jonolick.com/code.html
20161122 12:35:34 * Eclesia (~husky@anon) Quit (Ping timeout: 252 seconds)
20161122 12:40:37 * Eclesia (~husky@anon) has joined #jogamp
20161122 12:40:58 <Eclesia> pff... new building, new network problems :(
20161122 12:44:13 * jvanek (jvanek@anon) has joined #jogamp
20161122 12:45:56 <rmk0> just attach every ethernet port to every other ethernet port
20161122 12:46:01 <rmk0> the data's bound to get there eventually
20161122 12:46:09 * Eclesia (~husky@anon) Quit (Ping timeout: 246 seconds)
20161122 12:46:13 <rmk0> or not
20161122 12:47:14 * Eclesia (~husky@anon) has joined #jogamp
20161122 12:48:18 <Eclesia> or not
20161122 12:59:04 * Eclesia (~husky@anon) Quit (Ping timeout: 244 seconds)
20161122 13:02:55 <bruce-> or twice
20161122 13:23:17 * caelum19 (~Caelum@anon) Quit (Ping timeout: 248 seconds)
20161122 13:26:05 * Eclesia (~husky@anon) has joined #jogamp
20161122 13:30:17 * Eclesia (~husky@anon) Quit (Ping timeout: 240 seconds)
20161122 13:52:28 * elect (~elect@anon) Quit (Read error: Connection reset by peer)
20161122 13:53:40 * elect (~elect@anon) has joined #jogamp
20161122 14:19:54 * caelum19 (~Caelum@anon) has joined #jogamp
20161122 15:15:37 * jvanek (jvanek@anon) Quit (Quit: Leaving)
20161122 16:57:52 * monsieur_max (~maxime@anon) Quit (Quit: Leaving.)
20161122 17:05:41 * elect (~elect@anon) Quit (Ping timeout: 248 seconds)
20161122 17:59:13 * monsieur_max (~maxime@anon) has joined #jogamp
20161122 20:54:16 * Eclesia (~eclesia@anon) has joined #jogamp
20161122 20:54:54 <Eclesia> rmk0: so you are starting to play with animation ?
20161122 20:55:21 <rmk0> Eclesia: yeah, implementing skeletal animation in general
20161122 20:55:29 <rmk0> along with all the bullshit required to get data out of blender
20161122 20:55:49 <Eclesia> rmk0: you parse blender files ?
20161122 20:56:06 <rmk0> no, i'm using their python "api" for now
20161122 20:56:28 <Eclesia> k
20161122 20:57:14 <bruce-> I enjoy your addition of quotation marks
20161122 20:57:33 <rmk0> (._.)
20161122 20:58:00 <rmk0> it's bad
20161122 20:58:09 <Eclesia> I don't known about the api but the format isn't as bad as many others
20161122 20:58:59 <rmk0> i don't think the format could be as bad as programming in python
20161122 21:00:40 <rmk0> it hadn't occurred to me before but they even defer resolution of names to run-time as lazily as possible
20161122 21:00:57 <rmk0> so you can have a code branch that's only rarely taken, perhaps due to an exception or something that refers to a nonexistent variable
20161122 21:01:10 <rmk0> you'll find the error in the code when the exception is eventually raised and not before
20161122 21:01:19 <rmk0> and this is considered good design
20161122 21:01:54 <rmk0> think the bulk of my code is type assertions, because anything can change at any time
20161122 21:02:18 <rmk0> the scoping rules are insane, and the same syntax is used for both declaration and assignment of variables, so you can easily accidentally mutate something in an outer scope without realizing
20161122 21:02:20 <Eclesia> hehe
20161122 21:02:37 <rmk0> is just so badly broken on so many levels
20161122 21:03:00 <Eclesia> hav you started to play with blender DNA structures ?
20161122 21:03:07 <rmk0> nope
20161122 21:03:16 <Eclesia> you seen them ?
20161122 21:03:18 <rmk0> i'm vaguely familiar with the internals, though
20161122 21:04:17 <Eclesia> anymay you should print them, it gives you the current properties for each class in the current blender version
20161122 21:04:23 <Eclesia> anyway*
20161122 21:04:58 <rmk0> i did manage to segfault blender from the python api, but they fixed that one in record time
20161122 21:05:34 <rmk0> https://developer.blender.org/T50046
20161122 21:14:15 <Eclesia> rmk0: http://unlicense.developpez.com/temporaire/BlenderSDNA.txt
20161122 21:14:23 <Eclesia> printing is not great but it might help
20161122 21:22:12 <rmk0> most of the difficulty is actually in working out the semantics of everything
20161122 21:22:21 <rmk0> like "what coordinate system is this thing i'm looking at supposed to be in?"
20161122 21:24:51 <Eclesia> I haven't found any definition property in the files. so after checking a few models on the web I used : new Axis[]{
20161122 21:24:51 <Eclesia> new Axis(Direction.RIGHT, Units.METER),
20161122 21:24:51 <Eclesia> new Axis(Direction.FORWARD, Units.METER),
20161122 21:24:51 <Eclesia> new Axis(Direction.UP, Units.METER)
20161122 21:24:51 <Eclesia> }
20161122 21:26:40 <rmk0> that's the blender convention for world space, but there are other systems
20161122 21:26:50 <rmk0> there are at least three coordinate systems with regards to armatures, for example
20161122 21:26:55 <rmk0> bone-relative, armature-relative, etc
20161122 21:27:22 <Eclesia> ha, I see what you mean
20161122 21:27:44 <Eclesia> blender stores the coordinates in several CS (at least in the file)
20161122 21:34:09 <Eclesia> https://bitbucket.org/Eclesia/unlicense/src/tip/storage/model3d/model3d-blend/src/main/java/un/storage/model3d/blend/adaptor2_72/Adaptor_2_72.java seems like the matrix on the bone is just a "parent to this node" transform.
20161122 21:35:10 <Eclesia> the animations are more painful to translate, timeseries,channels,....
20161122 21:41:35 <rmk0> i'm getting there
20161122 21:41:54 <rmk0> i impose some restrictions because blender supports way more than is reasonable to support for skeletal animation
20161122 21:42:12 <rmk0> like... it supports simultaneous interpolation of different components of a vector with different types of interpolation
20161122 21:42:38 <rmk0> that's just pointlessly flexible... interpolate the whole vector, damnit!
20161122 21:43:22 <rmk0> most of the export code is error reporting in painful detail so that there's no chance of exporting something that can't be supported, and no way of getting into a situation where you don't understand why you can't export something
20161122 21:44:30 <rmk0> will see how it goes
20161122 21:45:00 <rmk0> i'm exporting the final position/orientation/scale of each bone after collecting keyframes
20161122 21:45:27 <rmk0> i think i'm exporting the values that are calculated after all modifiers have been applied such as IK bones and so on, so i don't need to deal with those explicitly
20161122 21:45:38 <rmk0> at least that's what the API documentation seems to suggest
20161122 21:45:51 <Eclesia> I have to say sample by sample timeserie is pretty cool, I update my api to match it and I can reuse the same classes for stuff like widget scaling or blending animations.
20161122 21:46:32 <rmk0> it's good in that it can do a lot. it's way beyond the level of complexity that i'd want to support in a game engine, though
20161122 21:47:19 <Eclesia> sure, but for me it binding really well with widgets variables
20161122 21:47:25 <Eclesia> binds*
20161122 21:51:36 * monsieur_max (~maxime@anon) Quit (Quit: Leaving.)
20161122 22:36:55 * Eclesia (~eclesia@anon) Quit (Quit: Leaving.)
20161122 23:08:39 <rmk0> https://github.com/io7m/jcalcium/blob/develop/io7m-jcalcium-blender/src/main/resources/export.py
20161122 23:08:58 <rmk0> lot of work put in to getting good error reporting... produces errors like this:http://ataxia.io7m.com/2016/11/22/error_keyframe_no_corresponding.blend.caj.log.txt
20161122 23:13:41 <rmk0> the exported data appears to be correct. i get separate keyframes for translation/orientation/scale, and i get each value at each keyframe
20161122 23:13:48 <rmk0> i think gouessej was looking for something like this too
20161122 23:19:59 <rmk0> produces this: http://ataxia.io7m.com/2016/11/22/trivial0.blend.caj.txt
20161122 23:21:04 <rmk0> i don't plan to have the engine consume json... have written tools to transform those definitions to produce something that engines can consume directly
20161122 23:21:24 <rmk0> that json is the raw data with a few invariants preserved
20161122 23:28:37 * rmk0 (~rmk0@anon) Quit (Ping timeout: 248 seconds)
20161122 23:33:32 * rmk0 (~rmk0@anon) has joined #jogamp
20161123 02:22:26 * caelum19 (~Caelum@anon) Quit (Quit: Leaving.)
20161123 05:05:57 -jogamp- Continue @ http://jogamp.org/log/irc/jogamp_20161123050557.html