Tag: 纹理

你如何在没有抗锯齿的情况下扩展SKSpirteNode?

我试图缩放一个SKSpriteNode对象没有平滑/抗锯齿(我正在使用像素艺术,所以它看起来更好的像素化)。 我需要设置一个属性来执行此操作吗? 这是我用来渲染精灵的代码: SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"objects"]; SKTexture *f1 = [atlas textureNamed:@"hero_1.png"]; SKSpriteNode *hero = [SKSpriteNode spriteNodeWithTexture:f1]; [self addChild: hero]; hero.scale = 6.0f; 图像正确缩放但模糊/平滑。 这是hero_1.png 。

OpenGL ES 1具有不同uv坐标的多纹理

我需要使用多纹理渲染对象,但是两个纹理对于同一个对象具有不同的uv坐标。 一个是法线图,另一个是光线图。 请提供任何有用的材料。

在SpriteKit中预加载纹理

我已经做了一些研究,我似乎无法find任何明确解释如何在animation中预加载单个纹理和纹理的任何内容。 我目前在Assets.xcassets使用Atlas来分组相关的animation图像。 在Atlas里有我的图像是否意味着它们被预装了? 就像单张图片一样,在GameScene之前声明纹理是否合理是这样的: let laserImage = SKTexture(imageNamed: "Sprites/laser.jpg")然后(例如)在我的SKSpriteNode子类中,我可以通过laserImage通过? 我最终想知道是否有一个明确的方式去做这个,或者如果我应该在GameScene之前将每个纹理存储为一个常量。 任何有关正确(而且最有效)的方式的build议都是很好的。

在SceneKit中使用MPMoviePlayerController作为纹理

我在scenekit中创build了一个多维数据集,并试图使用一个MPMoviePlayerController的实例作为它的材质。 这种方法虽然不错,但是效果不是很好:video看起来非常跳跃,就像在video帧之间跳转一样(基本上是从头到尾重放帧)。 声音是好的。 我做了一个简短的截图发生了什么,我想这是显而易见的video: Youtube的video 这是处理映射到多维数据集和创build播放器的代码: var moviePlayer: MPMoviePlayerController? func startPlayingVideo(){ let mainBundle = NSBundle.mainBundle() let url = mainBundle.URLForResource("Sample", withExtension: "m4v") moviePlayer = MPMoviePlayerController(contentURL: url) if let player = moviePlayer{ /* Listen for the notification that the movie player sends us whenever it finishes playing */ NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoHasFinishedPlaying:", name: MPMoviePlayerPlaybackDidFinishNotification, object: nil) println("Successfully instantiated […]

CG中的纹理线

我正在为iOS的绘图应用程序工作。 在这个应用程序中,我需要绘制质感的线条。 对于这个我正在使用这种方法 。但是质地太小而不是形状。 我想知道我做错了什么,我该如何解决它。 这是我更新的代码 – CGPoint mid1 = midPoint(previousPoint1, previousPoint2); CGPoint mid2 = midPoint(currentPoint, previousPoint1); [curImage drawAtPoint:CGPointMake(0, 0)]; CGContextRef context = UIGraphicsGetCurrentContext(); [self.layer renderInContext:context]; CGContextMoveToPoint(context, mid1.x, mid1.y); CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y); CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineJoin(context, kCGLineJoinRound); CGContextSetLineWidth(context, self.lineWidth); //trans layer CGContextBeginTransparencyLayer(context, nil);// CGRect rect=CGContextGetPathBoundingBox (context);// CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);// //trans layer end CGContextSetShouldAntialias(context, YES); […]

在iOS上的CVOpenGLESTextureCache vs glTexSubImage2D

我的OpenGL应用程序使用OpenGL来全屏渲染纹理,并定期更新其中的一部分。 到目前为止,我一直在使用glTexImage2D推我的初始纹理,然后我用glTexSubImage2D更新脏区域。 要做到这一点,我使用单缓冲。 这很好。 我已经看到,可能有另一种方法来使用CVOpenGLESTextureCache实现相同的事情。 保存在纹理caching中的纹理引用一个CVPixelBuffer。 我想知道是否可以改变这些caching的纹理。 我试图为每个更新重新创build一个CVOpenGLESTexture,但这大大降低了我的帧速率(不要惊讶,因为我没有指定脏区域)。 也许我完全误解了这个纹理caching的用例。 有人可以提供一些指导? 更新:这是我正在使用的代码。 第一次更新工作正常。 后续更新不(没有发生)。 每次更新之间我修改原始位图。 if (firstUpdate) { CVReturn err = CVOpenGLESTextureCacheCreate(kCFAllocatorDefault, NULL, ctx, NULL, &texCache); CVPixelBufferRef pixelBuffer; CVPixelBufferCreateWithBytes(NULL, width_, height_, kCVPixelFormatType_32BGRA, bitmap, width_*4, NULL, 0, NULL, &pixelBuffer); CVPixelBufferLockBaseAddress(pixelBuffer, 0); CVOpenGLESTextureRef texture = NULL; CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, texCache, pixelBuffer, NULL, GL_TEXTURE_2D, GL_RGBA, width_, height_, GL_BGRA, GL_UNSIGNED_BYTE, 0, &texture); […]

纹理采样坐标渲染雪碧

假设我们有一个纹理(在这种情况下是8×8像素)我们想用作精灵表。 其中一个子图像(sprite)是纹理内的4×3的子区域,就像在这个图像中一样: (显示四angular的标准化纹理坐标) 现在,基本上有两种方法将纹理坐标分配给4像素x 3像素大小的四边形,以便它有效地成为我们正在寻找的精灵; 首先也是最直接的是在分区域的angular落采样纹理: // Texture coordinates GLfloat sMin = (xIndex0 ) / imageWidth; GLfloat sMax = (xIndex0 + subregionWidth ) / imageWidth; GLfloat tMin = (yIndex0 ) / imageHeight; GLfloat tMax = (yIndex0 + subregionHeight) / imageHeight; 虽然当第一次实施这种方法,约。 2010年,我意识到这些精灵看起来有点“扭曲”了。 经过一番search之后,我在cocos2d论坛上发现了一篇文章,解释渲染精灵时用于采样纹理的“正确方法”是: // Texture coordinates GLfloat sMin = (xIndex0 + 0.5) / imageWidth; GLfloat […]

我如何对这个OpenGL ES纹理应用正确的视angular?

我想描述我的目标,并得到一些build议解决scheme的反馈。 我对OpenGL ES(或者OpenGL ES)相当陌生,所以请温和。 我也想提一下,这个平台是iPad(iOS),它是属于它的限制。 目标:让用户以正确的视angular(或至less可调整的透视图)正确地绘制纹理的顶点。 为了解释我的意思,请考虑下面的例子。 比方说,我们有一个在它前面有一个相应的草坪的房子的照片。 现在,我想铺平(用户)指定的path与瓷砖(纹理),使透视看起来是正确的。 如果视图恰好是正交的,那么这些图块将是完全正方形的,这在图像中具有某种深度时是不现实的。 现在,一种方法是在OpenGL ES上设置一个截然不同的视angular。 然后把一架飞机(如下图),并把它的图像纹理为初学者。 现在,如你所期望的,从上面的图像看,图像将被扭曲。 但是,这很好,因为如果我们将飞机向后倾斜(以便完美地适应显示器的边界),图像将呈现方形。 如果用户现在定义了要铺设的区域,我们可以将这些点放在与倾斜平面相同的angular度,然后在其中放置一个带有正方形瓷砖的纹理,并以透视的方式出现。 如果我们的倾斜angular度不正确,用户可以手动调整,那么上图中的平面的angular度angular度将会被调整,并且平面会以不同的方式倾斜以适合显示器。 然后瓷砖纹理将从不同的angular度出现。 这是一个可行的方法,还是有其他更好的方法来做到这一点? 我认为这是一个丑陋的黑客,可能与我有限的3D编程技能有关。

如何在iPhone上的OpenGL ES 2.0中混合两种纹理与不同的坐标?

当两个纹理覆盖相同的矩形时,我可以在片段着色器中混合两种具有不同混合模式的纹理。 但现在我的问题是,一个纹理是一个没有旋转的普通矩形,另一个纹理是另一个旋转/缩放和平移的矩形。 如何以我想要的方式合并这些纹理? (图片中) 我知道如何做到这一点… 但不知道如何做到这一点… 为了在一个矩形(第一个图像)中混合纹理,我使用了下面的代码。 Objective C代码… – (void) display { [EAGLContext setCurrentContext:context]; glBindFramebuffer(GL_FRAMEBUFFER, targetFBO); glUseProgram(program); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, textureTop); glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, textureBot); glUniform1i(inputTextureTop, 2); glUniform1i(inputTextureBot, 3); glUniform1f(alphaTop, alpha); glEnable (GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glVertexAttribPointer(position, 2, GL_FLOAT, 0, 0, imageVertices); glVertexAttribPointer(inputTextureCoordinate, 2, GL_FLOAT, 0, 0, textureCoordinates); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glBindRenderbuffer(GL_RENDERBUFFER, […]

用glReadPixels读纹理字节?

我想将原始纹理数据转储到磁盘(稍后回读),我不确定glReadPixel会从当前绑定的纹理中读取。 我怎样才能从我的纹理读取缓冲区?