3
A
回答
3
如果您想要将精灵中所有形状的颜色更改为白色,那么唯一的办法就是使用像素着色器并设置它们不是黑色的所有碎片(我假定黑色渲染为在你的游戏中进行transperant)到白色。类似的东西:
varying vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
void main() {
vec4 color=v_color * texture2D(u_texture, v_texCoords);
if(color.r!=0 && color.g!=0 && color.b!=0){
gl_FragColor=vec4(1,1,1,1);
}
else{
gl_FragColor=color;
}
}
如果你是不幸的,你使用OpenGL 1.0(固定管道),我建议你改用GLES 2.0,现在你是一个beginer.Fixed管道是从90年代,我们是在2013年!
的代码:
初始化:
ShaderProgram.pedantic = false;
ShaderProgram defaultShader=SpriteBatch.createDefaultShader();
ShaderProgram shaderWhiteTexture=new ShaderProgram(Gdx.files.internal("vertexShader.vs").readString(),Gdx.files.internal("fragShader.fs").readString());
渲染:
//Render the textures with the normal colors
spriteBatch.begin();
spriteBatch.draw(sprite1,sprite2,sprite3...);//or whatever code u use to render them
spriteBatch.end();
//Render the textures with the shader
spriteBatch.setShader(shaderWhiteTexture);
spriteBatch.begin();
spriteBatch.draw(sprite4,sprite5,sprite6...);//or whatever code u use to render them
spriteBatch.end();
spriteBatch.setShader(defaultShader);
着色:
//vertexShader.vs:
attribute highp vec4 a_position;
attribute highp vec4 a_color;
attribute highp vec2 a_texCoord0;
uniform mat4 u_projTrans;
varying highp vec4 v_color;
varying highp vec2 v_texCoords;
void main() {
v_color = a_color;
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position ;
}
//fragShader.fs:
varying highp vec4 v_color;
varying highp vec2 v_texCoords;
uniform sampler2D u_texture;
void main() {
gl_FragColor = vec4(0.0);
highp vec4 color = texture2D(u_texture, v_texCoords);
if(color.a > 0.0) {
gl_FragColor = vec4(1.0,0,0,1.0);
}
}
编着问老板:现在与透明质感
什么已被添加?:
1 . the highp precision to variables
2 . the fragmentShader file Main() fonction edited
-2
1
这将无法正常工作。白色不影响较深的颜色(阅读:每隔一种颜色)。
这实际上是精灵默认,所以它完全按照您创建它的图像呈现(这就是您没有看到更改的原因)。如果您要使用Sprite Color来影响在运行时呈现精灵的方式,请考虑将其变为白色,然后将其更改为任何其他颜色。
1
你可以没有任何OpenGL2功能或着色器,或者通过使用模板缓存精灵或其他任何疯狂的事情的预whiteouted副本实现这一目标。
首先,您将精灵绘制到模具缓冲区,然后在模具上绘制一个适当颜色的填充矩形,它将只绘制模具的位置,留下彩色轮廓。
这里是如何工作的:
//Turn off drawing to the color buffers
Gdx.gl.glColorMask(false, false, false, false);
//Enable drawing to the stencil buffer
Gdx.gl.glEnable(GL10.GL_STENCIL_TEST);
//Set the stencil mask you want to use, mask 1 is as good as any other
Gdx.gl.glStencilMask(1);
//When drawing, Always attempt to draw a 1 into mask 1 for every pixel
Gdx.gl.glStencilFunc(GL10.GL_ALWAYS, 1, 1);
//When drawing, replace whatever is currently in the mask
Gdx.gl.glStencilOp(GL10.GL_REPLACE, GL10.GL_REPLACE, GL10.GL_REPLACE);
//unlike the name would have you believe, this call actually sets the 'color'
//to clear the stencil with and doesnt actually clear the stencil. We want to
//set the mask to all 0's
Gdx.gl.glClearStencil(0);
//This then clears the stencil buffer with all 0's
Gdx.gl.glClear(GL10.GL_STENCIL_BUFFER_BIT);
//A sprite typically has transparent pixels, and we don't want to draw them
//into the mask, so filter out pixels with an alpha less than 0.5f. Only
//those greater are drawn into the stencil buffer
Gdx.gl.glEnable(GL10.GL_ALPHA_TEST);
Gdx.gl10.glAlphaFunc(GL10.GL_GREATER, 0.5f);
//Draw the sprite into the stencil buffer
spriteBatch.begin();
spriteBatch.draw(...)
spriteBatch.end();
//Finished filtering the alpha channel
Gdx.gl.glDisable(GL10.GL_ALPHA_TEST);
//Now that we want to use the mask instead of drawing into it so we turn
//drawing to the color buffer back on
Gdx.gl.glColorMask(true, true, true, true);
//Set us up to only draw where the stencil buffer equals 1
Gdx.gl.glStencilFunc(GL10.GL_EQUAL, 1, 1);
//And since drawing into the mask is actually still on, we set this to keep the
//values in the stencil buffer, and not overwrite them
Gdx.gl.glStencilOp(GL10.GL_KEEP, GL10.GL_KEEP, GL10.GL_KEEP);
//Draw a coloured rectangle over the mask, and it will only draw pixels where the
//stencil buffer has been set giving you a silhoutte of your sprite! You can also
//use a transparent rect and draw over a normal render of your sprite to fade the
//sprite up into whatever color you want
shapeRenderer.begin(ShapeType.Fill);
shapeRenderer.rect(...);
shapeRenderer.end();
//Done with the stencil
Gdx.gl.glDisable(GL10.GL_STENCIL_TEST);
相关问题
- 1. UINavigationBarButtons将其颜色更改为白色
- 2. 将链接的默认颜色从蓝色更改为白色
- 3. 将jQuery图标颜色更改为白色而不是灰色
- 4. 如何在XNA中将精灵着色为白色?
- 5. 检测精灵的颜色
- 6. 使用HSV颜色空间更改白色和黑色颜色
- 7. 将ImageView更改为黑色和白色
- 8. 如何将黑色更改为白色
- 9. 如何在iOS中将UIPickerView文本颜色更改为白色
- 10. 将此文本颜色更改为白色和粗体
- 11. 如何将UIImage中的颜色“白色”更改为透明
- 12. 如何将阴影背景白色更改为其他颜色
- 13. libgdx - 将雪碧颜色更改为白色
- 14. imagesc将背景颜色更改为白色matlab
- 15. 将背景颜色从白色更改为透明
- 16. 在Python中将一系列颜色更改为白色
- 17. 将图像背景颜色更改为白色?
- 18. 将android中XYplot的背景颜色更改为白色?
- 19. 将MDI父级颜色表单重新更改为白色
- 20. 检测精灵的颜色是不是另一个精灵的颜色
- 21. 将颜色更改为TabHost
- 22. 将UINavigationItem颜色更改为黑色
- 23. c#使用foreach循环更改精灵的颜色
- 24. 使用GUI按钮统一更改精灵颜色
- 25. Cocos2D更改精灵中最后一行像素的颜色?
- 26. LibGDX:如何更改单个精灵颜色?
- 27. 菜单更改精灵和颜色点击
- 28. 使用枚举更改精灵的颜色
- 29. 如何将Inkscape默认导出颜色从黄色更改为白色?
- 30. 如何在Delphi中将PNG图像的颜色从白色更改为黑色?
您更希望是这样的:乘0,0,0,1和反转颜色通道。 –