Texture Alpha |
Alpha data also can be supplied by textures. The texture must first be created, and then the alpha values added to it. To render with the texture, set it to a texture stage and select the appropriate texture stage operation and operands. When draw is called, the primitive is rendered with transparency.
These steps are illustrated in the following C# code example.
[C#]
// Declare a Device. Device device = null // Declare a global texture variable. Texture texture = null; // Initialize the device. . . . // Create an alpha texture. texture = new Texture(device, 128, 128, 0, 0, Format.A8R8G8B8, Pool.Managed); LoadGradient();
The Texture class sets up everything by creating an empty texture. After the texture resource is created, LoadGradient is called to load the alpha channel.
[C#]
protected void LoadGradient() { uint yGrad, xGrad; uint dx = 128; // width uint dy = 128; // height uint[] buffer = new uint[dy * dx]; GraphicsStream gs = null; try { gs = texture.LockRectangle(0, LockFlags.Discard); for (uint y = 0; y < dy; y++) { uint offset = y * dx; yGrad = (uint)(((float)y / (float)dx) * 255.0f); for (uint x = 0; x < dx;) { xGrad = (uint)(((float)x / (float)dx) * 255.0f); uint b = (uint)(xGrad + (255 - yGrad)) / 2 & 0xFF; uint g = (uint)((255 - xGrad) + yGrad) / 2 & 0xFF; uint r = (uint)(xGrad + yGrad) / 2 & 0xFF; uint a = (uint)(xGrad + yGrad) / 2 & 0xFF; buffer[offset + x] = ((a << 24) + (r << 16) + (g << 8) + (b)); x++; } } gs.Write(buffer); texture.UnlockRectangle(0); } catch(InvalidCallException) { return; } }
The alpha value is calculated based on the current pixel's relative x/y position within the texture size.
Next, assign the texture to a texture stage and set up the texture stage.
[C#]
// Assign texture. device.SetTexture(0, texture) // Texture stage states. device.TextureState[0].ColorOperation = TextureOperation.Modulate; device.TextureState[0].ColorArgument1 = TextureArgument.TextureColor; device.TextureState[0].ColorArgument2 = TextureArgument.Diffuse; device.TextureState[0].AlphaOperation = TextureOperation.Modulate; device.TextureState[0].AlphaArgument1 = TextureArgument.TextureColor; device.TextureState[0].AlphaArgument2 = TextureArgument.Diffuse;
This code results in a primitive with a transparency gradient. The gradient is transparent where x = 0, and opaque where x is its maximum value.
Send comments about this topic to Microsoft. © Microsoft Corporation. All rights reserved.
Feedback? Please provide us with your comments on this topic.
For more help, visit the DirectX Developer Center