cocos2dx教程 3.8的渲染背景如何透明

08:53:18 UTC
RT,类似这种效果
08:53:50 UTC
03:30:53 UTC
目前我知道在opengl中要用到辉光做法, 先渲染到FBO, 然后做模糊叠加后再渲染出来, 但不知道cocos2dx中有没有相应的封装?
05:21:49 UTC
你说的那是bloom,和自发光还是有区别的。bloom是post process,自发光(emissive)是一种material,对成熟的3d引擎来说就是美术去改一改材质球就可以了。
然而,这2个东西显然cocos都不支持。。。
08:52:23 UTC
哦哦, 谢谢!
01:49:00 UTC
3D 还是老老实实U3D吧。cocos这个3D不能做东西
06:00:15 UTC
这个效果是屏幕后处理。也就是楼上所说的post process。 cocos是可以支持屏幕后处理的,利用RenderTexture或者RenderTarget,将屏幕重绘为一张sprite,然后对重绘的sprite加发光滤镜。
RenderTexture在不同的cocos版本里都有各种bug,难以解决。好在3.12的范例里有RenderTarget的代码,可以以此为基础对3d场景进行屏幕后处理。
11:59:04 UTC
又看了很多文章, 代码, 又对比了以后我也得出了这个结论
11:59:45 UTC
好的, 谢谢, 不过后来已经决定不用cocos做3d的东西了cocos2dx_-lua 创建一个touch的半透明layer_百度经验
&&&&&&互联网cocos2dx_-lua 创建一个touch的半透明layer
百度经验:jingyan.baidu.com--创建一个touch的半透明layer--priority : touch 权限级别,默认为-1024--touchRect: 在touchRect 区域会放行touch事件 若touchRect = nil 则全屏吃touch--touchCallback: 屏蔽层touch 回调function createMaskLayer( priority,touchRect ,touchCallback, layerOpacity,highRect)& & local layer = CCLayer:create()& & layer:setPosition(ccp(0, 0))& & layer:setAnchorPoint(ccp(0, 0))& & layer:setTouchEnabled(true)& & layer:setTouchPriority(priority or -1024)& & layer:registerScriptTouchHandler(function ( eventType,x,y )& & & & if(eventType == "began") then& & & & & & if(touchRect == nil) then& & & & & & & & if(touchCallback ~= nil) then& & & & & & & & & & touchCallback()& & & & & & & & end& & & & & & & & return true& & & & & & else& & & & & & & & if(touchRect:containsPoint(ccp(x,y))) then& & & & & & & & & & return false& & & & & & & & else& & & & & & & & & & if(touchCallback ~= nil) then& & & & & & & & & & & & touchCallback()& & & & & & & & & & end& & & & & & & & & & return true& & & & & & & & end& & & & & & end& & & & end& & & & print(eventType)& & end,false, priority or -1024, true)& & local gw,gh = g_winSize.width, g_winSize.height& & if(touchRect == nil) then& & & & local layerColor = CCLayerColor:create(ccc4(0,0,0,layerOpacity or 150),gw,gh)& & & & layerColor:setPosition(ccp(0,0))& & & & layerColor:setAnchorPoint(ccp(0,0))& & & & layer:addChild(layerColor)& & & & return layer& & else& & & & local ox,oy,ow,oh = touchRect.origin.x, touchRect.origin.y, touchRect.size.width, touchRect.size.height& & & & local layerColor = CCLayerColor:create(ccc4(0, 0, 0, layerOpacity or 150 ), gw, gh)& & & & local clipNode = CCClippingNode:create();& & & & clipNode:setInverted(true)& & & & clipNode:addChild(layerColor)& & & & local stencilNode = CCNode:create()& & & & -- stencilNode:retain()& & & & local node = CCScale9Sprite:create("bg.png");& & & & node:setContentSize(CCSizeMake(ow, oh))& & & & node:setAnchorPoint(ccp(0, 0))& & & & node:setPosition(ccp(ox, oy))& & & & stencilNode:addChild(node)& & & & if(highRect ~= nil) then& & & & & & local highNode = CCScale9Sprite:create("bg.png");& & & & & & highNode:setContentSize(CCSizeMake(highRect.size.width, highRect.size.height))& & & & & & highNode:setAnchorPoint(ccp(0, 0))& & & & & & highNode:setPosition(ccp(highRect.origin.x, highRect.origin.y))& & & & & & stencilNode:addChild(highNode)& & & & end& & & & clipNode:setStencil(stencilNode)& & & & clipNode:setAlphaThreshold(0.5)& & & & layer:addChild(clipNode)& & &end& & return layerend经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。投票(5)已投票(5)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验12000热门杂志第1期你不知道的iPad技巧3833次分享第1期win7电脑那些事6674次分享第2期新人玩转百度经验1425次分享第1期Win8.1实用小技巧2670次分享第1期小白装大神1963次分享◆请扫描分享到朋友圈void update(float dt);
void updateLocation(GLProgram* program, Uniform* uniform);
Sprite* _ballSp;
Vec2 _ballP&2&
Size winSize = Director::getInstance()-&getWinSize();
auto program = GLProgram::createWithFilenames("light.vert", "light.frag");
auto pstate = GLProgramState::create(program);
pstate-&setUniformCallback("ballPosition", CC_CALLBACK_2(HelloWorld::updateLocation, this));
Sprite* water = Sprite::create("HelloWorld.png");
water-&setPosition(Vec2(winSize.width / 2, winSize.height / 2));
water-&setScale(winSize.width / water-&getContentSize().width);
water-&setGLProgramState(pstate);
this-&addChild(water);
_ballSp = Sprite::create();
_ballSp-&setPosition(Vec2(winSize.width / 2, water-&getContentSize().height * (winSize.width / water-&getContentSize().width) / 2 + winSize.height / 2));
this-&addChild(_ballSp);
MoveTo* moveTo = MoveTo::create(10, Vec2(winSize.width / 2, winSize.height / 2 - water-&getContentSize().height*(winSize.width / water-&getContentSize().width) / 2));
_ballSp-&runAction(moveTo);
this-&scheduleUpdate();&3&
void HelloWorld::update(float dt){
_ballPosition = _ballSp-&getPosition();
void HelloWorld::updateLocation(GLProgram* program, Uniform* uniform){
program-&setUniformLocationWith2f(uniform-&location, _ballPosition.x, _ballPosition.y);
}&4&light.vert
attribute vec4 a_
attribute vec2 a_texC
attribute vec4 a_
vec2 ballP
#ifdef GL_ES
varying lowp vec4 v_fragmentC
varying mediump vec2 v_texC
varying lowp float v_
varying vec4 v_fragmentC
varying vec2 v_texC
varying float v_
void main()
gl_Position = CC_MVPMatrix * a_
v_fragmentColor = a_
v_texCoord = a_texC
v_alpha = 0.0;
if(ballPosition.y & a_position.y){
distance = a_position.y - ballPosition.y
v_alpha = distance * 2.0 / a_position.y;
distance = ballPosition.y - a_position.y;
v_alpha = (a_position.y - distance) / a_position.y;
&5&light.frag
#ifdef GL_ES
varying vec4 v_fragmentC
varying vec2 v_texC
varying float v_
void main()
gl_FragColor = v_alpha * v_fragmentColor * texture2D(CC_Texture0, v_texCoord);
基于cocos2d-lua的shader入门玩转
quick-lua shader 的使用
quick lua 使用之通过filter来给精灵描边
(shader的使用)
六 cocos2dx(3.X)中使用shader
基于cocos2dx 2.x做的一些shader效果Demo
cocos2dx搓牌效果的实现
cocos2dx 实现搓牌效果(翻牌效果),包括铺平动画
cocos2dx lua 模糊效果,毛玻璃,背景虚化
cocos2dx-lua中用shader实现遮罩
没有更多推荐了,以最新的Cocos2d-x 3.2 release为例,介绍如何在Cocos2d-x中让程序背景透明。一样,先上图。
修改的东西不多。主要有3步。1.在AndroidManifest.xml中设置Activity背景透明
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
如图,2.在libcocos2dx项目的org.cocos2dx.lib项目中的Cocos2dxActivity.java文件中,修改init()方法。增加如下代码:
this.mGLSurfaceView.setZOrderOnTop(true);
this.mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
this.mGLSurfaceView.setEGLConfigChooser(8,8,8,8,16,0);
删除如下代码(如果不删除的话,顶部会有一个Cocos2dxEditText的白条,Cocos2dxEditText封装了EditText,主要用于TextField,如果程序中有使用到它,那建议更换为EditBox)
如图, 3.在libcocos2dx项目的org.cocos2dx.lib项目中的Cocos2dxRenderer.java文件中,修改onSurfaceCreated()方法。增加如下代码:
pGL10.glDisable(GL10.GL_DITHER);
pGL10.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,
GL10.GL_FASTEST);
pGL10.glClearColor(0,
pGL10.glEnable(GL10.GL_CULL_FACE);
pGL10.glShadeModel(GL10.GL_SMOOTH);
好了,如果有更好的办法欢迎跟帖提出。
将 cocos2dx 背景 设置 成 透明 的方法
cocos2d-x3.2中用shader使图片背景透明
cocos2dx 图片变灰及正常显示实现(lua可以调用)
没有更多推荐了,}

我要回帖

更多关于 cocos2dx渲染 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信