5

我已经实现了绳索,其中我使用旋转关节连接动态 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 );

旋转接头:

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

请帮忙 。

我希望我的绳索更顺畅,就像最右边的图片一样

图1 图 2

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

4

1 回答 1

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

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

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

效果是纹理内的像素要么被线性过滤,因此单个像素颜色逐渐变化,而最近过滤不执行此类过滤。像素艺术和瓦片地图瓦片集纹理最常需要最近过滤。两者都只改变纹理像素的过滤模式,而不是它们的边缘。为此,您需要多重采样。

于 2013-07-11T11:33:22.210 回答