如何直接将颜色发送到 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);
,其中 red
、green
和 blue
是 [0,1]
范围内的浮点数。如果您无权访问整数着色器 ID,那么这实际上取决于您使用的游戏引擎。
大约 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);
,其中 red
、green
和 blue
是 [0,1]
范围内的浮点数。如果您无权访问整数着色器 ID,那么这实际上取决于您使用的游戏引擎。