Arduino Pinball Restoration


I found a pinball machine sitting disassembled on the floor of a leaky shed and brought it home to tinker with. The mechanisms and electronics inside were all rusted solid, as was most of the metal on the outside. The backglass had lost half its paint, and one entire side of the machine was covered in mold.

the body after arriving in my garage

I'd originally planned to disassemble the machine for parts, but after I got the glass off I found that the playfield itself was in amazing condition. With the glass to protect it and no light, it had survived unscathed, and I couldn't bring myself to tear it up. Instead, I decided to teach myself some electrical engineering and wire it all up to an Arduino.

This picture was taken later, but all I did for the playfield was wipe it down, clean the clear plastic parts, and replace the rubber bumpers

I took out one of the score reels to divine its inner workings

The circuits I cobbled together to control the 25V solenoids from my puny 5V Arduino

The Arduino couldn't handle the machine's incandescent bulbs, so I replaced them with LEDs

The score system, rewired

The original innards, still inside

The solenoid and LED control circuits

The same board, after being hooked to 100+ wires

I managed to clean off the mold and dirt using a combination of extremely toxic solutions. The door and plunger needed to be sand-blasted and repainted. Luckily, the rails along the edges were stainless steel, so they only needed a quick cleaning.

post cleaning



If you've got any questions, feel free to email or tweet me; I'll be happy to elaborate

Posted Friday, June 14, 2013
at 10:32 PM


Tags: Blog Post, Pinball, Arduino, Project,

Player of Games - 4.5/5

Posted Sunday, June 09, 2013
at 11:27 PM


Tags: Blog Post, Rating, Book,

Gunpoint - 3.5/5

Posted Thursday, June 06, 2013
at 09:39 PM


Tags: Blog Post, Rating, Game,

The Wise Man's Fear - 4.5/5

Posted Sunday, June 02, 2013
at 02:16 PM


Tags: Blog Post, Rating, Book,

The Name of the Wind - 4.5/5

Posted Wednesday, May 22, 2013
at 04:24 PM


Tags: Blog Post, Rating, Movie,

Requisite Reading - 5/10/2013

Posted Friday, May 10, 2013
at 04:05 PM


Tags: Blog Post, Requisite Reading,

Gardens of the Moon - 3/5

Posted Tuesday, May 07, 2013
at 09:26 AM


Tags: Blog Post, Rating,

Requisite Reading - 5/3/2013

Posted Thursday, May 02, 2013
at 07:20 PM


Tags: Blog Post, Requisite Reading,

Requisite Reading - 4/13/2013

Posted Friday, April 12, 2013
at 02:34 PM


Tags: Blog Post, Requisite Reading,

Bioshock Infinite - 3.5/5

Posted Saturday, March 30, 2013
at 07:02 PM


Tags: Blog Post, Rating,

Requisite Reading - 3/29/2013

Posted Thursday, March 28, 2013
at 09:43 PM


Tags: Blog Post, Requisite Reading,

Olympus Has Fallen - 3.5/5

Posted Saturday, March 23, 2013
at 10:11 PM


Tags: Blog Post, Rating, Movie,

Arduino Pinball Repair, Pt. 1

I got a hold of an old EM Stock Car pinball machine a few weeks ago with the hopes of repairing it, but my first attempt ended in failure. The machine had been sitting in a damp, moldy garage against a wall, under a leaky window for at least twenty years, and it was beyond repair. About a third of the inside was covered in mold, all the moving parts were stuck, all the metal was rusted, and the back glass was damaged beyond repair.

So instead I realized that this would be a good way to use an Arduino. I could just plug one into all the inputs and outputs of the machine and then program it to react in the same way all those complicated and broken electronics would have. I ordered an Arduino Mega, which has 54 I/O ports, and then got to work investigating how complicated it would be to interface it with the pinball machine.

Some quick testing revealed that all the moving parts of the pinball machine ran off 25V AC, which posed my first problem, as the Arduino runs off 5V DC. Asking about how to fix this online wasn't much help; the experts couldn't even agree on whether an AC coil would work with DC. Being the pragmatic and cautious individual that I am, I of course took the rational route, and hooked two old car batteries up (12V DC each x2=24V DC) to a solenoid to see if it would work. (It did). Of course, this still left the big problem, which is that even if the coils would work off DC, they still needed 25V.

The answer, of course, was to use a transistor, or a MOSFET to be precise (I still haven't figured out the difference), to switch the high power current with a low power current from the Arduino. Three burned out husks of transistors later, I'd figured out how they worked, and rigged up this insane hodgepodge of circuitry to control the eight solenoids in the machine.

After an arduous day soldering wires to all the components and hooking them up, I now have control of all the moving parts of the machine from my Arduino.

Tomorrow, I get to start working on wiring all the rollovers to the Arduino so it can begin actually scoring points

Posted Saturday, March 23, 2013
at 09:42 PM


Tags: Blog Post, Pinball, Stock Car, Arduino, Electronics, Project,

The Warrior-Prophet - 4/5

Posted Tuesday, February 26, 2013
at 09:33 AM


Tags: Blog Post, Rating,

The Author Trust Test

When you notice a character doing something that seems out of character, do you:

  • Wonder what could be making them act strangely
  • or
  • Think "that's bad writing; they wouldn't do that..."

Posted Tuesday, January 01, 2013
at 07:39 PM


Tags: Blog Post, Writing,

Analogue: A Hate Story - 4/5

Posted Sunday, December 30, 2012
at 08:10 PM


Tags: Blog Post, Rating,

Django Unchained - 4/5

Posted Thursday, December 27, 2012
at 08:47 PM


Tags: Blog Post, Rating,

Katawa Shoujo - 4.5/5

Posted Tuesday, December 25, 2012
at 11:33 PM


Tags: Blog Post, Rating,

Thoughts On Narrative Arcs

So in my thinking stories are made up of multiple 'arcs' where either an obstacle is encountered and you work around it (possibly bringing up more obstacles as the protagonist work to clear the first one) or it's a 'character arc' of a character's changes to some trait that they have over time. Most stories have all kinds of arcs of varying sizes going on at once. So at the beginning of a story there are no arcs, and almost any action any character takes is creating a new arc in some way, however in most stories once they get past the initial giant blob of arc creation in the beginning, you're left with a few long term 'macro arcs' that are going to span the whole story and most of your short term arcs (started at the beginning) have already concluded. Lots of more episodic/traveling shows will then procede by making "one episode arcs" and advance the macro-arcs only when each microarc is completed, which works fine for episodic shows (like most american hour tv) but even then you get a sort of feeling that nothing besides the first and last five minutes of the show actually matters, everything from 0:05 to 0:55 is just filler that won't matter outside of this single episode (this is the problem I have with Cowboy Bebop: it's episodes are almost completely self contained with only tiny changes surviving from episode to episode. CB reminds me of a lazy american show more than an anime). On the other hand you've got shows (American ones like Game of Thrones, Justified, and Dexter and anime like Code Geass, Death Note, etc) where new arcs of varying sizes are constantly being introduced and resolved and overlapping each other in varying amounts. Since these shows are constantly introducing new arcs I say they're still in "intro mode". They never let up from the begining (also a problem with a lot of video games: the story starts off good but then drags a lot in the middle because they don't introduce any new arcs at all after the beginning (except for the required Major Plot Twist), and instead rely on new gameplay (mechanics and/or levels) to keep the player interested, which falls apart if their gameplay isn't good enough. When their gameplay is good enough to keep players entertained even without any new plot details, you get games like Zelda where you get a token plot element/point at the beginning to get you going but then are left to do dungeons until the end (I can't stand Zelda games because I always get excited by the cool idea at the beginning but then don't get any new story)

Posted Monday, September 24, 2012
at 07:28 PM


Tags: Blog Post, Writing, Games,

This is a really long sentence I wrote

It was a dark and stormy night in Florida (not Florida the state known for an over-abundance of elderly citizens and crocodiles but Florida the small province in up-state New York), which happens to be quite unrelated to the story at hand, seeing as as young Mr. Albert Lambert Jr. currently resides in Florida, the state, where he is visiting his elderly grandmother for Christmas, and even if he had been in Florida, the town in up-state New York, he still wouldn\'t have known about the relative stormacity of the land immediately surrounding his chosen domicile since it was, at the time, a little after 3AM and young Albert was currently laboring under the unprovable theorem of one Benjamin Franklin, since there was a girl, not a girl as in a girl under the age of ten, but a girl of the age young and eligible bachelors such as Mr. Lambert, subscribing to the civil standards of sexual attraction acceptable at the time, would not be thought of as \'strange\' by the amiable townspeople who would surely notice such attentions as Albert desperately wished to lavish upon this girl if she were indeed only possessing of ten winters, and who happened to be known to the townspeople, and to Albert, as Fiona, a name suitably exotic to catch the ear, as it was, of Albert, as he overheard it whilst breakfasting in the local streetside cafe at which Fiona worked, but not so exotic as to provoke anti-secular feelings if, as Albert ardently wished, he would someday be able to introduce Fiona to his most conservative father, such as a name such as Helenabadeja-Frandwich, who his last crush preferred to be addressed by when it happened that Albert called on her, and was in fact the first clue to Albert that he should seek a less exotically named girl to dote upon, names such as Helenabadeja-Frandwich being often good indicators of the exoticity of many other attributes of the bearer, such as tattoos and piercings in strange, inventive, and most likely painful, if one were to hazard a guess, although in Albert\'s case any guess about the painfullness of bodily piercings would be completely without merit in the scientific community seeing as he did not, himself, have any piercings to speak of, or even to remain abashedly silent about as he most likely would have in the polite company of his father should he for some reason happen to receive one, which would certainly have put a damper on the exciting conversation he assumed his father and Fiona, would be having at this point, or at least that they would be having, if he had yet summoned the courage to approach Fiona at the cafe in which she was employed about the posibility of them having coffee together at some point the near future, this being, Albert had ascertained, the standard first step in the long journey that would conclude with his Father and the girl who coffeed with him having an exciting conversation at dinner, and not because Albert had any affinity for coffee, since as it was he couldn\'t stand the stuff, and he had no notion whether Fiona liked coffee at all either, seeing as he had yet to say any words to her beyond ordering a croissant and a glass of milk each morning when he stopped at the cafe in the hopes that today, yes today would be the day which the perfect moment for him to ask her if she fancied going to get a cup of coffee with him after she left work for the day and not yet another hour wasted slowly eating a croissant, which wasn\'t actually that good, and Albert very much hoped was the work of some unseen cook and not of Fiona herself, cooking being a very important skill, in Albert\'s mind for any woman he was to spend any time with, seeing as he had not yet managed to discover the proper setting on his toaster to prevent the smoke alarm from going off, but alas this perfect moment had not yet occurred and so Albert would have, this dark and stormy night, have gone to bed early so he could in turn rise early to be at the cafe when it opened, as per Franklin\'s instructions, although now that young Albert thought about it Frankin hadn\'t happened to mention being happy or wedded when he told the reader, and by extension Albert, that he should go to bed early, and miss the spectacular thunderstorm, which Albert actually loved to watch, and which passed over Albert\'s house in Florida, the town, not the state, and which Albert was not even sleeping in since he was in Florida, the state, visiting his dear grandmother and trying his hardest to pay attention to her and not let his thoughts slip back to Fiona.

Posted Sunday, June 03, 2012
at 04:41 PM


Tags: Blog Post,

5/30/12: Physics and Selection

After I added shadows, the next thing I wanted to implement was some editing tools. This turned out to actually be fairly simple, the only complicated was determining which object the mouse was clicking on, which is commonly referred to as picking. The simple way to do object picking is just to render all the objects a different color off-screen, and see what color is under the cursor. Nice and simple, and as a bonus it will work with anything you want to draw. No complicated math needed.

However, since I'm using custom shaders for all my drawing (not to mention having some real complex drawing code to begin with), adding more shaders to render per-object colors, rearranging my code so that I can easily do one off renderings with custom shaders, and keeping yet another shader up to date whenever I change something in another one didn't sound very fun. Instead, I went for Option B: math

Selecting an object using math boils down to making a line from where the camera is outwards for a few thousand feet (I chose 10km, because why not) and seeing which objects it intersects. Luckily, most of the complicated math for seeing which objects the line touches are handled by the physics engine (it even has a special function designed for it!). The trouble is always in the part you overlook, and in this case that was actually calculating the position of the line! I was lucky enough to stumble on some example code that calculated the end point of the line for you, through some complex trigonometry and interpolation, and so I spent about an hour trying to get it working in my engine, to no avail.

Then I remembered one one of my basic rules of programming: never steal code when you don't understand what it's doing. If you're lucky, the code will 'just work' and you'll have some cool new effect in your particle engine without any work on your own part, at least until you need to change something. God help you then. Good luck trying to decipher all that code months later, when whatever bits of understanding you had before are long gone.

So I went back and sat there for a second, and ten minutes later I had some custom code using a completely different math working perfectly. Just put a point at the mouse coordinates, and one unit into the screen, rotate it like the camera is, and then scale it by 10km! Five lines of code which will work with any setup the renderer could use instead of 40 lines that would break if I changed the field of view. From there it was a simple matter to code up a select and move tool and hook them to some fancy buttons (which took longer to whip up in Photoshop than coding the tools themselves did), and now I can pick up stuff and put it in other places.



Physics

Remember way back at the top of this post, where I wrote "Physics and Selection," never guessing that in the end I'd write about selection before physics? Well when I said I was lucky that my physics engine (Bullet Physics) already had a function to test the line against the object, I sorta lied. I actually added the physics engine so I wouldn't have to deal with writing that single function myself. A bit overkill, but like anytime I do stuff the right way instead of the simple way, I'm always glad I did later down the line. As it was, adding physics to the engine was much easier than anticipated, thanks to the severe abstraction I placed on every aspect of development. All I had to do was read out the position of each object and plug it into my code for handling positions (which can also handle positions with quaternions, euler angles, and even ones that orbit another object), and then I was done, no changes to any preexisting code required.

Posted Thursday, May 31, 2012
at 05:12 PM


Tags: Blog Post, Screenshot, engine,

Battleship - 4/5

Posted Thursday, May 24, 2012
at 10:58 PM


Tags: Blog Post, Rating, Movie,

The Blade Itself (Joe Ambercrombie)- 4.5/5

Posted Monday, May 21, 2012
at 07:50 PM


Tags: Blog Post, Rating, Book,

Lockout - 3.5/5

Posted Sunday, April 22, 2012
at 07:59 PM


Tags: Blog Post, Rating, Movie,

Heroes Die (Matthew Stover) - 4/5

Posted Monday, April 16, 2012
at 04:06 PM


Tags: Blog Post, Rating, Book,

Warbreaker (Brandon Sanderson) - 4.5/5

Posted Friday, March 30, 2012
at 09:41 AM


Tags: Blog Post, Rating, Book,

Twitter Unfollower Finder Command Line Utility

I whipped up a 'quick' (quick meaning it somehow took three hours) command line program that will make a list of all of a twitterer's followers, and compare it to the list from the last time you ran the program to find if anyone unfollowed them.

To use it, just run it from the command line and pass the name of any twitterer

Download the (beta) here

Posted Saturday, March 24, 2012
at 08:20 PM


Tags: Blog Post, Program, Command Line, Beta, Twitter,

Snuff!! by Terry Pratchet - 4.5/5

Posted Saturday, March 24, 2012
at 05:47 PM


Tags: Blog Post, Rating, Book,

The Omen Machine - 4.5/5

Posted Wednesday, March 21, 2012
at 04:12 PM


Tags: Blog Post, Rating, Book,

The Grey - 0/5

Posted Friday, March 16, 2012
at 04:43 PM


Tags: Blog Post, Rating, Movie,

How Turn Based Combat in RPGs Should Work

Originally posted on the TIGSource Forums

No random battles.  Battles only take place when they'd actually take place (i.e. no just putting in scripted enemies for battling).  However there are people you don't have to fight or you only have to fight if you want.  For example if there's a guard blocking a door you could go normal RPG route of finding another way in or you could just attack him + suffer the consequences.  

No grinding.  Weapons don't have arbitrary "attack strengths," they actually work with other weapons reasonably. Enemies are all adjusted based on your level, but an enemy that is supposed to be tough/impossible would still be much higher level than you

Characters still have stats, like strength, agility, etc, which effect which weapons are best for them, and their ability to block, etc.  Dodging/blocking very important, you cant take a ton of hits like in Final Fantasy or something.  Game is turn based, but not overly strategical.

Characters have various actions they can perform, such as move, attack, use item, magic, dodge, etc, each with an cost.  Each turn you get a set number of points to spend on as many actions as you want/can afford.  The amount of points you get can be leveled up.  You also can level up your ability to get 'roll over' action points from the last turn by not using points.

Not grid based, and when you move, you don't select a destination, you actually get to control character normally for a certain number of steps.  

Characters, even melee, don't have to be within arms reach of enemy to attack. (ie up to maybe 20 feet away you could attack) You get critical inside arms reach though.  Attack strength falls off with distance, except for ranged attacks obviously.  Similarly arrow attack strength would fall off without line of sight, etc.  

Many spells have area affect, including healing.  There is a second class of spells that only affect you or your enemies, so your bruisers can get in close at the expense of more costly/weaker magic.    If you have multiple characters close enough, their stats will increase slightly.  Healing magics have greater effect the farther you are from enemies.

Elemental magic is strengthened/weakened by environment.  Life magic is more effective in a forest than a desert, etc.   On a smaller scale, water magic would be more powerful if mage stands on edge of stream, earth magic is more powerful if they stand on a boulder, etc.  Also works in reverse for targets.  

Skills are all leveled separately, through performing the associated actions, not from assigning points to them when you "level up."  Your multiple action skill is leveled up by performing the same action for every opportunity on a turn, strength is gained from using heavy weapons, etc.  

Your ability to dodge/block is based on your agility/dexterity, combined with the direction you're looking compared to your enemy, as well as choosing 'dodge' as an action on the previous turn.  

You can enter combat mode at any time, by drawing your weapons, which would immediately put possible enemies on alert if they saw you.  To run from a battle, you just need to get all your characters together far enough from your enemies.

Posted Saturday, March 10, 2012
at 10:03 PM


Tags: Blog Post, Games, Design,

John Carter - 3.5/5

Posted Saturday, March 10, 2012
at 09:25 PM


Tags: Blog Post, Rating, Movie,

3/1/12: Omni Directional Shadow Cube Mapping

It took a few days, but I finally ironed the kinks out of my omni-directional shadows that used cube maps instead of six separate lights. In the end, they only seem to be faster when I use a depth cube map, which is only available on newer graphics cards, instead of packing the depth into an RGBA texture. This seems sort of weird, but I think it's a case of mythical stuff happening within the graphics driver I have no control over. Anyway, since I can just switch between the two methods at will, I can easily choose whichever is faster at run time.

Posted Thursday, March 01, 2012
at 07:39 PM


Tags: Blog Post, Screenshot, engine,

2/26/12: Omni Directional Shadow Mapping

All my shadows up to this point have been from a 'spotlight', because the shadows are made by taking a picture from the light's view, and pictures are obviously squares, not 360 degree pictures. The way most people get around this is by using a cube map, where they take six pictures, put one on each side of a cube, and then use that to check against instead of a single picture to see if a pixel is in shadow.

I've never used a cube map before, but before I started I had the idea of just putting six one-directional lights in the same place, pointing in different directions, which would act the same as one cube mapped light. It seems to work pretty well, once you get rid of the lines where two lights overlap. Of course, its doing a lot more work than having a single light, so I still need to implement cube mapped lights. However, it's nice to know that I could, for instance, use this method to easily make a glowing pole, or other weirdly shaped light without making any new lighting code.

Posted Sunday, February 26, 2012
at 02:20 PM


Tags: Blog Post, Screenshot, engine,

SVN Commit R141

  • Made ShadowMappedDirectioinalLight use frustum culling.
  • Added animation support to the S3D format.
  • Added S3D save/load testing code.

Posted Monday, February 20, 2012
at 04:26 PM


Tags: Blog Post, engine, Commit,

Safe House - 4/5

Posted Sunday, February 19, 2012
at 06:41 PM


Tags: Blog Post, Rating, Movie,

Dear Esther - 4.5/5

Posted Wednesday, February 15, 2012
at 08:24 PM


Tags: Blog Post, Rating, Game,

One For The Money - 3/5

Posted Tuesday, February 14, 2012
at 08:39 PM


Tags: Blog Post, Rating, Movie,

The Darkness II - 3/5

Posted Sunday, February 12, 2012
at 11:43 AM


Tags: Blog Post, Rating, Game,

SVN Commit R138

  • Added plane based frustum culling.
  • Made Model and Font correctly calculate radius.

Posted Thursday, February 09, 2012
at 05:14 PM


Tags: Blog Post, engine, Commit,

Chronicle: 4/5

Posted Tuesday, February 07, 2012
at 07:10 PM


Tags: Blog Post, Rating, Movie,

Fool's Errand (Robin Hobb) - 4.5/5

Posted Monday, February 06, 2012
at 04:39 PM


Tags: Blog Post, Rating, Book,

2/4/12: Animated Lighting

I fixed shadows of moving objects, and also fixed lighting on animated objects. Before, the normals werent updated with the object's movements, so even if it turned around the lighting wouldnt change.

Posted Saturday, February 04, 2012
at 06:27 PM


Tags: Blog Post, Screenshot, engine,

Man on a Ledge - 4/5

Posted Wednesday, February 01, 2012
at 07:50 AM


Tags: Blog Post, Rating, Movie,

How does it feel to be a murderer?" *takes out gun * "I don't know, lets find out

Posted Saturday, January 28, 2012
at 09:20 PM


Tags: Blog Post, Quote,

Haywire - 3.5/5

Posted Friday, January 27, 2012
at 06:52 PM


Tags: Blog Post, Rating, Movie,

SVN Commit R130

  • Fixed repeated usage bug in ArrayProxy.
  • Made lights bind Shaders instead of Renderers.
  • Added doubleSided flag to Material.
  • Re-enabled blending.
  • Fixed bug with left edge of shadow maps.

Posted Thursday, January 26, 2012
at 05:30 PM


Tags: Blog Post, engine, Commit,

1/24/12: Shadow Mapping, Part Deux

Shadows are working much better now. First, I realized that the fronts of most of the objects were also in shadow somehow, and that lead me on a giant chase before I finally found another problem in my bias matrix. Then, I had some corruption problems on the bottom and left of the screen. Turns out my code for checking if a point was outside the light was checking like this:

if(abs(coordinate)>1)

but the left and bottom side are at 0, not -1! That fixed a ton more errors. That weird circular shape was caused by a sphere I was using to show where the light was. Somehow it was so close instead of just blocking everything out it made that circle. Last, I made use of hardware accelerated shadow comparisons using a GLSL command called sampler2DShadow, which does the distance check automatically, as well as performing basic Percentage Closer Filtering, which is a cheap technique for making the shadow edges look a bit better. Im assuming that having a command for that means that theyve got special hardware to do the check, so Im hoping Ill get a speed up from that. Which leads to my last (and ongoing) problem. As you can see in the image, the text is all messed up, and Im still trying to figure out why

Posted Tuesday, January 24, 2012
at 06:42 PM


Tags: Blog Post, Screenshot, engine,

SVN Commit R129

  • Switched shadow mapping to use shadow2D (hw compare+PCF) instead of manual compare.
  • Havent checked speed yet.
  • BUG: Text still now working again.
  • BUG: May be some weird artifacts on right side of shadow.

Posted Tuesday, January 24, 2012
at 05:46 PM


Tags: Blog Post, engine, Commit,

1/19/12: First Shadows Working

After a lot of finicking I got at least semi-normal shadow mapping working. It took a few days, and there were LOTS of problems on the way:

  • Storage Problems: Shadow mapping involves taking a picture of the scene from the light, and comparing it with your normal view to check if the light can 'see' what youre processing. If the light can 'see' something, then it must not be shadowed! The thing is, you have to have a REALLY exact picture, or youll get all kinds of false positives and negatives. Much of my time was spent trying to verify that the different storage methods I tried were actually getting the picture through to the second stage. Once I verified that the images was getting through, everything moved much faster.
  • Engine Bugs: Up until this point when I rendered the scene, I made a list of all the objects in it and then drew each one, removing it afterwards. Since you need to get a view of the scene from the light as well as the camera, I couldnt remove the objects until I was completely done. It turns out that each time you draw an object some of its data gets changed, so when you start drawing everything twice, youre going to run into problems. This was exasterabated further since I couldnt see what was getting drawn the first pass.
  • Math Problems: You need to do some complex matrix math to compare the light's picture and the camera's, which I stupidly copied from another website without understanding it first. Even after I decided it must be the problem, and figured out what it was doing, I still had problems, since I hadnt redone the 'bias matrix' once I understood everything. It was just "copy these numbers that never change." Once I took a closer look, it seems that they were displaying the matrices on the website upsidedown! Once I flipped them it worked fine

Now Ive got the basics, which is supposed to be the easy problem, I can get on to trying to make it look good. If you look at the picture, you can see two of the problems: the far side of the shadow looks ridged, which I think is just because my shadow map isnt high enough resolution. An easy enough fix! Second, the bottom of the Y is shadowed. This is going to be the hardest problem. When you do your shadow comparison, youve got a constant 'wiggle' number that slightly shifts the results. If you shift it once way, shadows near the object thats casting them will disappear. If you go the other way, the front sides of the objects closest to the light will become shadowed. You can see this on the Y. The closest part (the bottom) is getting shadowed when it shouldnt be. I think to solve this Im going to need to somehow store my numbers with a higher precision, but Im not sure how to do this yet. Third, and most importantly, MY LIGHTS NOT SUPPOSED TO BE CIRCULAR! See how its casting a circular patch of light? Yeah thats supposed to be rectangular. I have no idea whatsoever why thats happening, and its really confusing me. Now that the shadows actually work, Im going to have to do lots of research into these (hopefully common) issues, and make the shadows have soft edges, like in real life

Posted Thursday, January 19, 2012
at 09:46 PM


Tags: Blog Post, Screenshot, engine,

Older Posts >

Posts per page: 5 10 25 50 100

Ese arteries may help deliver more blood to your heart and may help it pump more efficiently. Dilating the veins. The large veins of the body, particularly in the legs, have the ability to hold a lot of blood. By dilating these veins, nitrates reduce the amount of blood returning to the heart, thereby reducing the buildup of fluid in your lungs. Dilating the systemic arteries. Systemic arteries are bloo. buy viagra overnight delivery View abnormal t-cell function in b-cell chronic lymphocytic leukaemia. [leuk lymphoma. 2003] scrivener s, goddard rv, kaminski er, prentice ag leuk lymphoma. 2003 mar; 44(3):383-9. Skin surveillance of a u. K. Paediatric transplant population. [br j dermatol. 2007] thomson ma, suggett nr, nightingale pg, milford dv, baumann u, kelly da, moss c, hill va br j dermatol. 2007 jan; 156(1):4. Sterrett s, mammen t, nazemi t, galich a, peters Unless your doctor tells you otherwise, drink eno surgery is then generally carried out if it is fe Being a member of a large family may not be best 本页主题: color doppler us of the penis, 打å Thus, surgery is chosen as definitive local thera These findings demonstrates specificity of gnrh b For related content pubmed pubmed citation article When symptoms are severe, the patient will need t Welvaert , brann garvey no preview available - 20 In: sentence and word structure answer it Patient care request an appointment log in to pati