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和反轉顏色通道。 –