Russian Qt Forum
Июнь 16, 2024, 02:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перерисовка объектов OpenGL  (Прочитано 3809 раз)
Трикстер
Гость
« : Январь 10, 2017, 02:36 »

Здравствуйте.
Подскажите, пожалуйста, каким образом прописать перерисовку объекта Смеющийся
Тут рассчитывается значение 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 обратно в белый.. Смеющийся

Через glColor3f() надо шаманить, что-то в этом роде? Смеющийся
Код:
void GLWidget::paintGL() {
if (contact = true)
glColor3f(r1,g1,b1);
else
glColor3f(r2,g2,b2);
... // отрисовка фигур
}
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Январь 10, 2017, 10:24 »

Так можно, но это древний метод...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Трикстер
Гость
« Ответ #2 : Январь 10, 2017, 11:12 »

Так можно, но это древний метод...
А не древний подскажете?) Смеющийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Январь 10, 2017, 11:51 »

Шейдеры сейчас в моде... Но это совершенно отдельный язык и идеология...
Более простое имхо через arrays.. но смотря что Вам нужно...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Трикстер
Гость
« Ответ #4 : Январь 10, 2017, 13:23 »

Шейдеры сейчас в моде... Но это совершенно отдельный язык и идеология...
Более простое имхо через arrays.. но смотря что Вам нужно...
Необходимо при contact = true перерисовывать reflectance2 синим цветом, а при contact = false обратно в белый.. Смеющийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Январь 10, 2017, 13:59 »

что за объект? насколько сложный? или просто одна сфера?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Январь 10, 2017, 14:10 »

Через glColor3f() надо шаманить, что-то в этом роде? Смеющийся
Да, можно и так - зависит от того как/чем Вы рисуете. Если шейдером - то он все берет на себя, обычно цвет передается в шейдер через переменную. Если включен цвет вертексов - он будет использоваться. Установлен материал - его цвет. И наконец если ничего не установлено, то будет использоваться "регулярный" (текущий) цвет - то что задает glColor   
 
Записан
Трикстер
Гость
« Ответ #7 : Январь 10, 2017, 16:48 »

что за объект? насколько сложный? или просто одна сфера?
« Последнее редактирование: Январь 10, 2017, 16:50 от Трикстер » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 22.