Tag: 片段着色器

OpenGL ES的glFragColor取决于iOS上的片段着色器的条件

我在iOS上编写应用程序允许在屏幕上绘制自由样式(使用手指)和绘制图像。 我使用OpenGL ES来实现。 我有2个function,一个是画自由风格,一个是画纹理 —代码绘制自由风格 – (void)drawFreeStyle:(NSMutableArray *)pointArray { //Prepare vertex data ….. // Load data to the Vertex Buffer Object glBindBuffer(GL_ARRAY_BUFFER, vboId); glBufferData(GL_ARRAY_BUFFER, vertexCount*2*sizeof(GLfloat), vertexBuffer, GL_DYNAMIC_DRAW); glEnableVertexAttribArray(ATTRIB_VERTEX); glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, GL_FALSE, 0, 0); **GLuint a_ver_flag_drawing_type = glGetAttribLocation(program[PROGRAM_POINT].id, "a_drawingType"); glVertexAttrib1f(a_ver_flag_drawing_type, 0.0f); GLuint u_fra_flag_drawing_type = glGetUniformLocation(program[PROGRAM_POINT].id, "v_drawing_type"); glUniform1f(u_fra_flag_drawing_type, 0.0);** glUseProgram(program[PROGRAM_POINT].id); glDrawArrays(GL_POINTS, 0, (int)vertexCount); // Display the […]

使用GPUImage在OpenGL ES着色器中使用bool返回types

我正在使用GPUImage框架在iOS项目上工作。 我无法让我的着色器编译。 在我的片段着色器中有一个函数: const vec2 boundMin = vec2(0.0, 0.0); const vec2 boundMax = vec2(1.0, 1.0); bool inBounds (vec2 p) { return all(lessThan(boundMin, p)) && all(lessThan(p, boundMax)); } 着色器编译日志: ERROR: 0:1: '_Bool' : syntax error syntax error 当我replace所有的function inBounds(vec2 p) 同 all(lessThan(boundMin, p)) && all(lessThan(p, boundMax)) 它很好用! 问题: OpenGL ES 2.0 Fragment Shader是否支持boolfunction? 如果是这样,我哪里错了? 如果没有,为什么有像all() , […]

OpenGL:与片段着色器的圆斜面?

我正在试图制作一个圆形的粒子,看上去它的顶部有一道光芒。 这就是我想让它看起来像: 以下是它目前的样子: 不太好。 由于我使用的是GL_POINTS,所以我得到了gl_PointCoordvariables,这会让事情变得更简单,除非我不知道如何正确使用它,这导致了这个混乱: varying lowp vec4 DestinationColor; void main(void) { lowp vec2 circCoord = 2.0 * gl_PointCoord – 1.0; if (dot(circCoord, circCoord) > 1.0) { discard; } gl_FragColor = mix(DestinationColor, vec4(1, 0.5, 0.2, 1), (1.0-gl_PointCoord.t)*(max(abs(gl_PointCoord.t-0.5),abs(gl_PointCoord.s-0.5)))); // the world's worst slowest math } 我会高度赞赏,如果有人能给我一点帮助,因为我卡住了自己可怕的math技能。

渲染一个SCNGeometry作为一个线框

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

自定义着色器SCNProgram iOS 9 Scenekit

我试图在SceneKit中SceneKit并教导自己。 基本上,我正在创build一个有3个矩形边和1个倾斜滑块的四边形。 我希望我的纹理能够在表面上伸展和变形/变形。 在线阅读一些东西,似乎我需要用自定义顶点和片段着色器来制作一个SCNProgram来获得效果。 但是,我似乎无法让纹理在表面上传播。 需要帮助,请。 (我是graphics编程新手,因此试图自己教)。 我的Swift代码创build的几何和纹理如下: func geometryCreate() -> SCNNode { let verticesPosition = [ SCNVector3Make(0.0, 0.0, 0.0), SCNVector3Make(5.0, 0.0, 0.0), SCNVector3Make(5.0, 5.0, 0.0), SCNVector3Make(0.0, 3.0, 0.0) ] let textureCord = [CGPoint (x: 0.0,y: 0.0), CGPoint(x: 1.0,y: 0.0), CGPoint(x: 1.0,y: 1.0), CGPoint(x: 0.0,y: 1.0)] let indices: [CInt] = [ 0, 2, 3, 0, […]

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