使用OpenGLES的抗锯齿去除我的绳索的锯齿状边缘

sha*_*yed 5 iphone cocos2d-iphone

我已经实现了绳索,其中我使用Revolute关节连接动态b2bodied,现在我成功创建了这条绳索,但我的绳索看起来不是很平滑,我希望它们像丝带一样光滑.任何有这个想法的人!我发现它可以通过使用抗锯齿的openGLES实现,但仍然没有想到如何实现这一点......任何类型的帮助将不胜感激.

我的绳子是多边形的动态体,这种方式b2BodyDef bodyDef; bodyDef.type = b2_dynamicBody; bodyDef.position = currentPos;

b2PolygonShape polygonShape;
polygonShape.SetAsBox(linkWidth,linkHeight);

b2FixtureDef fixtureDef;
fixtureDef.density =20.0;

fixtureDef.shape = &polygonShape;

b2Body* link = world->CreateBody( &bodyDef );
link->CreateFixture( &fixtureDef );
Run Code Online (Sandbox Code Playgroud)

Revolute Joint:

b2RevoluteJointDef revoluteJointDef;
revoluteJointDef.localAnchorA.Set( 0,  linkHeight);
revoluteJointDef.localAnchorB.Set( 0, -linkHeight);            
revoluteJointDef.bodyA = link;
revoluteJointDef.bodyB = lastLink;
world->CreateJoint( &revoluteJointDef );
Run Code Online (Sandbox Code Playgroud)

请帮忙 .

我希望我的绳索像最右边的图像一样平滑

图1 图2

我的输出看起来像这样 在此输入图像描述

Lea*_*s2D 4

如果您想消除纹理的边缘,则必须启用多重采样。多重采样将作用于整个屏幕,启用它会带来性能损失,在旧设备(iPhone 3GS)上最严重。

找到AppDelegate中实例化CCGLView的行,启用多重采样,并将采样数设置为2或4。

CCGLView *glView = [CCGLView viewWithFrame:[window bounds]
pixelFormat:kEAGLColorFormatRGBA8    // <-- use whichever is your default
depthFormat:GL_DEPTH_COMPONENT24_OES // <-- use whichever is your default
preserveBackbuffer:NO
sharegroup:nil
multiSampling:YES    // <-- enable
numberOfSamples:4];  // <-- set to 2 or 4
Run Code Online (Sandbox Code Playgroud)

需要记住的一件事是:在 Retina 设备上,由于显示屏的高分辨率,您将无法看到锯齿状边缘。在 2D 应用程序中的 Retina 设备上进行多重采样可能会浪费性能,并且很难提高图像质量。这给你留下了另一个选择:考虑只支持 Retina 设备,或者干脆忽略非 Retina 设备上存在的问题,因为它们无论如何都会消失。

顺便说一句,CCTexture2D 锯齿和抗锯齿方法的命名很混乱,它们不执行全屏或纹理边缘锯齿或抗锯齿。它们在线性(“抗锯齿”,模糊)和最近(“锯齿”,无过滤)之间更改纹理的过滤模式。

效果是纹理内的像素要么被线性过滤,从而单个像素颜色逐渐改变,而最近过滤不执行此类过滤。最近过滤最常用于像素艺术和图块贴图图块纹理。两者仅更改纹理像素的过滤模式,而不更改其边缘。为此,您需要多重采样。