"How to" textures

Started by
6 comments, last by amtri 16 years, 11 months ago
Hello, I have a couple of basic texture questions that I'm hoping somebody will be able to quickly help me with. 1) I'm trying to draw a white triangle. If I comment out all texture code, I do get my white triangle. Then I add the texture, and get a shaded triangle. Then I release my texture, and remove FVF_TEX1 from my vertex list, and draw the triangle again. I get the same triangle. It's like the texture is still there. Do I need to do anything oter than texture->Release() and not have a reference to texture coordinates in my vertices in order to eliminate the references to the texture? 2) My texture is a gray scale. Any ideas why I'm getting a reddish triangle, rather than a grayscale triangle? Thanks.
Advertisement
1) don't know
2) do you either have the vertex colors set to red, or a red light in the scene?

-me
Hello there.

The texture is still bound to the texture unit with the SetTexture command and still has a reference on it, so it is not actually out of memory. If you set the texture in unit 0 to NULL it will completely unbind the texture and it should go back to how it was before.

I don't have the SDK docs handy right here, so I don't know the exact setup but that should give you a good start.

-Jeremiah
Power User / Programmer / Game Player ( Not computer nerd :)
Setting the texture on unit 0 to NULL did remove the texture. Thanks.

Now for my color problem: my colors aren't really coming through, so I did the following:

1) Set my texture to a solid red: 0xff. Indeed, I get a solid red triangle

2) Set my texture to a solid blue: 0xff0000. I get a solid blue triangle

3) Set my texture to a solid green: 0x00ff. I get nothing! Where did my green channel go?

Thanks again.
I've got the problem narrowed down to a manageable level where somebody can actually help me.

I start with

codesampler.com dx9_texture example

Then I substituted their loadTexture function with the code below. All it does is create the texture in a BMP file format. The texture itself is a single pixel. The code shows how I try to make the pixel in the texture red, or green, or blue.

If I make it red, I see the square. If I make it either green or blue, I see nothing.

Any ideas?

Thanks.

void loadTexture( void ){   char pixels[88];   int i,*ival;   unsigned int *uint;   short *sval;   for(i=0; i<88; ++i) pixels = 0;   /* identify as BMP */   pixels[0] = 'B';   pixels[1] = 'M';   /* file size */   ival = (int*)(pixels+2);   *ival = 88;   /* beginning of pixel data */   ival = (int*)(pixels+10);   *ival = 56;   /* header size */   ival = (int*)(pixels+14);   *ival = 40;   /* texture dimensions (1x1) */   ival = (int*)(pixels+18);   *ival = 1;   ival = (int*)(pixels+22);   *ival = 1;   /* plane */   sval = (short*)(pixels+26);   *sval = 1;   /* size per pixel */   ival = (int*)(pixels+28);   *ival = 32;   uint = (unsigned int*)(pixels+56);   /* set red */   *uint = 0x000000ff;   /* set green */   *uint = 0x0000ff00;   /* set blue */   *uint = 0x00ff0000;   D3DXCreateTextureFromFileInMemory(            g_pd3dDevice,(LPCVOID)pixels,88,&g_pTexture);	g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);	g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);}
I believe I found my answer, after some trial and error. It turns out I got things to work by storing 24 bits per pixel in the BMP file, rather than 32 bits. Don't exactly why this is the case, since if I dump my memory allocation to a file I can open the resulting 32-bit BMP file in any graphic viewer, so the BMP file in memory is ok. But changing it to 24 bits per pixel made everything work.
Which byte is supposed to be alpha in 32-bit BMP? If it's the first byte, your red/green/blue contants all had zero alpha in 32-bit, making the object invisible. If it's the last byte, then only your red color is visible (though it is black) and the other 2 colors are invisible.
jaafit,

Not clear I get your point. My understanding is that the higher bits get the value of alpha. If that's the case, then you're right that alpha is zero everywhere. However, I do see color in some cases and not in others. I can't explain that.

Also, if I set the highest bits to 1, nothing seems to change. And, if I take a visible setup that only shows red, and add, say, green bits to it, only the red shows up.

In other words, no matter what I do, I can only see red.

This topic is closed to new replies.

Advertisement