Saturday, August 08, 2020

Argustastic

A busy two days. Deb and I were away yesterday, a trip together for the first time since March and lockdown, to the Williamson Art Gallery to collect two paintings which, ultimately, were not exhibited there. It was a long trip in the excessive heat, to meet a 10-minute window of deadline, so all very stressful - the gallery is 45 miles away, and not easy to get to. My Eventbrite-booked 10-minute window was, unsurprisingly given the inefficiency of most technology, not on their system, but all went fine and the staff were very helpful. In my stress and angst I dropped my bag and smashed my glass water bottle, dripping water onto the gallery floor. An expensive trip, but it felt good to fianlly get my paintings back.

Today I carefully repacked the paintings for storage, then started work by designing the new cover for the forthcoming Chinese translation of 21st Cenutry Surrealism. I'm reminded what a great book full of truths and genius it is; I must write more when I have time.

After that, Lots of progress on Argus programming, I think I'm near version 1.00.

I started by adding lots of utility functions to create events; now you can create a spread of events with random spacing, or modify the contents of the existing events. I can't be sure how useful these will be; I'm generally copying the sort of thing I have in Prometheus rather than knowing what I need. There are far fewer events here:

START and MOVE will place an object. Both make one appear, the only difference between the two is that START will reset all modulators. SET MODULATOR can attach or detach a modulator at will which can be used for any sort of things from motion, fading... you can fade the entire screen to black for example by creating a full-screen black plane at a top-level actor and using a ramp modulator to increase the opacity. SET COSTUME can be used to instantly change one actor type into another, that black placn could become a ball or anything else. KILL deletes an actor from the scene, and MUSIC ON plays music, which is there only as a utility function, in case you want to synchronise something. It's not perfect, it won't speed up or slow down to keep time correctly, but this is easy to add and is better than playing music with an external program, if music is desired.

Then some work on the last big job: the live recording. Argus is already pretty powerful without it, but this was one of my key ideas and I worked out that it will be quite easy to add. The principle is that when in the 3D preview mode, either frozen on a certain frame or when playing the film, you can 'capture' the current actor. It will then jump to the mouse and you can move it in the x/y axes. The other axes and controls keep running as normal, which looks a bit strange if you have, say, a modulator on the z-axis, but this is necessary in a way because you'll want to see how it will actually look rather than just record your x/y track in isloation. A click will create an event to place the actor in the x/y.

I've got this working for x/y, but I'll probably need to add separate routines for other axes... I don't really want to confuse mouse usage. Left/right, for example, could always be x, so we might have x/z as an option, where z is up/down, but not y/z. Also, I could use left/right mouse to rotate in a certain axis to record angle data. For frames, keyboard keys for next/previous frame might work better.

All of these events will be overlapping, I think, you may have several on the same time slot, which is the fastest way add them. I will have to add a merge option for events on the same frame that have different data types. I could add a new 'record' type event so that the hand-recorded data is essentially temporary until 'fixed'. This would be useful if a second take is needed, as one could erase just the newly recorded events, and keep any pre-programmed event... but perhaps I'm unlikely to pre-program something and then record over the top anyway. Anyway, it is trivial to add these record events if they are needed.

I've also designed a new icon (oh, joy, I discover that I can't insert an image in HTML mode, rubbish new Blogger - how can they consider this 'upgrade' finished when it is less functional than the 10-year old interface!)



And I've fixed a curious behaviour in that moving from full screen DirectX 3D mode to Windowed mode made the window 'always on top'. I've fixed this with a new command: "SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);".