游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1346|回复: 1

聚光灯光源应该如何用才能正常工作

[复制链接]

3

主题

6

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2007-3-11 18:41:00 | 显示全部楼层 |阅读模式
void InitTeapot()
{
        D3DXCreateTeapot(pDevice, &teapot, 0);
        D3DXCOLOR green( D3DCOLOR_XRGB(0,200,100));
        D3DXCOLOR higreen( D3DCOLOR_XRGB(255,255,255));
        D3DXCOLOR black(D3DCOLOR_XRGB(0,0,0));
        mat = InitMaterial(green,green,higreen,black,2.0f);
        pDevice->SetMaterial(&mat);

        D3DXVECTOR3 dir2(0.0f, 3.0f, -5.0f);//如果改为(0.0f, 0.0f, 0.0f)物体是白色的
        D3DXVECTOR3 pos(0.0f,0.0f,-5.0f);
        D3DXCOLOR   c(D3DCOLOR_XRGB(255,255,255));
        D3DLIGHT9 dirLight = InitSpotLight(&pos,&dir2, &c,1000.0f,0.4f,0.9f);

        pDevice->SetLight(0, &dirLight);
        pDevice->LightEnable(0, true);

        SetupPerspective();
        SetupCamera();
        pDevice->SetRenderState(D3DRS_LIGHTING,true);
        pDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);
        pDevice->SetRenderState(D3DRS_SPECULARENABLE, false);
}
D3DLIGHT9 InitSpotLight(D3DXVECTOR3* position, D3DXVECTOR3* direction, D3DXCOLOR* color,double dRange, double theta,double phi)
{
        D3DLIGHT9 light;
        ::ZeroMemory(&light, sizeof(light));
        light.Type = D3DLIGHT_SPOT;
        light.Ambient = *color * 0.0f;
        light.Diffuse = *color;
        light.Specular  = *color * 0.6f;
        light.Position  = *position;
        light.Direction = *direction;
        light.Range = dRange;
        light.Falloff = 1.0f;
        light.Attenuation0 = 1.0f;
        light.Attenuation1 = 0.0f;
        light.Attenuation2 = 0.0f;
        light.Theta = theta;
        light.Phi = phi;   
        return light;
}
程序运行后物体是黑色的,但如果按上面的注解处改动后物体是白色的,不明白应该怎样设置才能正常

3

主题

6

帖子

12

积分

新手上路

Rank: 1

积分
12
 楼主| 发表于 2007-3-11 21:35:00 | 显示全部楼层

Re:聚光灯光源应该如何用才能正常工作

原因找到了,原来不能把D3DLIGHT设为局部变量,换成全局的就能正常运行了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 16:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表