Как напрямую отправлять цвета в шейдер OpenGL - PullRequest
0 голосов
/ 26 марта 2019

Я начал разработку игр OpenGL около 5 месяцев назад. Когда я только начал разработку игр, я написал учебник по игровому движку. Но теперь, спустя несколько месяцев, я бы хотел отредактировать одну из частей openGL на этом игровом движке, но я понятия не имею, как.

Я бы не хотел использовать текстурные координаты и соответствующее изображение, а просто использовать RGB-коллекторы, которые я анализирую в шейдере OpenGL.

Код, который я использую для визуализации объектов:

public void render(Map<TexturedModel, List<Entity>> entities){
    for(TexturedModel model:entities.keySet()){
        prepareTexturedModel(model);
        List<Entity> batch = entities.get(model);
        for(Entity entity:batch){
            prepareInstance(entity);
            GL11.glDrawElements(GL11.GL_TRIANGLES, model.getRawModel().getVertexCount(), GL11.GL_UNSIGNED_INT, 0);
        }
        unbindTexturedModel();
    }
}

1 Ответ

1 голос
/ 26 марта 2019

Если у вас есть прямой доступ к объекту шейдера (который должен быть примитивным целым числом), вы можете сделать это:

в шейдере фрагмент , который, вероятно, будет заканчиваться на .frag или .fsh:

uniform vec3 myColor;
out vec4 fragColor;
void main(){
    fragColor=vec4(myColor,1.0);
}

В Java-коде для каждого кадра ПОСЛЕ того, как вы позвонили glUseProgram(shaderID), вам нужно вызвать glUniform3f(glGetUniformLocation(shaderID,"myColor"),red,green,blue);, где red, green и blue - это числа с плавающей точкой в ​​диапазоне [0,1]. Если у вас нет доступа к целочисленному идентификатору шейдера, то это действительно зависит от того, какой игровой движок вы используете.

...