Thread: [D3D9] Point Light not working

  1. #1
    Registered User
    Join Date
    Aug 2010
    Posts
    2

    Question [D3D9] Point Light not working

    Hi everyone!

    I wanted to make this message longer, but for some reason couldn't post... so I lost it... so I had to rewrite it... so I'm gonna make it shorter... here it goes.

    As the title states I'm having problems creating lights in D3D9.
    I initialize it and turn it on but nothing happens. In fact, no object is visible anymore.
    Though when I use directional light, the objects are visible.

    I researched on Google a lot, but unfortunately, I found no answer of use.

    Here is the function that initializes the lights and materials:
    Code:
    void initLight(void){    
    	// these two variables are initialized
    		//D3DLIGHT9 light;    
    		//D3DMATERIAL9 material;     
    
        ZeroMemory(&light, sizeof(light));    // clear out the struct for use
        light.Type = D3DLIGHT_POINT;    // make the light type 'directional light'
    	
    	// control light's color through numpad
    	if(keystate[DIK_NUMPAD7] & 0x80) lightR -= 0.05f;
    	if(keystate[DIK_NUMPAD9] & 0x80) lightR += 0.05f;
    	if(keystate[DIK_NUMPAD4] & 0x80) lightG -= 0.05f;
    	if(keystate[DIK_NUMPAD6] & 0x80) lightG += 0.05f;
    	if(keystate[DIK_NUMPAD1] & 0x80) lightB -= 0.05f;
    	if(keystate[DIK_NUMPAD3] & 0x80) lightB += 0.05f;
    	if(lightR < 0.0f) lightR = 0.0f;
    	else if(lightR > 1.0f) lightR = 1.0f;
    	if(lightG < 0.0f) lightG = 0.0f;
    	else if(lightG > 1.0f) lightG = 1.0f;
    	if(lightB < 0.0f) lightB = 0.0f;
    	else if(lightB > 1.0f) lightB = 1.0f;
    
        light.Diffuse = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);
        light.Position = D3DXVECTOR3(0.0f, -1.0f, 0.0f);
        light.Range = 50.0f;    // this should be enough
        light.Attenuation0 = 0.0f;     // no constant inverse attenuation
        light.Attenuation1 = 0.5f;  // 5 inverse attenuation
        light.Attenuation2 = 0.0f;   // no square inverse attenuation
    
        d3ddev->SetLight(0, &light);    // send the light struct properties to light #0
        d3ddev->LightEnable(0, TRUE);    // turn on light #0
    
    	// initialize materials
    
    	// well... a window's material... 
        ZeroMemory(&wndMaterial, sizeof(D3DMATERIAL9));
        wndMaterial.Diffuse.r = wndMaterial.Ambient.r = 0.60f;
        wndMaterial.Diffuse.g = wndMaterial.Ambient.g = 0.75f;
        wndMaterial.Diffuse.b = wndMaterial.Ambient.b = 1.0f;
        wndMaterial.Diffuse.a = wndMaterial.Ambient.a = 1.0f;
    
    	// wood material ( used for walls )
    	ZeroMemory(&woodMaterial, sizeof(D3DMATERIAL9));
    	woodMaterial.Diffuse.r = woodMaterial.Ambient.r = 1.0f;
    	woodMaterial.Diffuse.g = woodMaterial.Ambient.g = 0.75f;
    	woodMaterial.Diffuse.b = woodMaterial.Ambient.b = 0.75f;
    	woodMaterial.Diffuse.a = woodMaterial.Ambient.a = 1.0f;
    
    	// concrete material ( used for floor )
    	ZeroMemory(&cncrtMaterial, sizeof(D3DMATERIAL9));
    	cncrtMaterial.Diffuse.r = cncrtMaterial.Ambient.r = 0.5f;
    	cncrtMaterial.Diffuse.g = cncrtMaterial.Ambient.g = 0.5f;
    	cncrtMaterial.Diffuse.b = cncrtMaterial.Ambient.b = 0.5f;
    	cncrtMaterial.Diffuse.a = cncrtMaterial.Ambient.a = 1.0f;
        return;
    }
    Yes, I did turn lighting on ( ambient lighting too ).
    If needed, I can post the rest of the code too.
    Would anyone give me any tips as of why my light is not working?

    Thanks anticipated!

    P.S. Sorry for my english, I'm not a native english speaker.

  2. #2
    Master Apprentice phantomotap's Avatar
    Join Date
    Jan 2008
    Posts
    5,108
    I can't really tell from that example, but I would imagine that it comes form using the ridiculous `ZeroMemory' function to initialize the structure. I know it has caused problems for others.

    Anyway, since this is "Direct3D" version 9, if you post a complete example, I can take a better look.

    Soma

  3. #3
    Registered User
    Join Date
    Aug 2010
    Posts
    2

    Red face Oops!

    Hi!

    I solved the problem! I forgot to delete a piece of code I was using for debugging, which was causing strange results. Oops! Sorry for bothering ?

    Well, what did I learn today ? Always check your code in detail, before you ask for help on a forum!

    Thanks phantomotap! Because of your post I started checking my code.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Ncurses game error
    By Aparavoid in forum Linux Programming
    Replies: 1
    Last Post: 08-02-2009, 03:34 PM
  2. For the numerical recipes in C types!
    By Smattacus in forum C Programming
    Replies: 5
    Last Post: 10-28-2008, 07:57 PM
  3. Floating point faster than fixed-point
    By VirtualAce in forum A Brief History of Cprogramming.com
    Replies: 5
    Last Post: 11-08-2001, 11:34 PM
  4. more with my 1st structure program
    By sballew in forum C Programming
    Replies: 42
    Last Post: 10-22-2001, 08:03 PM

Tags for this Thread