簡體   English   中英

GL_LIGHT僅創建一個光源

[英]GL_LIGHT only creating one light source

目前我正在嘗試使用光源照亮對象,並根據GL_COLOR_MATERIAL更改對象的顏色。 出於某種原因,我只能看到一個光源被投射到模型上。 我嘗試了各種不同的位置和光源組合,我只注意到GL_LIGHT0功能。

我也嘗試過不同的環境/漫反射/材料組合而沒有成功。

static const GLfloat ambient[4] = {0.1f, 0.1f, 0.1f, 1.0f};
static const GLfloat diffuse[4] = {0.5f, 1.0f, 1.0f, 1.0f};
static const GLfloat position0[4] = {0.0f, 0.0f, 20.0f, 0.0f};
static const GLfloat position1[4] = {0.0f, 0.0f, -20.0f, 0.0f};
static const GLfloat front_mat_shininess[1] = {60.0f};
static const GLfloat front_mat_specular[4] = {0.2f, 0.2f, 0.2f, 1.0f};
static const GLfloat front_mat_diffuse[4] = {0.5f, 0.28f, 0.38f, 1.0f};

static const GLfloat lmodel_ambient[4] = {1.0f, 1.0f, 1.0f, 1.0f};
static const GLfloat lmodel_twoside[1] = {GL_FALSE};

glDisable(GL_LIGHTING);
glDisable(GL_COLOR_MATERIAL);

///Enable lighting if item is a solid model
if(wireFlag == 1)
{
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
    glLightfv(GL_LIGHT0, GL_POSITION, position0);
    glEnable(GL_LIGHT0);

    glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
    glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
    glLightfv(GL_LIGHT1, GL_POSITION, position1);
    glEnable(GL_LIGHT1);

    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
    glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);


    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_mat_shininess);
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_mat_specular);
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, front_mat_diffuse);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);
}

任何幫助將不勝感激!

有幾個參數(例如GL_DIFFUSE ),它默認為0,0,0,0GL_LIGHT1 .. GL_LIGHT7但別的東西(如1,1,1,1 )為GL_LIGHT0 我不知道你錯過了哪一個,但我敢打賭你依賴於兩個燈的默認值而且它是GL_LIGHT1的“關閉”。

暫無
暫無

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

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