Tag: glsl

Cocos2d – iPhone上的月食效果

我有一个关于实现像月食一样的效果的问题。 效果应该看起来像在这个gif的第一秒钟。 所以就像一个黑色的影子,越过了这个圈子。 理想的情况是一个函数,我可以通过一个参数的百分比来获得这个数量作为一个阴影在圆上: 我面临的问题是我的背景是一个渐变。 所以不可能有一个黑色的圆圈在月球上移动来获得效果。 我尝试了CCClippingNode东西,但它看起来不好。 此外,边缘上的剪辑总是有点像素化。 我想过使用GLSL着色器来达到这个效果,但是我对GLSL并不是很熟悉,我找不到一个例子。 效果是为iPhone开发的应用程序游戏。 我使用版本3(当前版本)中的cocos2d框架。 有人有一个想法如何得到这个效果? 一个想法,我可以开始search? 先谢谢你

Opengl着色器问题 – 奇怪的光reflection文物

这几天我一直在摔跤。 我想我已经把它缩小到每个顶点切线的问题了,但我不确定解决这个问题的最好方法。 上下文是iPhone应用程序,opengl es2使用我自己的引擎。 我的着色器是使用提供的每个顶点切线创buildTBNmatrix的凹凸贴图(法线贴图)。 顶点着色器将光vector和眼vector转换为切空间,将它们传递给碎片着色器并计算光照。 但是我的前两个testing模型中的一些几何graphics在光照中显示了奇怪的伪像。 在镜面reflection中最容易看到。 在试图debugging这个我已经取代了正常的地图与平坦的普通PNG ..所有像素是128,128,255。 我也硬编码的颜色。 我的第一个模型是一个button形状。 它显示了神器在外圈上的扇形镜面reflection。 重要的是要注意的是,这里的UV贴图方法是“平坦的”,使得垂直于贴图的边基本上在那里纹理纹理。 我会认为这会使切线难以计算,因为两个点将具有完全相同的纹理坐标。 我尝试debugging渲染设置gl_FragColor不同的variables。 当设置为每个顶点的法线时,我们看到扇形消失,表明法线是正确的。 但是,将其设置为每个顶点的切线时,您可以看到扇贝。 下一个形状是一个简单的球体。 有了它,模型的顶部和底部就是神器展示的地方。 在线框中,你会看到这是几个三angular形在一个顶点相遇的地方。 因为每个三angular形都有完全不同的紫外线贴图,所以我无法将自己的头围绕在切线上。 如果我不显示着色器代码,我想我会得到很多flack。 顶点着色器: v_fragmentTexCoord0 = a_vertexTexCoord0; gl_Position = u_modelViewProjectionMatrix * vec4(a_vertexPosition,1.0); vec3 normal = normalize(u_normalMatrix * a_vertexNormal); vec3 tangent = normalize(u_normalMatrix * a_vertexTangent); vec3 bitangent = cross(normal, tangent); mat3 TBNMatrix = mat3(tangent, bitangent, normal); […]

使用未声明的标识符“gl_InstanceID”

大家好,我一直在iOS平台上尝试OpenGLES2.0中的Instanced绘图。 我的渲染代码 glEnableVertexAttribArray(…); glVertexAttribPointer(…) glDrawElementsInstancedEXT(GL_TRIANGLES,IndicesCount, GL_UNSIGNED_SHORT, 0, 5); 和我的顶点着色器 attribute vec4 VertPosition; uniform mat4 mvpMatrix[600]; void main() { gl_Position = (mvpMatrix[gl_InstanceID]) * VertPosition; } 我收到错误:使用未声明的标识符'gl_InstanceID' 我的glsl版本是1.0,如果版本是问题,那我该如何升级? 任何其他方式在GLSL中使用“gl_InstanceID”?

如何在GLSL ES中编写const数组

我想为iPhone上的OpenGL ES应用程序编写一个简单的顶点着色器,但是我的数组构造函数正在给我带来麻烦。 attribute vec4 normal; attribute vec4 position; void main(void){ const vec4 vertices[3] = vec4[](vec4(0.25, -0.25, 0.5, 1.0), vec4(-0.25, -0.25, 0.5, 1.0), vec4(0.25, 0.25, 0.5, 1.0)); gl_Position = vertices[gl_VertexID]; } 当使用这段代码时,着色器无法编译,并给出了错误信息: 错误:0:13:'(':语法错误:数组大小必须出现在variables名称后面

在iOS上使用OpenGL ES 2.0进行实例化绘图

简而言之: 任何人都可以确认是否有可能使用内置variablesgl_InstanceID (或gl_InstanceIDEXT )在顶点着色器上使用OpenGL ES 2.0在iOS上启用GL_EXT_draw_instanced ? 更长: 我想使用glDrawArraysInstanced和gl_InstanceID绘制一个对象的多个实例,我希望我的应用程序可以在多个平台(包括iOS)上运行。 规范明确指出,这些function需要ES 3.0。 根据iOS设备兼容性参考 ES 3.0仅在less数设备(基于A7 GPU;因此是iPhone 5s,但不在iPhone 5或更早版本)上可用。 所以我的第一个假设是我需要避免在旧的iOS设备上使用实例化的绘图。 但是,在兼容性参考文档中, 更进一步说,所有的SGX系列5处理器(包括iPhone 5和4s)都支持EXT_draw_instanced扩展。 这让我觉得我确实可以在老版本的iOS设备上使用实例化绘图,查找和使用glDrawArraysInstanced的扩展函数(EXT或ARB)。 我目前只是在Windows上运行一些使用SDL和GLEW的testing代码,所以我还没有在iOS上testing任何东西。 但是,在我目前的设置中,我无法在顶点着色器中使用gl_InstanceID内置variables。 我收到以下错误信息: 'gl_InstanceID':variables在当前的GLSL版本中不可用 在GLSL中启用“draw_instanced”扩展名不起作用: #extension GL_ARB_draw_instanced : enable #extension GL_EXT_draw_instanced : enable 当我特别声明我需要ES 3.0(GLSL 300 ES)时,错误消失: #version 300 es 尽pipe在ES 2.0环境下,我的Windows桌面机器似乎能正常工作,但我怀疑这是否适用于iPhone 5。 那么,我是否应该放弃在旧iOS设备上使用实例化绘图的想法?

使用GLSL数组的SceneKit着色器修改器

我正在尝试在SceneKit中将一些点传入一个着色器修改器,但我无法制定出正确的语法。 在我的着色器扩展代码中,我有: uniform vec2 points[100]; 如果我打电话… material.setValue(NSValue(point: CGPoint(x: 100.5, y: 50.5)), forKey: "points") …然后它设置points[0]的值,这使我认为这也许是不可能的。 我已经尝试了许多其他的组合键和值,但似乎没有任何工作。 有一个更好的方法吗? 我的最终目标是修改arrays中一组点的表面漫reflection颜色,否则使用默认渲染。 有没有更好的方法来做这个在着色器比循环vec2的数组? 谢谢你的帮助。

如何在SceneKit中添加着色器的透明度?

我想从图像中获得透明度效果,现在我只是用一个圆环来testing,但着色器似乎不能用于alpha。 从我从这个线程( 使用Scenekit中的混合函数 )和这个有关透明度的维基链接( http://en.wikibooks.org/wiki/GLSL_Programming/GLUT/Transparency )所了解的内容中, GLBlendFunc被SceneKit中的杂pragma transparencyreplace。 你会知道这个代码有什么问题吗? 我使用SceneKit创build了一个新项目,并将船舶网格更改为圆环。 编辑: 我正在尝试搭乘飞机,但是下面的图片并没有出现在飞机内部,而是在下面的红色和棕色框中显示。 我的形象与阿尔法: 结果(带有alpha的图像应该代替棕色): let plane = SCNPlane(width: 2, height: 2) var texture = SKTexture(imageNamed:"small") texture.filteringMode = SKTextureFilteringMode.Nearest plane.firstMaterial?.diffuse.contents = texture let ship = SCNNode(geometry: plane) //SCNTorus(ringRadius: 1, pipeRadius: 0.5) ship.position = SCNVector3(x: 0, y: 0, z: 15) scene.rootNode.addChildNode(ship) let myscale : CGFloat = 10 […]

在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 […]

在iOS中渲染水画

我一直在iOS中使用OpenGL ,并使用glColor4f(r,g,b,a)设置颜色,然后在白色的UIImageView上绘制自己的颜色。 我基本上有一个画笔,然后移动到我的用户的触摸,然后它画在canvas上的颜色。 但是这种颜色需要水漆(如污迹的颜色) 有没有人了解/知道如何获得像这个应用程序水的颜色,以及如何背景UIImageView有纹理呢? https://itunes.apple.com/us/app/hello-watercolor/id539414526?mt=8 或在这里结帐水漆。 http://www.fiftythree.com/paper 我创造了一个赏金,因为我真的很难掌握如何从正常的颜色中获得如此stream畅的颜色。 即使你们把我指向正确的方向,或者如何得到water-paint效果的示例代码,这将是非常有帮助的^ _ ^ 作为一个奖励,如果你能指出如何让canvas看起来逼真并与油漆混合起来,那么也是有帮助的。 Blending/GLSL是否与这些有关? 有没有关于这个样品的项目?

如何为着色器devise一个简单的GLSL包装器

更新:因为我马上需要一些东西,所以我创build了一个简单的着色器包装器,它可以处理我需要的东西。 你可以在这里find它: GitHub上的ShaderManager 。 请注意,它是为Objective-C / iOSdevise的,因此可能对每个人都没用。 如果您有任何关于devise改进的build议,请告诉我! 原始问题: 我是使用GLSL着色器的新手。 我对GLSL语言和OpenGL接口非常熟悉,但是在devise使用着色器的简单API时遇到了麻烦。 OpenGL的C接口与着色器交互看起来很麻烦。 我似乎无法在网上find任何涵盖这些APIdevise的教程。 我的问题是: 任何人都有一个好的,简单的APIdevise或模式来包装OpenGL着色器程序API? 以下面的简单例子。 假设我有一个模拟固定function的顶点着色器和两个片段着色器 – 一个用于绘制光滑的矩形,一个用于绘制光滑的圆。 我有以下文件: Shader.vsh : Simple vertex shader, with the following inputs/outputs: — Uniforms: mat4 Model, mat4 View, mat4 Projection — Attributes: vec4 Vertex, vec2 TexCoord, vec4 Color — Varying: vec4 vColor, vec2 vTexCoord Square.fsh : Fragment shader […]