我已经实现了绳索,其中我使用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 );
Revolute Joint:
b2RevoluteJointDef revoluteJointDef;
revoluteJointDef.localAnchorA.Set( 0, linkHeight);
revoluteJointDef.localAnchorB.Set( 0, -linkHeight);
revoluteJointDef.bodyA = link;
revoluteJointDef.bodyB = lastLink;
world->CreateJoint( &revoluteJointDef );
请帮忙。
我希望我的绳索像最右边的图像一样平滑
我的输出看起来像这样
答案 0 :(得分: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别名和抗锯齿方法容易混淆,它们不执行全屏或纹理边缘别名或抗锯齿。它们在线性(“抗锯齿”,模糊)和最近(“别名”,无过滤)之间更改纹理的过滤模式。
效果是纹理内的像素是线性滤波的,因此各个像素颜色逐渐变化,而最近的滤波不执行这种滤波。像素艺术和tilemap tileset纹理最常需要最近的滤镜。两者都只改变纹理像素的滤波模式而不改变它们的边缘。为此,您需要进行多重采样。