Проблема при рисовании 2-го объекта без текстуры

У меня проблемы с получением второго ящика для рендеринга. Таким образом, у меня есть 1 объект, нарисованный с текстурой, и, похоже, он работает нормально, но у меня есть код, прикрепленный к нему, поэтому, если я удерживаю левую кнопку мыши на нем, второй квадрат появляется справа. Вместо этого 2-й ящик не срабатывает, и текстурированный ящик вообще исчезает.

Я думаю, что им не хватает чего-то с opengl, как что-то, что я должен включить или отключить до или после рисования 1 вещи.

heres мой код инициализации для opengl:

private static void glInit(){
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, Display.getWidth(), Display.getHeight(), 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);
    glClearColor(0, 0, 0, 1);
    glDisable(GL_DEPTH_TEST);

}

heres код, который рисует объекты:

public void render(){
    if(myImage != null){            
        myImage.bind();

        glBegin(GL_QUADS);
        {
           //upper left
            glTexCoord2f(0, 0);
            glVertex2f(x, y);
           //upper right
            glTexCoord2f(1, 0);
            glVertex2f(x + size, y);
           //bottom right
            glTexCoord2f(1, 1);
            glVertex2f(x + size, y + size);
           //bottom left
            glTexCoord2f(0, 1);
            glVertex2f(x, y + size);
        }
        glEnd();

    }

    if(drawChoiceBox){
        glColor3f(1, 0, 0);
        glBegin(GL_QUADS);
        {

            glVertex2f(x + size, y - size);
            glVertex2f(x + size*2, y - size);
            glVertex2f(x + size*2, y + size*2);
            glVertex2f(x + size, y + size*2);
        }
        glEnd();
    }

}

Я протестировал логику получения второго ящика и его работ, поэтому я предполагаю, что это должно быть, мне не хватает чего-то с тем, как opengl рисует вещи. Любая идея, что им не хватает? это ВСЕ код opengl в моем проекте прямо сейчас.

1
nl ja de
Весь код, который у вас есть, эта функция «инициализация» действительно принадлежит к функции рисования. Типичное заблуждение новичков, но, как плоский конечный автомат, мало что можно инициализировать. Вместо этого вы устанавливаете все состояние прямо до того, как оно вам понадобится, когда вам это нужно. Вам нужно texuturing для объекта → glEnable (GL_TEXTURE_ ...). Вам нужно no текстурирование → glDisable (GL_TEXTURE_ ...), а также для любого другого состояния. Единственное, что делает смысл вне кода рисования, - это загрузка данных изображения и геометрии, т. Е. Текстур и объектов буфера.
добавлено автор datenwolf, источник

1 ответы

Не похоже, что вы отключите текстурирование для второго объекта, поэтому его рисуют с помощью текстуры.

Между тем у вашего первого ящика не указано значение glColor (), поэтому после рисования второго блока первый будет красным. Это может привести к его исчезновению, если модуляция красным цветом станет черной, а модуляция включена.

Поэтому вы, вероятно, должны явно включать/отключать текстурирование при рисовании ваших квадратов, а также указывать все измененные атрибуты вершин, такие как цвет.

3
добавлено
а я вижу, поэтому мне нужно включить и отключить текстурирование и glcolor между объектами. EDIT: второй ящик теперь показывает, но я не уверен, как использовать glcolor только для одного объекта, il Google it tho. Большое спасибо.
добавлено автор richi lonsdale, источник
Удивительная помощь JasonD, большое спасибо
добавлено автор richi lonsdale, источник
Да, если ваш код требует, чтобы они были определенными значениями, вы должны установить их - GL в противном случае примет последнее значение, которое оно было дано, оно не возвращается к некоторому состоянию по умолчанию после рисования. (вы, вероятно, просто хотите установить цвет в белый цвет перед первым объектом - glColor3f (1,1,1); )
добавлено автор JasonD, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

pro.graphon (and gamedev)
pro.graphon (and gamedev)
389 участник(ов)

Обсуждаем стандарты консорциума Khronos: OpenGL, OpenCL и пр., предлагаем различные работы, туторы, интересные материалы по этим стандартам (и помечаем их тегами). Правила чата и инфо по системе тегов – /rules. Реклама только по согласованию с @AlexFails.

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async