Jump to content

This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies. Find out more here. X
X


Photo

Stereograms again ("MagicEye" 3-d)


  • Please log in to reply
11 replies to this topic

#1 james3mg

james3mg

    I resent the title "Spammer!" ;-)

  • Active Members
  • PipPipPipPipPipPip
  • 730 posts

Posted 09 April 2010 - 06:07 PM

There was a thread floating around here a while ago in which some scripts were presented which would make various types of stereograms, which I think is always fun. Though I personally tried a few styles to try and get the "random" pattern to be meaningful itself and still let the 3-d show through, I never succeeded (I actually think the formulas I was using may have been flawed- maybe I'll go back and see if I could improve them later).

To my surprise two days ago, I discovered that blocks of ASCII text (usually random bits of text) could actually be made into crude stereograms (crude because each "pixel" [in this case, character] is so much larger that the resolution is by necessity much smaller). So I thought, why not use non-random ASCII text and embed a picture in it?

Thus, this script.

And, thanks to Greenseed, there's no more PixelGetColor(), so no need to jump through hoops in Vista and Windows 7 for the sake of performance.

So, what this script does, is to take text (free of line breaks) and wrap it at the width you specify, then capture the region of your screen that you specify as the depth map (as always, black is the background, and the whiter a pixel is, the closer it will appear to be). You can optionally add a space between the columns of text, which makes it easier to read the original text on the left side of the output and lends what I think is kind of a neat look.

You can also specify how many layers will show up in front of the background- but ASCII stereograms always work best if you keep it to 1 or 2 layers.

It presents you with a preview of your text so you can make sure that the positions of text wrapping don't create any undesired words or phrases when juxtaposed with the adjacent column, and also to make sure that the last line fills the columns (required for best effect). Once it looks like you want and you've specified the region of your screen which defines the depth map, hit the "Create" button, and it will almost instantly ask you to save the output.

To see the stereogram, open the text file you saved, and use the "wall-eyed" method (not the cross-eyed method) of viewing stereograms. You'll notice also that the original text you inputted should remain relatively readable down the left side of the text block- the further right you go in the file, the necessarily more jumbled the text will be- this is how the 3d effects are made.

So, here's the script:
AutoIt         
#include <GUIEdit.au3> #include <ScreenCapture.au3> #region GUISetups Global $TGUI = GUICreate("T Screen Capture",50,1,@DesktopWidth/2,@DesktopHeight/2,-2147483648,136);$WS_POPUP,BitOR($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW) Global $LGUI = GUICreate("L Screen Capture",1,50,@DesktopWidth/2,@DesktopHeight/2,-2147483648,136);$WS_POPUP,BitOR($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW) Global $BGUI = GUICreate("B Screen Capture",50,1,@DesktopWidth/2-30,@DesktopHeight/2+20,-2147483648,136);$WS_POPUP,BitOR($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW) Global $RGUI = GUICreate("R Screen Capture",1,50,@DesktopWidth/2+20,@DesktopHeight/2-30,-2147483648,136);$WS_POPUP,BitOR($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW,$TGUI) GUISetState(@SW_SHOW,$LGUI) GUISetState(@SW_SHOW,$BGUI) GUISetState(@SW_SHOW,$RGUI) Global $SelectBoxColor[2]=[0xFF0000,0xFFFFFF] Global $SelectBoxCurrColor=0 AdlibRegister("FlashSelectBoxes",1000) Global $GUI=GUICreate("Textual Stereogram",320,@DesktopHeight-100) GUICtrlCreateLabel("Text to use:",0,0,270,20) Global $TextInput=GUICtrlCreateInput("AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. It uses a combination of simulated keystrokes, mouse movement and window/control manipulation in order to automate tasks in a way not possible or reliable with other languages (e.g. VBScript and SendKeys). AutoIt is also very small, self-contained and will run on all versions of Windows out-of-the-box with no annoying ""runtimes"" required! AutoIt was initially designed for PC ""roll out"" situations to reliably automate and configure thousands of PCs. Over time it has become a powerful language that supports complex expressions, user functions, loops and everything else that veteran scripters would expect. Features: [truncated] AutoIt has been designed to be as small as possible and stand-alone with no external .dll files or registry entries required making it safe to use on Servers. Scripts can be compiled into stand-alone executables with Aut2Exe. Also supplied is a combined COM and DLL version of AutoIt called AutoItX that allows you to add the unique features of AutoIt to your own favourite scripting or programming languages! Best of all, AutoIt continues to be FREE - but if you want to support the time, money and effort spent on the project and web hosting then you may donate at the AutoIt homepage.",0,20,270,20) GUICtrlCreateLabel("Cols:",270,0,50,20) Global $ColsInput=GUICtrlCreateInput("19",270,20,50,20,0x2000);$ES_NUMBER=0x2000 GUICtrlCreateUpDown($ColsInput,0x80);$UDS_NOTHOSANDS=0x80 GUICtrlSetLimit(-1,35,1) GUICtrlCreateLabel("Sample Output:",0,40,160,20) Global $AddSpace=GUICtrlCreateCheckbox("Space between columns",160,40,160,20) Global $TextOutput=GUICtrlCreateEdit("",0,60,320,@DesktopHeight-220) GUICtrlSetFont($TextOutput,8.5,400,0,"Lucida Console") GUICtrlCreateLabel("DepthMap capture region coord: x:",0,@DesktopHeight-160,180,20) Global $CaptureXInput=GUICtrlCreateInput(Round(@DesktopWidth/2),180,@DesktopHeight-160,60,20,0x2000);$ES_NUMBER=0x2000 GUICtrlCreateUpDown($CaptureXInput,0x80);$UDS_NOTHOSANDS=0x80 GUICtrlCreateLabel("y:",250,@DesktopHeight-160,10,20) Global $CaptureYInput=GUICtrlCreateInput(Round(@DesktopHeight/2),260,@DesktopHeight-160,60,20,0x2000);$ES_NUMBER=0x2000 GUICtrlCreateUpDown($CaptureYInput,0x80);$UDS_NOTHOSANDS=0x80 GUICtrlCreateLabel("Output size:",0,@DesktopHeight-140,120,20) Global $ColSetting=GUICtrlCreateInput("0",0,@DesktopHeight-120,60,20) Global $HeightLabel=GUICtrlCreateLabel("x 0 chars",70,@DesktopHeight-120,60,20) GUICtrlCreateLabel("Highest layer:",150,@DesktopHeight-140,170,20) Global $LayersInput=GUICtrlCreateInput("1",150,@DesktopHeight-120,60,20,0x2000);$ES_NUMBER=0x2000 GUICtrlCreateUpDown($LayersInput,0x80);$UDS_NOTHOSANDS=0x80 GUICtrlSetLimit(-1,9,1) Global $GoButton=GUICtrlCreateButton("Create!",250,@DesktopHeight-120,70,20) #endregion GUISetups UpdatePreview() GUISetState() Global $CurrCols=GUICtrlRead($ColsInput) #region main loop While 1     If _GUICtrlEdit_GetModify($TextInput) OR $CurrCols <> GUICtrlRead($ColsInput) Then UpdatePreview()     $msg=GUIGetMsg()     If $msg=-3 Then Exit;$GUI_EVENT_CLOSE     If $msg=$AddSpace Then UpdatePreview()     If $msg=$GoButton Then ExitLoop     If $msg=$CaptureXInput OR $msg=$CaptureYInput  Then ResetCapturePreview() WEnd #endregion main loop GUISetState(@SW_HIDE,$GUI) GUISetState(@SW_HIDE,$TGUI) GUISetState(@SW_HIDE,$BGUI) GUISetState(@SW_HIDE,$LGUI) GUISetState(@SW_HIDE,$RGUI) AdlibUnRegister("FlashSelectBoxes") Global $RepeatCols=GUICtrlRead($ColsInput)+Number(BitAND(GUICtrlRead($AddSpace),1)) Global $CountCols=GUICtrlRead($ColSetting) Global $Layers=GUICtrlRead($LayersInput) #region capturing mask _GDIPlus_Startup();Thank you, Greenseed at http://www.autoitscript.com/forum/index.php?showtopic=62681 for allowing me to eliminate PixelGetColor()! $GDIdll=DLLOpen("gdi32.dll") $MemoryContext=DLLCall($GDIdll,"int","CreateCompatibleDC","int",0) $MemoryContext=$MemoryContext[0] $hBitmap=_ScreenCapture_Capture("",GUICtrlRead($CaptureXInput),GUICtrlRead($CaptureYInput),GUICtrlRead($CaptureXInput)+$CountCols,GUICtrlRead($CaptureYInput)+UBound($strRows),False) DllCall($GDIdll,"hwnd","SelectObject","int",$MemoryContext,"hwnd",$hBitmap) Global $Mask="" For $y=0 To UBound($strRows)-1     For $x=0 To $CountCols-1         $Color=DLLCall($GDIdll,"int","GetPixel","int",$MemoryContext,"int",$x,"int",$y)         $Mask&=$Layers-(Round($Color[0]/(16777215/$Layers)))     Next     $Mask&=@CRLF Next _WinAPI_DeleteObject($hBitmap) DllClose($GDIdll) ;ConsoleWrite($Mask) #endregion capturing mask #region creating stereogram Global $OutputStr="" $Mask=StringSplit($Mask,@CRLF,3) For $i=0 To UBound($strRows)-1     $tmpMask=StringSplit($Mask[$i],"",2)     For $_i=0 To $CountCols-1         $strRows[$i]&=StringMid($strRows[$i],StringLen($strRows[$i])-(($RepeatCols-2)+$tmpMask[$_i]),1)     Next     $OutputStr&=StringTrimLeft($strRows[$i],$RepeatCols*2)&@CRLF Next #endregion creating stereogram ConsoleWrite($OutputStr) $file=FileSaveDialog("Save ASCII stereogram",@WorkingDir,"Text files (*.txt)",16) If @error Then Exit If NOT StringInStr(StringRight($file,StringLen($file)-StringInStr($file,"/",0,-1)),".") Then $file&=".txt" If NOT @error Then $file=FileOpen($file,2) FileWrite($file,$OutputStr) FileClose($file) #region functions Func FlashSelectBoxes()     $SelectBoxCurrColor=Number(NOT $SelectBoxCurrColor)     GUISetBkColor($SelectBoxColor[$SelectBoxCurrColor],$TGUI)     GUISetBkColor($SelectBoxColor[$SelectBoxCurrColor],$BGUI)     GUISetBkColor($SelectBoxColor[$SelectBoxCurrColor],$LGUI)     GUISetBkColor($SelectBoxColor[$SelectBoxCurrColor],$RGUI) EndFunc Func UpdatePreview()     If GUICtrlRead($ColsInput)="" Then Return     _GUICtrlEdit_SetModify($TextInput,0)     $CurrCols=GUICtrlRead($ColsInput)     GUICtrlSetData($TextOutput,"")     $currtext=GUICtrlRead($TextInput)     If BitAND(GUICtrlRead($AddSpace),1)=1 Then;$GUI_CHECKED=1         $betCols=" "     Else         $betCols=""     EndIf     Do         If StringLeft($currtext,2)=", " Then $currtext=StringTrimLeft($currtext,2)         $currtext=StringStripWS($currtext,1)         GUICtrlSetData($TextOutput,GUICtrlRead($TextOutput)&StringLeft($currtext,$CurrCols)&$betCols&StringLeft($currtext,$CurrCols)&$betCols&@CRLF)         $currtext=StringTrimLeft($currtext,$CurrCols)     Until StringLen($currtext) = 0     Global $strRows=StringSplit(StringStripWS(GUICtrlRead($TextOutput),2),@CRLF,3)     GUICtrlSetData($HeightLabel,"x "&UBound($strRows)&" chars")     GUICtrlSetData($ColSetting,Round(2.25*UBound($strRows)))     ResetCapturePreview() EndFunc Func ResetCapturePreview()     WinMove($TGUI,"",GUICtrlRead($CaptureXInput)-1,GUICtrlRead($CaptureYInput)-1)     WinMove($LGUI,"",GUICtrlRead($CaptureXInput)-1,GUICtrlRead($CaptureYInput)-1)     WinMove($BGUI,"",(GUICtrlRead($CaptureXInput)-49)+GUICtrlRead($ColSetting),GUICtrlRead($CaptureYInput)+1+UBound($strRows))     WinMove($RGUI,"",GUICtrlRead($CaptureXInput)+1+GUICtrlRead($ColSetting),(GUICtrlRead($CaptureYInput)-49)+UBound($strRows))     _GUICtrlEdit_SetModify($CaptureXInput,0)     _GUICtrlEdit_SetModify($CaptureYInput,0) EndFunc #endregion


...and here's a sample stereogram I created with the using the logo in the AutoIt website header, and the "typical" autoit description block of text as the ASCII input (masked due to the size of the block of text...I recommend copying it out of the spoiler/code box and pasting it into Notepad so you can see the whole block of text without scrolling).

Spoiler


Enjoy! :(

Edited by james3mg, 09 April 2010 - 11:24 PM.

Posted ImagePosted Image"There are 10 types of people in this world - those who can read binary, and those who can't.""We've heard that a million monkeys at a million keyboards could produce the complete works of Shakespeare; now, thanks to the Internet, we know that is not true." ~Robert Wilensky0101101 1001010 1100001 1101101 1100101 1110011 0110011 1001101 10001110000101 0000111 0001000 0001110 0001101 0010010 1010110 0100001 1101110







#2 spudw2k

spudw2k

    passionately misinformed

  • Active Members
  • PipPipPipPipPipPip
  • 1,282 posts

Posted 09 April 2010 - 06:12 PM

Wow, that's impressive! Well done

edit:
Minor bug - When I tried typing in the column count box (each change caused an update), i ran into an unfortunate condition when I erased the value. It went into some crazy loop. Should be easy to fix.

Edited by spudw2k, 09 April 2010 - 08:01 PM.


#3 wraithdu

wraithdu

    this noise inside my head

  • MVPs
  • 2,409 posts

Posted 09 April 2010 - 10:31 PM

Heh, I love stereograms :(

#4 Ascend4nt

Ascend4nt

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 1,359 posts

Posted 09 April 2010 - 11:20 PM

that was awesome! took me a while to see the stereogram, but it's definitely there. Great job :(

#5 james3mg

james3mg

    I resent the title "Spammer!" ;-)

  • Active Members
  • PipPipPipPipPipPip
  • 730 posts

Posted 09 April 2010 - 11:24 PM

Minor bug - When I tried typing in the column count box (each change caused an update), i ran into an unfortunate condition when I erased the value. It went into some crazy loop. Should be easy to fix.

Good catch, thanks!

Fixed in the OP by adding If GUICtrlRead($ColsInput)="" Then Return to the top of the UpdatePreview() function.

I'm glad everyone's enjoying it :(

Edit: here are a few more that I did up at my dad's request:

Spoiler

Spoiler

Spoiler

Edited by james3mg, 09 April 2010 - 11:30 PM.

Posted ImagePosted Image"There are 10 types of people in this world - those who can read binary, and those who can't.""We've heard that a million monkeys at a million keyboards could produce the complete works of Shakespeare; now, thanks to the Internet, we know that is not true." ~Robert Wilensky0101101 1001010 1100001 1101101 1100101 1110011 0110011 1001101 10001110000101 0000111 0001000 0001110 0001101 0010010 1010110 0100001 1101110

#6 andybiochem

andybiochem

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 308 posts

Posted 10 April 2010 - 09:44 AM

Excellent work!

Though I personally tried a few styles to try and get the "random" pattern to be meaningful itself and still let the 3-d show through, I never succeeded (I actually think the formulas I was using may have been flawed- maybe I'll go back and see if I could improve them later).


Since I wrote my 'noise' style stereogram script (see my sig), I've gotten much more used to GDI so I might have a look at a bitmap approach. Lucklily for us, the approach is exactly the same as you are doing here...

1) create a repeating pattern (can be any sort of image)
2) decide how much you need to horizontally shift each pixel based on your depth-map,
ensuring your 'range' doesn't exceed the width of a tile
3) shift all pixels in current tile to the left
4) shift all pixels in subsequent tiles by an equal ammount to the right LEFT


Sort of off-topic slightly, there's an interesting/fun phenomenon I've discovered as a result of working with stereograms. As you become more adept at controlling your eyes to 'manually' adjust your focal point, you'll be able to combine just about anything you see into a single focused image. If the two things you combine are totally different the focused image will be nonsense in dimensional terms and will not make 'sense' in your brain. This can actually be quite useful if you want to compare things to see if they are the same, and I often do this without thinking (e.g. comparing long numbers, long lines of text etc). As long as you can combine the two items with your eyes, any differences stand out as visual abberations.

One fun aspect of this is easily being able to solve spot-the-difference puzzles. Take this for example.

To solve this, a 'normal' person would scan each picture in turn trying to see the differences. My approach is to combine the two images with my eyes. The differences stand out immediately; solving the puzzle takes as long as it takes you to combine the images, perhaps less than a second. Quiz machines in pubs often have a spot the difference game which can be solved doing this. My mates think I am some sort of spot-the-difference god, but really it's all eye control!

Edited by andybiochem, 10 April 2010 - 06:17 PM.

- Table UDF - create simple data tables - Line Graph UDF GDI+ - quickly create simple line graphs with x and y axes (uses GDI+ with double buffer) - Line Graph UDF - quickly create simple line graphs with x and y axes (uses AI native graphic control) - Barcode Generator Code 128 B C - Create the 1/0 code for barcodes. - WebCam as BarCode Reader - use your webcam to read barcodes - Stereograms!!! - make your own stereograms in AutoIT - Ziggurat Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Box-Muller Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Elastic Radio Buttons - faux-gravity effects in AutoIT (from javascript)- Morse Code Generator - Generate morse code by tapping your spacebar!

#7 james3mg

james3mg

    I resent the title "Spammer!" ;-)

  • Active Members
  • PipPipPipPipPipPip
  • 730 posts

Posted 10 April 2010 - 02:19 PM

1) create a repeating pattern (can be any sort of image)
2) decide how much you need to horizontally shift each pixel based on your depth-map,
ensuring your 'range' doesn't exceed the width of a tile
3) shift all pixels in current tile to the left
4) shift all pixels in subsequent tiles by an equal ammount to the right

It's that fourth step that I'd always misinterpreted until I wrote this ASCII stereogram script- I hadn't realized that when you shift the pixels/characters left (thus eliminating a character from the sequence), that establishes a new "baseline" for the repeating string. In other words, the eliminated character is NEVER reinstated in the string. Likewise, when you double (or more) a character to bring the region back "down" a plane, that doubled character is now a part of the "baseline" sequence, too.

So if my pattern for a particular row was:
1234567890123456789012345678901234567890123456789012345678901234567890

and my depth map required a per-pixel shift of:
0000000000000011111111111111111111111111000000000000000000000000000000

The row will be transformed into:

1234567890123467890123467890123467890123346789012334678901233467890123

(notice that the 5 never appears again once the shift starts, and the three is always doubled once the shift is over). Before, I'd thought the pattern on the background remained unaffected all the way across the stereogram, and only the "forward" regions had shifted bits... more like

1234567890123467890123456789012345678901123456789012345678901234567890
(which really doesn't work...the "forward" region drops back to the background at the first 5, and gets kinda garbled at the doubled 1. I think the only reason my stereograms kinda worked using this method, was that there was ENOUGH transformation across each row that it was constantly adjusting and kind of made up the difference).

Interesting stuff...it's REALLY amazing how powerful our brains are, that they can put all this seemingly garbled, random, information together so quickly...can you imagine trying to bot a stereogram game? I don't think there's any way your computer could really grab the pixels, analyze to find the differences and respond ANYWHERE near quickly enough! 'Course, I haven't tried, either ;-)

Edit: Andy, I hadn't meant this as a lecture for you telling you what you already know; I was just noting how I'd gotten it wrong in the past, while explaining to others how they work :(

Edited by james3mg, 10 April 2010 - 02:50 PM.

Posted ImagePosted Image"There are 10 types of people in this world - those who can read binary, and those who can't.""We've heard that a million monkeys at a million keyboards could produce the complete works of Shakespeare; now, thanks to the Internet, we know that is not true." ~Robert Wilensky0101101 1001010 1100001 1101101 1100101 1110011 0110011 1001101 10001110000101 0000111 0001000 0001110 0001101 0010010 1010110 0100001 1101110

#8 Melba23

Melba23

    I'm old - what's your excuse?

  • Moderators
  • 21,182 posts

Posted 10 April 2010 - 02:28 PM

james3mg,

Thank you for that! :(

I love stereograms (once I learnt how to see them!) and would never have believed that it was possible to create them using ASCII text.

M23
StringSize - Automatically size controls to fit text                                                               ExtMsgBox - A user customisable replacement for MsgBox
Toast - Small GUIs which pop out of the Systray                                                                Marquee - Scrolling tickertape GUIs
Scrollbars - Automatically sized scrollbars with a single command                                   GUIFrame - Subdivide GUIs into many adjustable frames
GUIExtender - Extend and retract multiple sections within a GUI                                      NoFocusLines - Remove the dotted focus lines from buttons, sliders, radios and checkboxes
ChooseFileFolder - Single and multiple selections from specified path tree structure      Notify - Small notifications on the edge of the display
Date_Time_Convert - Easily convert date/time formats, including the language               GUIListViewEx - Insert, delete, move, drag, sort and edit ListView items

#9 andybiochem

andybiochem

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 308 posts

Posted 10 April 2010 - 06:37 PM

4) shift all pixels in subsequent tiles by an equal ammount to the right

ooops, just re-read this, it should actually be "to the left". All changes made in one tile should be repeated in subsequent tiles.

Edit: Andy, I hadn't meant this as a lecture for you telling you what you already know; I was just noting how I'd gotten it wrong in the past, while explaining to others how they work

Don't worry I didn't think that for a minute!

When I first got into these back in the 90's, I used to create them by hand using a pen and stencil. One of my mates was particularly good at it and could draw them completely freehand!

Similarly to your example, the follwing example explains it quite well too...

imagine a repeating background sequence:
o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o


Making a simple deletion in one line (the 2nd line) shifts the character upwards,
but also shifts the next character downwards:

o  o  o  o  o  o  o  o  o  o o  o  o o   o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o


To correct this all subsequent characters need an equal shift:
o  o  o  o  o  o  o  o  o  o o  o  o o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o o  o  o  o  o  o  o  o  o  o


Now we have a sinle raised character.

Multiple levels can be achieved with multiple deletions:
&   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &  &  &  &  &  &  &  &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  & & & & & & & & & &  &   &   &   &  &  &  &  &  &  &  &  &   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &   &



This becomes more complicated when using 'tiles' of images or noise, because the shift left or right cannot be greater than the width of the tile itself.

Glad someone else finds this fascinating too!!

Edited by andybiochem, 10 April 2010 - 06:40 PM.

- Table UDF - create simple data tables - Line Graph UDF GDI+ - quickly create simple line graphs with x and y axes (uses GDI+ with double buffer) - Line Graph UDF - quickly create simple line graphs with x and y axes (uses AI native graphic control) - Barcode Generator Code 128 B C - Create the 1/0 code for barcodes. - WebCam as BarCode Reader - use your webcam to read barcodes - Stereograms!!! - make your own stereograms in AutoIT - Ziggurat Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Box-Muller Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Elastic Radio Buttons - faux-gravity effects in AutoIT (from javascript)- Morse Code Generator - Generate morse code by tapping your spacebar!

#10 AlmarM

AlmarM

    Programming my way.

  • Active Members
  • PipPipPipPipPipPip
  • 1,694 posts

Posted 10 April 2010 - 07:13 PM

Looks great!

Minesweeper

A minesweeper game created in autoit, source available.

 

_Mouse_UDF

An UDF for registering functions to mouse events, made in pure autoit.

 

2D Hitbox Editor

A 2D hitbox editor for quick creation of 2D sphere and rectangle hitboxes.


#11 martin

martin

    ~~\o/~~~/0\=¬''~~~

  • MVPs
  • 7,313 posts

Posted 11 April 2010 - 06:56 PM

Looks great!


It's amazing.
once your eyes have locked in try turning your head round, ie so your eyes go from horizontally aligned towards vertically, and see how far you can go before the effect becomes impossible to maintain. With me I can get to nearly 45 degrees I guess. Getting one eye to go up while the other goes down is really unnatural.
Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script.

#12 AlmarM

AlmarM

    Programming my way.

  • Active Members
  • PipPipPipPipPipPip
  • 1,694 posts

Posted 12 April 2010 - 06:50 AM

@ Martin,

Ah yes, amazing :(

Minesweeper

A minesweeper game created in autoit, source available.

 

_Mouse_UDF

An UDF for registering functions to mouse events, made in pure autoit.

 

2D Hitbox Editor

A 2D hitbox editor for quick creation of 2D sphere and rectangle hitboxes.





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users