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

标签 java opengl lwjgl

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

最佳答案

如果您可以直接访问着色器对象(应该是一个原始整数),您可以执行以下操作:

片段着色器中,可能以.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] 范围内的 float 。如果您无权访问整数着色器 ID,那么这实际上取决于您使用的游戏引擎。

关于java - 如何直接将颜色发送到OpenGL着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55361114/

相关文章:

java - Linux Java 开发人员可以在同一个包中创建名称仅大小写不同的类吗?

java - JAR 导出后无法加载文本文件

java - 为什么我的光照计算会导致颜色跳到黑色?

java - Android、Butterknife、BindView、最终

java - 这个 lambda 表达式是什么意思?

c++ - 使用 glut 和 std::string 时 main() 之前的段错误?

java - 用于流体模拟的双边滤波器

java - 报告了错误的 OpenGL 版本

java - 检测 JAVA 的整个单词

opengl - Haskell OpenGL 中的 JuicyPixels 纹理加载?