[英]openGL spotlight troubles
好的,所以我正在嘗試模擬手電筒的行為。 目前,我只是想讓聚光燈出現在球體上。 現在下面的代碼有效,但它僅在GL_SPOT_CUTOFF
設置為 180 時有效,這會創建均勻的光分布 - 不是我想要的。 如果我嘗試將它設置為任何其他值,那么它就會停止工作。 這是代碼
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_pos [4] = {5, 2, -10, 1.0};
glLightfv (GL_LIGHT0, GL_SPECULAR, mat_specular);
glLightfv (GL_LIGHT0, GL_POSITION, light_pos);
glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 20.0f);
glLightf (GL_LIGHT0, GL_SPOT_EXPONENT, 100.0);
GLfloat spotDir [] = {0.0, 0.0, 0.0};
glLightfv (GL_LIGHT0, GL_SPOT_DIRECTION, spotDir);
glutSolidSphere (2, 20, 20);
glFlush ();
glutSwapBuffers ();
我已啟用照明並已完成所有初始化工作。 所有的表面法線都是從 glutSolidSphere 計算出來的,所以不知道還有什么可能會失敗......有什么想法嗎?
問題是你的spotDir
。 它是一個向量,而不是世界坐標中的一個點。 嘗試將其更改為:
GLfloat spotDir[] = { -5, -2, 10 };
我很懶,所以我不會標准化這個向量;D
這會將您的聚光燈指向球體中心。
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.