Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Трикстер от Января 10, 2017, 02:36



Название: Перерисовка объектов OpenGL
Отправлено: Трикстер от Января 10, 2017, 02:36
Здравствуйте.
Подскажите, пожалуйста, каким образом прописать перерисовку объекта ;D
Тут рассчитывается значение contact:
Код:
void GLWidget::touching(int trancleted){
 
    radius1 = 4.0;
    radius2 = 2.0;
    tooth_size_1 = 0.7;
    tooth_size_2 = 0.7;
 
    if((radius1 - (radius2 - tooth_size_2 + trancleted )) > 0 && (radius1 - (radius2 - tooth_size_2 + trancleted)) < 3)
        contact = true; // касается
    else
        contact = false; // НЕ касается
    emit touchingGears(contact);
}

Тут у нас начальные значения отрисовки:
Код:
void GLWidget::initializeGL(){
 
    static const GLfloat lightPos[4] = { 5.0f, 5.0f, 10.0f, 1.0f };
    static const GLfloat reflectance1[4] = { 0.0f, 0.0f, 1.0f, 0.0f }; // синяя
    static const GLfloat reflectance2[4] = { 1.0f, 1.0f, 1.0f, 0.0f }; // белая
    static const GLfloat reflectance3[4] = { 0.0f, 0.0f, 1.0f, 0.0f }; // синяя2
 
    ...
}
Необходимо при contact = true перерисовывать reflectance2 синим цветом, а при contact = false обратно в белый.. ;D

Через glColor3f() надо шаманить, что-то в этом роде? ;D
Код:
void GLWidget::paintGL() {
if (contact = true)
glColor3f(r1,g1,b1);
else
glColor3f(r2,g2,b2);
... // отрисовка фигур
}


Название: Re: Перерисовка объектов OpenGL
Отправлено: Racheengel от Января 10, 2017, 10:24
Так можно, но это древний метод...


Название: Re: Перерисовка объектов OpenGL
Отправлено: Трикстер от Января 10, 2017, 11:12
Так можно, но это древний метод...
А не древний подскажете?) ;D


Название: Re: Перерисовка объектов OpenGL
Отправлено: Racheengel от Января 10, 2017, 11:51
Шейдеры сейчас в моде... Но это совершенно отдельный язык и идеология...
Более простое имхо через arrays.. но смотря что Вам нужно...


Название: Re: Перерисовка объектов OpenGL
Отправлено: Трикстер от Января 10, 2017, 13:23
Шейдеры сейчас в моде... Но это совершенно отдельный язык и идеология...
Более простое имхо через arrays.. но смотря что Вам нужно...
Необходимо при contact = true перерисовывать reflectance2 синим цветом, а при contact = false обратно в белый.. ;D


Название: Re: Перерисовка объектов OpenGL
Отправлено: Racheengel от Января 10, 2017, 13:59
что за объект? насколько сложный? или просто одна сфера?


Название: Re: Перерисовка объектов OpenGL
Отправлено: Igors от Января 10, 2017, 14:10
Через glColor3f() надо шаманить, что-то в этом роде? ;D
Да, можно и так - зависит от того как/чем Вы рисуете. Если шейдером - то он все берет на себя, обычно цвет передается в шейдер через переменную. Если включен цвет вертексов - он будет использоваться. Установлен материал - его цвет. И наконец если ничего не установлено, то будет использоваться "регулярный" (текущий) цвет - то что задает glColor   
 


Название: Re: Перерисовка объектов OpenGL
Отправлено: Трикстер от Января 10, 2017, 16:48
что за объект? насколько сложный? или просто одна сфера?
(http://s015.radikal.ru/i332/1701/d9/38fc8d465d7d.png)