Справка по свойствам материалов в Open GL с использованием GLUT & C ++ - PullRequest
0 голосов
/ 26 февраля 2012

В части освещения проекта OpenGL я сейчас делаю эту часть для моей команды:

Определите свойства материала для моделей в части 1. Сделайте ваши определения материала легко заменяемый. В частности, компоненты робота и пульт дистанционного управления должны быть «блестящими»; груды обломков следует обезвреживать при различных цветовых оттенках; плитки основной платформы должны быть диффузными серый. Выберите свои собственные свойства материала и правильно документируйте их для блоков, баз, заводов и т. Д.

Я только пытался применить «блестящий» эффект к блоку управления, и он не сработал. Я попытался включить некоторые образцы освещения, поскольку мы еще не включили их (или, по крайней мере, их нет в хранилище), чтобы протестировать их. В результате части куба контроллера отражаются (хотя и слишком белые, независимо от того, что я пробовал, цвет кубов серый), но не цилиндрическая антенна. (Ни один из этих тестов не находится в хранилище, так как я не смог зафиксировать что-то, что не будет работать.)

В основном мне нужна помощь со свойствами материалов и настройкой базового освещения для их тестирования (тестовое освещение является временным, поскольку один из моих товарищей по команде работает над освещением).

Я был бы очень признателен, если бы кто-нибудь помог мне с выполнением этой части.

Информация о проекте:

  • Репозиторий для нашего проекта (проект Visual Studio 2010)
  • Карта / сетка лежит вдоль плоскости xz, где y - высота
  • Все делается с использованием либо glCubes, либо форм переизбытка, поэтому для них не нужно определять нормалей, только некоторые плитки и числа 4 везде выполняются с помощью gl_quads

Если я что-то пропустил или вам нужна дополнительная информация, пожалуйста, спросите!

1 Ответ

2 голосов
/ 28 февраля 2012

Я помогу вам с основами молнии в OpenGL ... сначала вам нужно включить и настроить источники света, поэтому вот несколько примеров:

    void setlight(){
            //here you set the lights and parameters, example with one light
            float LightAmbient[] = { 0.1f, 0.1f, 0.05f, 1.0f };
            float LightEmission[] = { 1.0f, 1.0f, 0.8f, 1.0f };
            float LightDiffuse[] = { 1.0f, 1.0f, 0.8f, 1.0f };
            float LightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
            float LightDirection[]={-0.5f, -0.5f, -0.5f};
            glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);
            glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
            glLightfv(GL_LIGHT0, GL_SPECULAR, LightSpecular);
            glLightfv(GL_LIGHT0, GL_POSITION, LightDirection);
            glEnable(GL_LIGHTING);
            glEnable(GL_LIGHT0);
    }
    void setmaterial(){
            //here you set materials, you must declare each one of the colors global or locally like this:
            float MatAmbient[] = { 0.1f, 0.1f, 0.1f, 1.0f };
            float MatDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
            float MatSpecular[] = { 0.1f, 0.1f, 0.0f, 0.1f };
            float MatShininess = 60;
            float black[] = {0.0f,0.0f,0.0f,1.0f};
            glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, MatAmbient);
            glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MatDiffuse);
            glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, MatSpecular);
            glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, MatShininess);
            glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
    }
    void render(){
            //your render function
            //clean buffers, set viewport, projection, lookat, etc...
            . . .

            //set light and materials
            setlight();
            setmaterial();

            //draw your stuff

            . . .

            glutSwapBuffers();
    }

Теперь, если вам нужно установить разные материалы для рисования разного объекта, вы должны установить материалы для каждого объекта, прежде чем рисовать их ... пример:

    for(int i=0; i<num_objetcs; i++){
            setmaterial(i);
            drawobject(i);
    }

Конечно, вы должны изменить то, что я написал раньше ... Вы просто должны установить свет, а затем для каждого объекта вы устанавливаете их материал и затем рисуете, один за другим. Вы должны изменить функцию "setmaterial", чтобы получить параметр материала, и я полагаю, вы знаете, что делать с остальными ... удачи!

...