Articles of 裁剪

Moai:将图像剪裁成多边形

我正在使用Moai SDK 。 我有一个图像和一些随机的凸二维多边形。 我只想显示这些多边形内的图像的部分。 这是一个示例图像: 同样的,只显示在多边形的位置: 我怎样才能做到这一点?

3D中的三角平面裁剪是否总是产生一个三角形?

当你在飞机上剪下一个三角形时,你总会得到一个三角形吗? 在这种情况下,有没有三角形在飞机上被剪掉?

即使closures了EarlyZ,XNA DepthBias也会提高性能。 为什么?

我的3D场景由三个主要的多边形组成: 第一个和第二个多边形彼此重叠(具有相同的世界matrix并且使用相同的几何形状),第三个多边形垂直于前两个,并且位于离它们几米的位置。 所有三个多边形都使用向前着色器渲染,使用clip()函数执行alpha截断。 正如我在Radeon的文章中读到的 ,这导致了EarlyZtesting被closures,我的简单的主观testingcertificate了这一点:当第二个多边形的纹理是空的时候,我有大约480 FPS(导致在每个像素中调用剪辑)并且降低到415当它有一个丰富多彩的截面广场(见图片)。 我试图确保Ztesting发生:我试图先绘制第二个多边形,同时将它“上升”到地面上(多边形#2),从而使它靠近相机 – 它什么都不改变。 我也尝试从着色器中删除clip()函数,并按照预期接收FPS提升。 但显然这产生了不正确的结果,因为第二个多边形下面的地面从来没有被绘制过,因为它总是失败了Z检验。 所以我决定尝试使用DepthBias来绘制两个多边形,并且没有深度。 这是MSDN写到的: 设置或检索多边形的深度偏差,这是适用于基元深度的偏差量,以减轻相似深度基元的深度testing问题。 默认值是0。 属性值应用于基元深度的偏差量。 取值范围是0〜16(含)。 当我终于设法使其工作,我惊奇地得到了性能提升。 现在,我甚至设法将FPS应用到第三个多边形! 这是我如何使他们获得最佳performance: GraphicsDevice.RasterizerState = CCWLayer1; DrawSecond(gameTime); GraphicsDevice.RasterizerState = CCWLayer2; DrawThird(gameTime); GraphicsDevice.RasterizerState = CCWLayer3; DrawFirst(gameTime); public RasterizerState CCWLayer1 = new RasterizerState() { CullMode = CullMode.CullCounterClockwiseFace, DepthBias = 0.005f, }; public RasterizerState CCWLayer2 = new RasterizerState() { CullMode = […]

在XNA中用模板裁剪多边形(不使用spritebatch)

问题…我正在绘制多边形,在这种情况下框,我想剪辑与其父母的客户区的儿童多边形。 // Class Region public void Render(GraphicsDevice Device, Camera Camera) { int StencilLevel = 0; Device.Clear( ClearOptions.Stencil, Vector4.Zero, 0, StencilLevel ); Render( Device, Camera, StencilLevel ); } private void Render(GraphicsDevice Device, Camera Camera, int StencilLevel) { Device.SamplerStates[0] = this.SamplerState; Device.Textures[0] = this.Texture; Device.RasterizerState = RasterizerState.CullNone; Device.BlendState = BlendState.AlphaBlend; Device.DepthStencilState = DepthStencilState.Default; Effect.Prepare(this, Camera ); Device.DepthStencilState […]

查找2个多边形是否使用剪切库相交

在意识到我的代码在检查多边形重叠方面效率很低之后,我已经转向了一个提到的库Clipper,但是发现很难知道这个操作使用了它。 我使用统一Vector2 []为我的形状描述: //Square Vector2[] square = new Vector2[] { new Vector2(0,0), new Vector2(1,0), new Vector2(1,1), new Vector2(0,1) }; 我想能够做上面的两个形状的布尔比较。 如果有人知道Clipper,我可以用什么方法来做这个检查? 我最近尝试了以下方法,但即使testing形状完全相互分离,结果也是如此: public bool CheckForOverLaps(Vector2[] shape1, Vector2[] shape2) { List<IntPoint> shape1IntPoints = Vector2ArrayToListIntPoint (shape1); List<IntPoint> shape2IntPoints = Vector2ArrayToListIntPoint (shape2); List<List<IntPoint>> solution = new List<List<IntPoint>> (); c.AddPath (shape1IntPoints, PolyType.ptSubject, true); c.AddPath (shape2IntPoints, PolyType.ptClip, true); c.Execute (ClipType.ctIntersection, […]

如何使用深度缓冲区比较使用OpenGL进行贴花剪切?

基本上我已经在各种平坦的表面上绘制贴花,而且效果很好。 一旦贴花接近表面的边缘,它自然不会被剪切。 有没有办法通过比较存储深度缓冲区中的值与要写入的贴花像素的深度值(Z)来添加简单裁剪? 如果将要写入的深度值大约相同(在一个范围内),则贴花像素被绘制,否则被丢弃。 贴花不会写入深度缓冲区本身。 示例场景:

GL.Scissor不按预期工作

我有一些在应用程序中渲染button的代码,如果它比button本身更宽,我想剪切文本。 这里有一些代码来描述我在做什么: GL.Enable(EnableCap.ScissorTest); GL.Scissor(Frame.X, ScreenSize.Y – Frame.Y – Frame.Height, Frame.Width, Frame.Height); RenderRect(Frame, Color.Red); RenderText(Text, Color.White); GL.Disable(EnableCap.ScissorTest); 我正在使用OpenTK和QuickFont作为文本渲染库。 主要的问题是,矩形会像应该剪切一样,但是如果太长,文本会在剪刀区域之外渲染。 我想知道QuickFont在文本渲染过程中究竟做了什么,但是除了一些可能干扰的GL.PushMatrix和GL.LoadIdentity调用之外,我找不到任何东西。 这些function是否重置了剪刀testing? GL.PushMatrix调用是否可以在剪裁矩形之外进行渲染?

益智游戏:在数字上剪切非凸多边形

我在SVG文件中有一个原始graphics。 我需要在零件上随机分割,下面是一个例子: 我有一个想法,用于划分Voronoi图(财富的algorithm)。 然后,我可以改变数字的交集线给他们的曲率? 可以获得识别每个形状的path? 要创建一个游戏,我将使用cocos2d-x。