Tag: 着色器

iOS版。 OpenGL的。 几个观点同时

几天之前,我问了两个曲线之间的梯度填充空间 。 由于我已经改变了很多在我的代码 – 现在我使用着色器。 结果几乎是我需要的。 但! 再次我有一个控制器中同时使用几个OpenGL视图的问题,但他们之间必须是绝对独立的。 所以,感谢来自raywenderlich.com的令人难以置信的教程和来自bradley的代码示例,我有下一个情况: SoundWaveView.swift类的两个自定义对象(从Bradley的OpenGLView.swift改进而来); openglView对象的顶点/片段着色器; 控制器,我创build并添加两个SoundWaveView对象(具有相同的上下文!!!!!): C override func viewDidLoad() { super.viewDidLoad() let context = EAGLContext(API: EAGLRenderingAPI.OpenGLES2) let viewPos1: CGRect = CGRectMake(0, 150, UIScreen.mainScreen().bounds.size.width, 150); let view1 = SoundWaveView(frame: viewPos1, fileName: "Personal Jesus", fileExtention: "mp3", c: context) view1.backgroundColor = UIColor.grayColor() self.view.addSubview(view1) let viewPos2: CGRect = CGRectMake(0, 350, UIScreen.mainScreen().bounds.size.width, 150); […]

如何在顶点/片段着色器中使用3×3 2D变换(金属)

我有一个简单的任务,但显然我还是不明白在着色器中的投影是如何工作的。 我需要在纹理四边形(2个三angular形)上进行2D透视变换,但在视觉上它看起来不正确(例如,梯形比CPU版本中的梯形略高或更拉伸)。 我有这个结构: struct VertexInOut { float4 position [[position]]; float3 warp0; float3 warp1; float3 warp2; float3 warp3; }; 在顶点着色器中,我做了类似的事情( texCoords是四angular的像素坐标,单应texCoords是以像素坐标计算的): v.warp0 = texCoords[vid] * homographies[0]; 然后在像这样的片段着色器中: return intensity.sample(s, inFrag.warp0.xy / inFrag.warp0.z); 结果不是我所期望的。 我花了几个小时,但我无法弄清楚。 通风 更新: 这些是CPU的代码和结果(又名预期结果 ): // _image contains the original image cv::Matx33d h(1.03140473, 0.0778113901, 0.000169219566, 0.0342947133, 1.06025684, 0.000459250761, -0.0364957005, -38.3375587, 0.818259298); cv::Mat dest(_image.size(), […]

用于几何入口点的SceneKit着色器修改器适用于iOS,但不适用于OS X

我正在做一个SceneKit着色器修改器(用于几何入口点)的早期阶段,它根据高度贴图纹理来移动平面的几何。 计划是用它来创造地形。 在iOS中(编辑:iOS模拟器),着色器按照原样工作,但是将此警告打印到控制台: SceneKit:错误,无代码修饰无效 但是,当为OS X构build时,着色器会产生一个致命错误,而地形几何体只会显示为粉红色的矩形。 这是几何着色器修改器: uniform sampler2D displacementMap; const float intensity = 7.5; # pragma body vec4 displace = texture2D(displacementMap, _geometry.texcoords[0]); _geometry.position.z += displace.r * intensity; 这就是着色器如何连接到几何。 terrainScene是高度贴图,它位于着色器修改器中的漫reflection内容和自定义displacementMap贴图采样器值中: //displacement shader let mat = SCNMaterial() mat.diffuse.contents = terrainScene var displacementShader: String? guard let path = NSBundle.mainBundle().pathForResource("DisplaceGeometry", ofType: "shader") else {return} do { displacementShader = […]

OpenGL ES 2.0多个着色器程序 – 纹理渲染不再工作

我的应用程序绘制了点精灵和标准四方纹理的混合。 直到最近,我还是使用了一个着色器程序 – 但片段着色器中的一个分支(决定是否使用点精灵坐标/颜色)严重限制了我的渲染性能。 我的片段着色器最初看起来像这样: precision highp float; uniform sampler2D u_textureSprite; uniform bool u_isSprite; varying vec4 v_color; varying vec2 v_textureCoord; void main() { vec4 textureColor = texture2D(u_textureSprite, u_isSprite ? gl_PointCoord : v_textureCoord); if (u_isSprite) { gl_FragColor = v_color * textureColor; } else { gl_FragColor = textureColor; } } 在OpenGL ES编程指南中读取Apple的build议使得使用多个着色器程序听起来像是一件容易的事情…只需创build另一个正常的程序,并在相关绘制代码之前调用glUseProgram()。 但是,由于这样做,我不能让纹理渲染工作。 两个新的片段着色器是: pointSprite.fsh: precision highp […]

渲染一个SCNGeometry作为一个线框

我在iOS上使用SceneKit,我有一个我想渲染为线框的几何。 所以基本上我只想绘制线条,所以没有纹理。 我想通过使用SCNMaterial的shaderModifiers属性来实现这一点。 着色器修改器的示例: material.shaderModifiers = [ SCNShaderModifierEntryPointFragment: "_output.color.rgb = vec3(1.0) – _output.color.rgb;" ] 这个例子显然简单地反转了输出的颜色。 我不知道这个“GLSL”语言,我不得不使用shader片段。 任何人都可以告诉我,我应该使用什么代码作为着色器片段,只在边缘附近绘制,使几何看起来像一个线框? 或者也许有一个完整的方法来渲染一个几何线框。 我很想听到它。

由于着色器未编译,Unity应用程序在iOS上崩溃

我正在尝试为iOS构build我的Unity 5.4.2f2应用程序。 这是没有编译错误。 但是,当我尝试使用Xcode 8.0运行应用程序,它立即崩溃,debugging器报告以下错误。 Initialize engine version: 5.4.2f2 (b7e030c65c9b) ——– Shader compilation failed #version 100 #extension GL_EXT_frag_depth : enable precision highp float; uniform highp vec4 _ProjectionParams; uniform highp vec4 _ZBufferParams; uniform highp mat4 unity_CameraToWorld; uniform highp mat4 _NonJitteredVP; uniform highp mat4 _PreviousVP; uniform highp sampler2D _CameraDepthTexture; varying highp vec2 xlv_TEXCOORD0; varying highp vec3 xlv_TEXCOORD1; […]

使用蒙版获取图像像素

所以我有一些原始的形象。 我需要使用特定的蒙版来显示这个图像的一部分。 蒙版不是矩形或形状。 它包含不同的多边形和形状。 有没有任何方法或教程如何实现? 还是从哪里开始做到这一点? 我应该写一些小的着色器或比较图像的适当像素或类似的东西? 对任何build议感到高兴。 谢谢

iOS上的视网膜屏幕的着色器优化

我做了一个使用很多广告牌的3D iphone应用程序。 我的帧缓冲区是视网膜屏幕上的两倍,因为我想提高他们在iPhone 4的质量。问题是片段着色器消耗更多的时间由于帧缓冲区的大小。 有没有一种方法来pipe理视网膜屏幕和高清纹理,而不增加阴影的精度?

最有效的多纹理方式 – iOS,OpenGL ES2,优化

我试图find在iOS上的OpenGL ES2中处理多纹理的最有效的方法。 “高效率”是指即使在较老的iOS设备(iPhone 4及更高版本)上也是最快的渲染 – 同时也是平衡方便。 我考虑过(并尝试过)几种不同的方法。 但遇到了一些问题和疑问。 方法1 – 我的基础和正常值是没有ALPHA rgb。 对于这些对象,我不需要透明度。 我的发射和镜面reflection信息只有一个频道。 为了减lesstexture2D()调用我想我可以存储发射作为基地的alpha通道,镜面作为正常的alpha。 每个人都在他们自己的文件中看起来像这样: 到目前为止,我的问题一直在find一个文件格式,将支持完整的非预乘alpha通道。 PNG只是没有为我工作。 每一个我试图把这个保存为PNG的方法都是将.alg与.rgb保存在一起(通过photoshop),基本上破坏了.rgb。 当我重新加载文件时,任何具有0.0阿尔法的像素都有黑色的rgb。 我在这里发布了这个问题没有任何活动。 我知道这种方法会产生更快的渲染,如果我能find一种方法来保存和加载这个独立的第四频道。 但到目前为止,我还没有能够,只好继续前进。 方法2 – 当没有工作,我转向一个单一的4路纹理,每个象限有不同的地图。 这不会减lesstexture2D()调用,但会减less在着色器中访问的纹理数量。 4路纹理确实需要修改着色器中的纹理坐标。 对于模型的灵活性,我将texcoords放在模型的结构中,并在着色器中修改它们,如下所示: v_fragmentTexCoord0 = a_vertexTexCoord0 * 0.5; v_fragmentTexCoord1 = v_fragmentTexCoord0 + vec2(0.0, 0.5); // illumination frag is up half v_fragmentTexCoord2 = v_fragmentTexCoord0 + vec2(0.5, 0.5); // shininess frag […]

OpenGL ES着色器和64位iPhone 5S

我刚刚开始在OpenGL ES应用程序上testingiPhone 5S和64位体系结构。 我看到的问题是(CGFloat)值到达着色器时是错误的。 当我debugging着色器时,我传入0.8,并更改为-1.58819e-23。 我正在使用glUniform4fv()传入值。 我需要使用不同的数据types还是? 或不同的方法来传递值? 当我在32bit上testing的时候,这个值很好 CGFloat brushColor[4]; brushColor[0] = 0.8; brushColor[1] = 0.1; brushColor[2] = 0.1; brushColor[3] = 0.3; glUniform4fv(program[PROGRAM_POINT].uniform[UNIFORM_VERTEX_COLOR], 1, brushColor); (你们有些人可能会注意到这是来自GLPaint演示…) 谢谢, 奥斯汀