Part of what makes the ILDA format still relevant today is about what it doesn't dictate. Just my opinion. *nyancat
Printable View
Dean, when are you going to start making art with Liquid Math? You are the only person I know personally who has been dancing around with this stuff for 4 decades!
Watch my latest 4 videos. It's all right there in the waving my hands around and making weird noises.
.
I built a surface mount audio amp kit once. The parts were like specs of sand. I dropped one on a carpet and it took all day to find it, right under my desk. The tricky part is getting them out of the plastic tape containers made for pick and place assembly machines. Once I got them out I used post-it notes with the parts stuck on the gum to keep track of them.
Get yourself a gleaming pair of zircon encrusted tweezers.
New version!
08-30-2022
This one has a new menu option in [Tab] 5 g (save single frame with bridge).
This adds the bridge element from the last point back to the first if you optimize (menu h option q).
This is exactly the same bridge element that is added to the frame information when it is being written to a wave file and that frame needs to be repeated.
So this might be the entire contents of the frame stroked backwards depending on the value of the setting (also in [Tab] 5 ) of 6 max wagging time in seconds. If this is 0.0, then the wagging effect doesn't happen.
This only applies when saving a single frame of type ild.
I also fixed a bunch of other stuff!
The mono text font now even applies to the user input prompts.
Fixed a bunch of stuff in Liquid Math. I added a new example txt file called _clip.txt that demonstrates what that is all about.
Re-wrote the way the measuring grids work.
rectangular_grid_xy
rectangular_grid_xz
rectangular_grid_yz
rectangular_grid_xyz
polar_grid_xy
polar_grid_xz
polar_grid_yz
polar_grid_xyz
Fixed a lot of documentation in the Liquid_Math folder.
For some reason I haven't figured out yet, clipping does not work with a defined area of nothing. So it can only go down to anything that represents more than nothing (very small).
I thought I should release all these other things before I spend any more time on that.
.
I just checked it out in Win10 and I made this (attached).
Seems to be ok. (tiki_03.ild)
I imported ctn.wtf (settings file).
I went back and got the original dxf file and turned on a b c g in the optimization parameters since this is a dxf import.
Then I did a minimizes and an optimize in the h menu. (tiki_04.ild)
One thing I did notice that's new (I always update my msys2 before I build) is that now the boost::filesystem throws an exception when I run LB from a network mounted drive that is actually being shared from an old clone of XP running in a VM in Ubuntu. That's a bummer. But it runs fine on the local drive.
.
I bet I know why! It needs to be converted from dxf pallet to the default 63 color pallet!
I realized just before I fell asleep that both of my last 2 examples are wrong because they are both 2D and the second one is still using the dxf pallet.
I can see that with all the default settings. That's why all of the optimization parameters are definable.
Quote:
This is exactly the same bridge element that is added to the frame information when it is being written to a wave file and that frame needs to be repeated.
If I clock an opt ild at the same rate as an opt wav, I would expect the same result unless there are separate opt settings for each...
Both are derived from the same set of parameters, but the only way to make them the same would be to import a wav and save it as-is as ild.
You can inspect what you actually have using the visual elements (vertices, vectors, direction, blanking, vector order in Z) and the information you get when you hit / and ?.
The important parameters are max lit distance, max blank distance, max dwell.
These determine how far you can go in any direction in one sample and how long to hang on an angle up to 180 degrees.
You can see how many vertices are in a frame. If you show vertex order as Z you can look at the side of space and see the dwell and so forth.
Be it lit or blank, distance is independent of time, but if you change point rate the velocity (or draw rate) will follow it.
Max dwell IS time, so the tick rate of the clock must be known. Wave rendering in [redacted] looks to the chosen sample rate
for its time base. Dwell is applied to sudden angular changes for visual impact- this slows down the overall frame rate.
Since ild (or dxf) files contain no point rate specification, [redacted] dismisses dwell altogether when optimizing these frames.
It just so happens that the tiki file is loaded with steep angular changes, so its wave rendering in [redacted] contains a train car
load of dwell points to bog down the frame rate.
Dwell is most certainly added to frames during optimization and can be saved to an ild file.
As far as all the optimization parameters are concerned, you have to have some way to quantify that stuff.
Make sure you get the best minimization before you optimize. Make sure you get the fewest lit segments. A dxf import is typically way out of whack and segments can be broken in many pieces. Conglomerate is supposed to do some reconstruction of that. If you really want to get into it, you can explode a single frame into a frame_set, each frame a single segment. Then you can select frames an join them back together into a single frame. Frames join together end to end in the order of the frame_set. You can select and move frames to the beginning or the end of the frame_set to change the order they join. This way you can really see what you have and totally control the order and direction of the segments.
I'm really glad you're taking some real interest into the specifics of all this stuff. It's been 19 years of development.
Actually most of that stuff was developed well before I even ported it to SDL back in 2008.
.
If it's a factor that is measured in seconds or microseconds then it is relative to the set sample rate (default 48KHz).
Dwell is also progressive. The more acute the angle, the closer you get to the maximum dwell in microseconds (180 degrees).
In any event, dwell ends up being an integer number of points, so it's all just relative.
.
Ok. I'll have clear the cobwebs and blow the dust off of those areas of the code.
I'm seriously glad that you are finally looking at this stuff and I hope you are still learning C, C++, msys2, GNU Linux, GCC and all that other brain rotting nonsense.
This is the function for calculating the number of points to add to an angle. It is linear as you can see. That is, it adds points proportional to the angle from 0 to pi radians for anything over (pi / 8) radians (22.5 degrees). And it is based on sample_rate.Code:
// LaserBoy_utility.hpp
// line 95
//############################################################################
inline int inline_dwell_vertices(double angle, // zero to pi radians
int sample_rate,
double max_dwell_microsec
)
{
if(angle < (pi / 8))
return 0;
return (int)(ceil( (angle / pi) // zero to one
* (sample_rate * (max_dwell_microsec / 1000000.0))
)
);
}
Frame 16 of in.ild was designed to test for dwell.
Menu h now has two modes. You toggle between them with the letter t.
You can flatten Z on this frame to make it easier to differentiate between the actual XYZ view and the XYT, vertex order in depth ( [Tab] 1 j ). Then look at it before and after you add or remove dwell from the front ( digit 5 ) or from the side ( digit 6 ).
I think I see the issue! It is possible to keep adding angle dwell over and over again. So it is probably being added multiple times in your wave example, since you are probably optimizing in menu h and then choosing to output an optimized wav.
I'll fix that!
Excellent find! Thank you!Code:// LaserBoy_segment.cpp
// in function LaserBoy_Error_Code LaserBoy_segment::add_dwell()
// at about line 2314
LaserBoy_segment angle_optimized(palette_index, false);
//----------------------------------------------------------------
remove_dwell_vertices(); // <-- add this line!
//----------------------------------------------------------------
angle_optimized.push_back(front());
I just sneaked it into the current version. I will do another full release when I have more new stuff.
Now maybe you can figure out why the clip operator in Liquid Math can't handle an area of nothing.
James.
.
I just tried to do the 10 second wave rendering of the tiki dxf in this most recent update to [redacted] and I get the
same result- 3FPS.
I must have been doing something wrong earlier, because I can now see the effect that changing the wave sample rate
has on an optimized dxf frame without rendering to wave in both versions of [redacted].
I think I'm losing my mind...*retardo
You and me both bud!
Sometimes I look at the code and I think what the hell is this? How am I supposed to understand this nonsense?
Try this one. (attached tiki_05)Code:root@U22:/LaserBoyV# cloc src
57 text files.
57 unique files.
13 files ignored.
github.com/AlDanial/cloc v 1.90 T=1.61 s (27.9 files/s, 55612.7 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C++ 20 1699 5977 69686
C/C++ Header 24 195 1857 10183
make 1 29 4 115
-------------------------------------------------------------------------------
SUM: 45 1923 7838 79984
-------------------------------------------------------------------------------
I just found another bug!
in menu h option g conglomerate isn't hooked up to the right function.
I just sneaked another fix into the current zip. The only changes are to LaserBoy.exe (The Win64 executable) and stuff in the src directory.
I know how you analyze stuff Dean. That's why I'm really glad you are looking at all of this. I hope we can go wandering around in the code together so you can see the algorithms. It is complicated though because there are many layers to it. A function of the app is possibly many layers of functions in the code.
.
This is about as stripped down as I could get it.
This is NOT optimized!
It's just the least amount of points.
Since when did I ever bother with reading the directions? :rolleyes:Quote:
Make sure you get the best minimization before you optimize.
This morning I tried minimizing the tiki dxf before optimizing as ild and the result was slightly better.
The big difference came when I tried minimizing before wave rendering- it went from 3FPS to 10FPS @48k.
The real question is what started this discussion in the first place: Why does wave optimization behave
differently than other means of optimization within the app?
That's a perfectly reasonable question. It probably has something to do with the fact that I just use [redacted] by pure habit. I don't really think about it, unless I'm really concentrating on documenting it for someone else.
I should probably go over all of it with the intention of making another video tutorial about making wave files. That always results in fixing all kinds of stuff.
.
Ya know, with all the menu processing options, it would be nice to have a universal 'undo last operation' hotkey...:cool:
Apparently you've never read the last line of my signature that has been there for all these many years.
In order to make that work for all cases, a copy of the entire memory object would have to be made, because some of the operations are data destructive.
If you know what's going on, some operations are reversible by others operations.
.
You don't say... *nyancat
https://youtu.be/l3q-zwvqBq8
[redacted] is laser display software with no guardrails, no safety net, no regard for preserving sanity. Live dangerously.
Actually, you can enable an undo at any time. Save your current work to a file!
.
Yet another new version!
09-08-2022
This one has some minor bug fixes.
There is a new function in the p transform colors and palettes menu.
If you define a palette of fewer than 255 colors, option l (L) will make a palette based on that by repeating the colors until the whole palette of 255 colors is defined.
This is so it is possible to do the effect of cycling through palette indexes and getting a smooth flowing animation with only a few different colors.
Also, there are instructions and a new Makefile.mm1 for building the src for the new MacBook M1 with the 64-bit ARM processor.
Fixed the clipping area issue. It is now possible to define a clipping area of nothing and it works as expected.
https://laserboy.org/code/LaserBoy_Current.zip
Some things never go out of style.
Critical update! 09-09-2022
Fixed a crash condition in the palettes menu.
It wasn't handling empty palettes well.
Oops.
https://laserboy.org/code/LaserBoy_Current.zip
Vector Hack Festival 2022 is coming soon!
https://vectorhackfestival.com/2022/
I can't believe it's been two years already since the last one.
VHF came out of a Facebook group called Vector Synthesis, which is all about creating visual art using control voltage signals for oscilloscopes, vector scopes, modified CRTs and yes... laser projectors!
The focus of the group is more about the art and technology of creating control voltage signals. It gets to laser projection from there.
It's really not about using commercial laser display systems.
There are some very talented people on this forum who might find this group to be very interesting and inviting.
Being a part of this group has been the most rewarding social media experience I've ever had in all the 19 years I've been doing this.
I was accepted to be one of the presenters again for this year's event!
James.
Thanks!
I'm not at all well versed in other laser display software. I don't know of any real-time streaming ilda to video solutions. But, like I said before, you can use my software to make video from anything you can import. It can also display wav files on the screen and show them in the same time it takes to play them. They don't have to be made with my software, but that is a way to make sure they are framed correctly. Otherwise you just specify how many samples are shown in each frame.
No. That's not how it works at all. There really isn't anything real-time about LB. It just reads and writes files. No live streams in or out. But it can do all kinds of things with files. It can show vector art files as timed animation on the screen. It bridges the gaps between ild, dxf, txt, wav such that they can almost be thought of as just different forms of the same thing; vector data. Bitmap files are the translation to raster.
And wav files are multichannel, so a single wav file has all the control signals together as x, y, r, g, b, i, and possibly L & R audio. The 6th channel (i) can be a monochrome color mod signal or z or time code.
.
Not all wav players can play more than stereo, but some can into multitrack studio sound devices and surround sound devices.
The success of my app used to make wav files for direct display depends on that entirely!
.
Look what I can do!
I still have a lot of work to do, but I figured out how to read and render all of the extended ascii Latin characters and other stuff from a UTF-8 encoded ascii text file!
Now I have to add all of the new glyphs to all of the fonts that are included with LaserBoy!
Attachment 59312Code:#----------------------------------------------------
text line_space 1.00
text vari_space 0.70
text vari_gap 0.10
text to_space 0.90
text font_name arial
text color_rgb 255 255 0
text variable left
!"#$%&'()*+,-./
0123456789:;<=>?@
ABCDEFGHIJKLM
NOPQRSTUVWXYZ
[\]^_`
abcdefghijklm
nopqrstuvwxyz
{|}~
€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™
š›œžŸ¡¢£¤¥¦§¨©ª«¬
®¯°±²³´µ¶·¸¹º»¼½¾¿
ÀÁÂÃÄÅÆÇÈÉÊË
ÌÍÎÏÐÑÒÓÔÕÖ×
ØÙÚÛÜÝÞ
ßàáâãäåæç
èéêëìíîïðñ
òóôõö÷øùúûüýþÿ
<<__TEXT_END__>>
Plus, the way I did it is extendable, so after I get this done and out there, I can work on adding Greek, Cyrillic, Hebrew, Georgian, whatever... to the end of the current font frame_sets.
.
New release of LaserBoy-10-13-2022!
Quite a few little bug fixes and a couple new things. This one comes with a partially implemented utf8 font rendering system. Windows code page 1252 plus the extra Polish letters are available in arial.ild and courier_new.ild. There is an example file called utf8_test.txt in the txt folder that renders them. I have to add the extra characters to the other fonts. That's going to take a while. It all still works the same for standard 7-bit ascii.
https://laserboy.org/code/LaserBoy_Current.zip
.