| |
Shadow Account closed
Registered: Apr 2002 Posts: 355 |
Accuracy in 3d-rotation routines?
How accurate do you run your 3d-rotation routines?
I just started doing a mockup (in a high-level language) for a 3D-rotation routine, but found out that running 8-bit accuracy (8 bit coords and sin/cos tables, 8 bit mulitiplies w. 16 bit result) really looked quite crappy, vertexes flail about rather much. Do people generally run full 16-bit all the way through? |
|
| |
Shadow Account closed
Registered: Apr 2002 Posts: 355 |
Ahh... Just noticed that the part that was killing my accuracy was the perspective transformation. Probably running that in higher accuracy will be enough, and then leave the rotation at 8 bit. |
| |
Cruzer
Registered: Dec 2001 Posts: 1048 |
Precalculate FTW. Protip: Coords can be packed to fill a lot less.
|
| |
Shadow Account closed
Registered: Apr 2002 Posts: 355 |
Yeah, precalc is what I have done so far, since it is both faster and you can have full accuracy. But it still feels a bit like cheating! On the other hand, isn't cheating what democoding is all about... :D |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: Yeah, precalc is what I have done so far, since it is both faster and you can have full accuracy. But it still feels a bit like cheating! On the other hand, isn't cheating what democoding is all about... :D
I normally use 8 bits for vertices and rotation then 16 bit when doing the perspective. Graham uses full 16 bits in his latest vectors, that about the only way to get full sub-pixel accuracy in the line drawer. |
| |
HCL
Registered: Feb 2003 Posts: 728 |
@JA: Hmm, what really is "full sub-pixel accuracy"!? ;) Calculating with 2 steps per pixel is still sub-pixel accuracy, right..
btw.. I usually calculate matrix rotation in 16 bit, then doing vertex calculation + perspective in only 8 bit :/. |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: @JA: Hmm, what really is "full sub-pixel accuracy"!? ;) Calculating with 2 steps per pixel is still sub-pixel accuracy, right..
btw.. I usually calculate matrix rotation in 16 bit, then doing vertex calculation + perspective in only 8 bit :/.
Hehe, good question. Well, with full pixel accuracy I guess I mean some fractional part in each pixel... ;) So that a line with int(dy)=-1 still can be one of the following:
1)
*
*******
2)
**
******
3)
***
*****
4)
****
****
5)
*****
***
6)
******
**
7)
*******
*
I guess full precision would be allowing the cut in the slop to appear anywhere on a line with dy=-1 and dx=full width. =)
I.e. for lines that are max 128 pixels wide you'd need 7.7 for full sub pixel accuracy. |
| |
HCL
Registered: Feb 2003 Posts: 728 |
@JA, nice visual explanation :), that's how i imagine it also.. But i like to think more on pixel level: How many steps (==sub-pixels) (x and y) are there in one pixel? Let's say you have full 8 bit sub-pixel accuracy, then you should calculate your lines with 256x256 sub-pixels in each pixel.
Man, did you quit work already? Or are you discussing sub-pixels on project time?! Gotta be going home now, CU :). |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: @JA, nice visual explanation :), that's how i imagine it also.. But i like to think more on pixel level: How many steps (==sub-pixels) (x and y) are there in one pixel? Let's say you have full 8 bit sub-pixel accuracy, then you should calculate your lines with 256x256 sub-pixels in each pixel.
Man, did you quit work already? Or are you discussing sub-pixels on project time?! Gotta be going home now, CU :).
@HCL: Yes of course, that's how I see it as well. I was just trying to explain what I meant by FULL sub pixel precision. For lines that are at most 128 pixels wide, 7 bits of fractional digits are enough, 8 bit sub pixel precision is just superfluous in that case.
Anyways, OMG! Beer time! |
| |
pernod Account closed
Registered: Nov 2004 Posts: 25 |
Quote: @HCL: Yes of course, that's how I see it as well. I was just trying to explain what I meant by FULL sub pixel precision. For lines that are at most 128 pixels wide, 7 bits of fractional digits are enough, 8 bit sub pixel precision is just superfluous in that case.
Anyways, OMG! Beer time!
Yes, beertime in mine and Puterman's office! :-)
|
| |
Graham Account closed
Registered: Dec 2002 Posts: 990 |
Quoting HCL
btw.. I usually calculate matrix rotation in 16 bit, then doing vertex calculation + perspective in only 8 bit :/.
My matrix is 24 bit and my vertices + perspective are 16 bit :P |
| |
HCL
Registered: Feb 2003 Posts: 728 |
@Graham: Yepp, it suxx :/. I never claimed to have a vector shit as good as yours, but 24 bits is pure illness.. One day i might try to keep up with your standards (just ~10 years after), but until then my current vector routine will have to be nice enough.. :). Cheers! |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
in 2008 it should be obvious that a 16 bit rotation matrix can be calculated pretty fast:3-4 char high rastertime, and in like half or less time for 2 axes rotation only.
the rotation matrix should be rather viewed imho as the 3 unit vectors which help you make up the coordinates by adding(dividing) them. this can be done even without multiplications assuming no morphing, but precalculated tables for each value used by the coords.
perspective projection must be done with real multiplications. 3d calcs for an avg c64 object should be roughly at 0.5 or 1 frames.
sub pixel stuff is nice, but it doesnt comes through imho at speeds <25 fps.
Id like to see some true vector wolds no matter how slow. tho nobody will code it if I wont :P :) |
| |
Graham Account closed
Registered: Dec 2002 Posts: 990 |
@HCL: Well if you need 16 bit rotation, you need a 100% accurate 16 bit matrix too which can only be achieved with 24 bit calculation. Every addition let's you lose 1 bit accuracy and the matrix calculation involves a lot of successive additions. |