如何直接将颜色发送到 OpenGL 着色器

How to directly send colors to the OpenGL shader

大约 5 个月前我开始了 OpenGL 游戏开发。当我第一次开始游戏开发时,我看了一个关于游戏引擎的教程。但是现在几个月后,我想编辑该游戏引擎上的一个 openGL 部分,但我不知道该怎么做。

我不想使用纹理坐标和相应的图像,而只是使用我解析到 OpenGL 着色器的 RGB 颜色。

我用来渲染实体的代码:

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();
    }
}

如果您可以直接访问着色器对象(应该是原始整数),您可以这样做:

fragment 着色器中,可能以 .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);,其中 redgreenblue[0,1] 范围内的浮点数。如果您无权访问整数着色器 ID,那么这实际上取决于您使用的游戏引擎。