The screen used for the pokitto appears to be a portrait type that has been rotated 90 degrees into landscape.
The black background looks differently for each one of my eyes. There’s a gradient from black to gray on one eye, and from gray to black on the other eye. This may be due to screen polarization since it looks fine in portrait orientation.
Is there a way to fix this problem? It’s bugging me when I try to look at the screen.
There is no real solution to this problem, unfortunately.
Screen polarization is due to the way the “glass” is manufactured. Getting a custom-cut glass would have been impossibly expensive. Pokitto LCD screen is a 2" feature-phone screen that is ordinarily used in portrait mode.
We have looked at solutions from filters to trying to take the screen apart. I haven’t found anything that really solves the problem.
I did not realize when making the Pokitto hardware that this would be so disturbing to people, since I myself did not think it to be a major problem.
So, sorry. Try to keep the device a little bit further and the effect is not so pronounced.
Ah, too bad. Does pokitto have display mirroring over serial like the Arduboy?
No, because the data needed is so much greater. Arduboy screen is 128x64/8 = 1024 bytes, ours is 220x176x2 = 77400 bytes.
Btw, most other similar diy game devices that have 1.8" color tft have this same polarity problem.
Yep I noticed that too, I seem to notice it less in the dark.
Anyway, if you get the JoyHat you’ll be using the display in correct orientation, and I find it much more comfortable to play that way too. It really made much bigger difference than I expected.
The only issue is that most games are for normal orientation. Maybe a feature could be implemented in PokittoLib to convert to JoyHat version. The picture would have to be downscaled in one dimension, but it could be done with linear interpolation with some precomputed tables with hopefully not such a big performance cost.
That actually sounds like a huge amount of work. There would need to be a reimplementation of every single display mode…
Sounds like a flaw in the library design then.
Anyway, maybe a tiny library could do this with some hack. I’ll think about how to do this.
Scaling the screen using interpolation usually “smudges” the graphics, reduces the contrast and dims the screen.
It’s probably the best that could be done tho. We could try without interpolation too if that would look better.
Trying to make sense of the library display code ATM.
EDIT: OK, it’s beyond me
I somewhat agree.
(Edit: Moreso that the library isn’t designed to be able to output to another kind of display than on the idea of attempting to scale existing games to work in portrait mode.)
I’ve actually considered this scenario in the past when working on a few attempts to create a prototype ‘version 2’ of the library.
I came to the conclusion that the best solution is to separate ‘display modes’ (which draw to a buffer), from the actual output device, which normally would be the internal screen but could also be some other device.
graphics.drawLine(x0, y0, x1, y1);
// 'draw' would be templated to accept different
// classes providing the same API.
I eventually gave up on my attempts, partly because (like yourself) I found it hard to make sense of how to set up and drive the hardware, and partly because I was unsure whether the effort was justified.
When I was creating the Arduboy2 port (which I never quite finished) people kept asking me to implement scaling, but the fact of the matter is that scaling to fit a screen with a different aspect ratio always creates distortion and it can often be very ugly.
It took some digging, but here’s an example image:
And here’s three different scaling algorithms:
None of them look as good as the original.
I disagree: a severely-letterboxed image downscaled with nearest-neighbor to the point where text is illegible would be so much worse than the problem it tries to solve. The proper solution would be to write resolution-independent games, but that’s more easily said than done.
I was thinking of printing a filter on a piece of transparent plastic using a laser printer. It could be possible to account for the polarization and make the screen appear to be uniform horizontally.
I did two tests to try to improve the screen polarization.
The first test was to print a gradient on transparent sheet using a laser printer.
It was slightly better in some ways and worse in others.
The second attempt was to use polarized sunglasses. It made the screen look darker. It did not make the screen distorted like the plastic sheet gradient above. Making the screen darker overall will probably reduce the polarization effect. There are several polarizing sheets for sale on ebay, searching “polarizing filter sheet”.
Thanks for the experiments. Maybe I should buy some of those sheets and try myself.
This youtube video shows some 3d printed optics that are made using an SLA printer.
Maybe they could be used to improve the Pokitto screen.