8-Bit Indexed Color Translucency

Published July 05, 2000 by Travis Bemann, posted by Myopic Rhino
Do you see issues with this article? Let us know.
Advertisement
This article is on how to use 256 indexed color translucency. It does not work on 16-bit or 32-bit color due to memory constraints. It involves building a 256 by 256 unsigned char table, which contains the result of every color combination. The table would be extremely large with 16-bit or 32-bit color. The first index for the table (which is in the form of a 2D array) is the translucency color. The second index for the table is the color behind the translucent pixel. This is a function that shows how to use this translucency technique. (The translucency actually should not be in a function or method, even an inline method.) DON'T ACTUALLY USE THIS FUNCTION! IF A FUNCTION CALL WAS USED TO DRAW EACH SINGLE PIXEL IN A SINGLE SOLIDCOLOR POLYGON, IT WOULD BE HORRENDOUSLY SLOW!


[size="5"]Variables
  • x: the pixel's x coordinate
  • y: the pixel's y coordinate
  • c: the pixel's translucent color
  • b: the target graphic's base address
  • r: the target graphic's row bytes (includes padding, if there is any)
  • t: a pointer to the mixing table

[size="5"]Implementation

void Polygon3D::DrawTranslucentPixel(unsigned long x, unsigned long y,
unsigned char c, unsigned char *b,
unsigned long r, unsigned char *t)
{
*(unsigned char*)(b+x+y*r) = t[c][*(unsigned char*)(b+x+y*r)];
}

Cancel Save
0 Likes 0 Comments

Comments

Nobody has left a comment. You can be the first!
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement