我有一张黑色的形状由透明度包围。我已经用GLKit成功加载了这个纹理,我可以使用GLKBaseEffect将这些形状绘制成矩形。有没有办法改变黑色(即非透明)像素的颜色,所以我可以绘制黄色形状或蓝色形状等?或者我需要一个自定义着色器来做到这一点?使用GLKBaseEffect可以着色纹理
1
A
回答
0
好像你需要一个自定义着色器(我强烈建议有工作),因为你需要检查各个纹理像素的颜色值,但这里有一些建议,首先尝试:
您可以通过颜色顶点属性数组中的顶点数据指向GLKVertexAttribColor。这将允许您单独设置每个顶点的颜色(最终是面部),但很难看到它们与纹理对齐的位置。
你可以尝试让你的影响下列财产:
effect.colorMaterialEnabled = YES;
但是,对于这两种情况下,如果你的纹理元全黑的话,我不认为任何颜色的变化将呈现。
我觉得一个自定义着色器肯定是要走的路,因为你需要做这样的事情:
highp vec4 finalColor;
highp vec4 textureColor = texture2D(uTexture, vTexel);
highp vec4 surfaceColor = uColor;
// If texel is non-transparent (check alpha channel)
if(textureColor.a > 0.001)
finalColor = surfaceColor;
else
finalColor = vec4(0.0, 0.0, 0.0, 0.0);
gl_FragColor = finalColor;
凡任何前缀ü是传递到着色器的统一变量。
0
要得到充分彩色纹理,使用:
self.effect.texture2d0.envMode = GLKTextureEnvModeModulate;
这告诉OpenGL采取一切颜色是你的纹理和任何颜色的基本几何体是相乘。然后,您可以使用顶点着色来获得整齐的淡入淡出和什么。
注意:你会想改变你的纹理从黑色到白色(1,1,1,1),所以乘法工作正常。
注:这是你应该已经到位一些其他设置:
self.effect.texture2d0.enabled = GL_TRUE;
self.effect.texture2d0.target = GLKTextureTarget2D;
self.effect.texture2d0.name = self.texture.name;
self.effect.colorMaterialEnabled = GL_TRUE;
注:您可以GLKTextureEnvModeDecal
实验,太,它融合了您的彩色几何形状的顶部质地(当应用贴花时),所以纹理的透明部分显示下面的几何图形。
相关问题
- 1. GLKBaseEffect不加载纹理(纹理在对象上出现黑色)
- 2. XNA - UV纹理或着色器纹理?
- 3. GLKit的GLKBaseEffect和自定义着色器
- 4. THREE.JS着色器纹理
- 5. glColor着色所有纹理
- 6. 你可以在顶点着色器中看样本纹理吗?
- 7. 卡通着色器与纹理。这可以优化吗?
- 8. Libgdx禁用纹理并添加着色
- 9. 是否可以使用Three.js存储着色器顶点位置到纹理中?
- 10. 用于纹理,颜色和纹理/颜色的片段着色器GLSL
- 11. iOS + SceneKit:如何将纹理着色器应用于纹理?
- 12. 使用帧缓冲区渲染纹理GLKit的GLKBaseEffect
- 13. 使用着色器更改纹理某些片段的颜色
- 14. three.js使用平面着色和纹理的平面颜色
- 15. 使用原始纹理颜色的2D着色器?
- 16. 使用着色器时,OpenTK中的纹理显示为黑色
- 17. 使用相同的着色器处理GL_RGBA和GL_ALPHA纹理?
- 18. LibGDX - 使用着色器在另一个纹理之上叠加纹理
- 19. C++着色器,HLSL,如何发送到着色器,纹理? “sampler2d”?
- 20. GLSL纹理映射和着色在相同的着色器
- 21. HLSL几何着色器纹理查找
- 22. 纹理中的OpenGL片段着色器
- 23. 滚动纹理的GLSL着色器
- 24. 在着色器中绑定纹理
- 25. OpenGL着色器 - 重叠多个纹理
- 26. OpenGL着色器忽略纹理
- 27. 三JS着色器库 - 多纹理
- 28. GL_POINTS着色器中的纹理样本
- 29. 基于纹理像素着色平面
- 30. WebGL 1D纹理 - 着色器值捕获
我投入了着色器。 – ahwulf
您不会后悔,GPU编程中的固定功能流水线正迅速成为过去(使用ES 1.1或GLKBaseEffect)。 –