簡體   English   中英

C ++ Opengl - 使用聚光燈照明

[英]C++ Opengl - lighting using spotlight

我有一個需要在聚光燈/定向燈下的模型,

意思是,我需要在模式之間切換(聚光燈和方向)。

這是代碼和一些解釋:

我可以用鼠標移動旋轉模型/光源,所以我正在使用

glRotate和glTranslate為此。

一旦用戶按下“L”鍵,我就應該在模式之間切換。

這是閃電的代碼:

void LightBall::projectLight(void)
{
if(LIGHT == _lightMode){
    printf("Entering LIGHT mode\n"); <--- Supposed to be a directional light
    glDisable(GL_LIGHT1);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_POSITION, _light_position);
}

if(SPOT_LIGHT == _lightMode){
    printf("Entering SPOTLIGHT mode\n"); <--- Supposed to be a spotlight
    glDisable(GL_LIGHT0);
    glEnable(GL_LIGHT1);
    glLightfv(GL_LIGHT1, GL_POSITION, _light_position);
    glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 10.0);
    glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);
    glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,_spotlight_position);
}
}

問題是我在它們之間切換時總是得到相同的光模式,

以下是:

定向

在兩種光模式之間切換並仍然獲得相同光線之后的另一個例子

光源旋轉源(小球):

回轉

我怎樣才能得到想要的結果?

以下是LIGHT0和LIGHT1的定義:

    GLfloat light_ambient[] = { 1.0, 0.0, 0.0, 1.0 };
GLfloat light_diffuse[] = { 1.0, 0.0, 0.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
_light_position[0] =  0.0;
_light_position[1] = 1.0;
_light_position[2] = 0.0;
_light_position[3] = 0.0;

_spotlight_position[0] = 0.0;
_spotlight_position[1] = -1.0;
_spotlight_position[2] = 0.0;

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);

glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular);

謝謝!

GL燈是定向光還是聚光燈取決於其位置的w (第4個)分量。 如果坐標為0,則為方向性。 如果非零(通常是1),那就是聚光燈。 在調用glLightfv(..., GL_POSITION, ...)之前,您必須相應地修改_lightPosition

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM