问题标签 [glsles]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
three.js - 使用three.js在片段着色器中手动选择mipmaps
我正在使用 three.js 中的 glsl es 编写一个基于物理的着色器。为了添加镜面全局照明,我使用内部带有 mipmap 链的立方体贴图 dds 纹理(使用 CubeMapGen 进行预计算,如这里所述)。我需要在片段着色器中访问这个纹理,我想手动选择 mipmap 的索引。这样做的正确功能是
但它仅在顶点着色器中可用。在我的片段着色器中,我使用了类似的功能
但它效果不佳,因为偏差参数只是添加到自动计算的细节级别。因此,当我放大或缩小场景时,mipmap 的 LOD 会发生变化,但对于我的着色器,它必须相同(它必须仅取决于粗略参数,如上面的链接中所述)。
我想手动选择片段着色器中mipmap的级别仅取决于材质的粗糙度(例如使用公式mipMapIndex = roughness*numMipMap
),因此它必须与距离一致,并且在缩放时不会自动更改。我该如何解决这个问题?
java - 安卓 OpenGL ES 2.0 VBO
我花了几天时间试图让 VBO 使用 OpenGL ES 2.0 在 Android 上工作,但我似乎无法让它工作。
这是我正在使用的代码:
目前我还没有实现法线或纹理的使用,因为我只是想绘制一个三角形,其中每个顶点都是不同的颜色。我知道着色器应该在我让它工作时工作,使用相同的着色器和顶点/颜色数据只渲染一种颜色。
当我查看 LogCat 时,消息: : GL_INVALID_VALUE 正在被打印出来。然后我决定打印出使用 glGetAttribLocation 找到的 colourAttribute 的值,结果是 -1。经过进一步研究,我发现了这一点:https ://www.opengl.org/sdk/docs/man/html/glGetAttribLocation.xhtml ,其中指出返回-1的值“如果命名的属性变量不是活动属性在指定的程序对象中”。
搜索谷歌后,我还没有找到解决三角形不渲染问题的方法,所以不胜感激。
谢谢你。
opengl - 在 OpenGL 1.x 中检测 GLSL 与 GLSL ES 支持
我写的是在 Core 2.0 之前的 OpenGL 版本中使用 GLSL 和着色器对象。我的源代码检测到 OpenGL 版本低于 2.0,然后检查 GL_ARB_shading_language_100 支持。如果支持,则假定支持 GL_ARB_shader_objects、GL_ARB_vertex_shader 和 GL_ARB_fragment_shader。
我注意到我认为这意味着支持 GLSL 1 的假设是错误的,因为支持 GLSL ES 1.2 并且我的所有着色器源代码都无法编译(缺乏 3D 纹理支持)。glGetString(GL_SHADING_LANGUAGE_VERSION_ARB) 没有帮助(返回 1.20)并且没有记录为有用。
有没有办法通过扩展来检测是否支持 GLSL ES?
ios - 在 iOS 上使用 OpenGL ES 2.0 进行实例化绘图
简而言之:
任何人都可以确认是否可以在启用的 iOS 上使用 OpenGL ES 2.0 在顶点着色器中使用内置变量gl_InstanceID
(或) ?gl_InstanceIDEXT
GL_EXT_draw_instanced
更长:
我想使用glDrawArraysInstanced和gl_InstanceID绘制一个对象的多个实例,并且我希望我的应用程序可以在包括 iOS 在内的多个平台上运行。
规范明确指出这些特性需要 ES 3.0。根据iOS 设备兼容性参考,ES 3.0 仅在少数设备上可用(基于 A7 GPU 的设备;因此是 iPhone 5s,但不适用于 iPhone 5 或更早版本)。
所以我的第一个假设是我需要避免在旧的 iOS 设备上使用实例化绘图。
然而,在兼容性参考文档的后面,它说所有 SGX 系列 5 处理器(包括 iPhone 5 和 4s)都支持EXT_draw_instanced扩展。
这让我觉得我确实也可以在较旧的 iOS 设备上使用实例绘图,方法是查找并使用glDrawArraysInstanced的适当扩展函数(EXT 或 ARB) 。
我目前只是在 Windows 上使用SDL和GLEW运行一些测试代码,所以我还没有在 iOS 上测试过任何东西。
但是,在我当前的设置中,我无法在顶点着色器中使用gl_InstanceID内置变量。我收到以下错误消息:
'gl_InstanceID' : 变量在当前 GLSL 版本中不可用
在 GLSL 中启用“draw_instanced”扩展无效:
当我特别声明我需要 ES 3.0 (GLSL 300 ES) 时,错误消失了:
尽管在 ES 2.0 环境中这在我的 Windows 台式机上似乎可以正常工作,但我怀疑这在 iPhone 5 上是否可以正常工作。
那么,我应该放弃能够在旧 iOS 设备上使用实例绘图的想法吗?
three.js - 将 GLSL 3 ES 与 three.js 一起使用
有没有人成功地将 GLSL 3 ES 着色器与three.js库一起使用?据我所知,最新版本(r68)是不可能的,因为甚至无法设置指令(这是必需的,并且必须在着色器代码中的任何其他内容之前):
因为三个.js 添加到每个着色器的前缀。
有谁知道该问题的任何解决方案?更改three.js 代码以在threejs 着色器前缀的开头附加指令就足够了吗?
three.js - vec4.x > 5 的简单比较
我无法编译以下片段着色器:
如果我将 (texel.x > 5) 更改为 (1 > 5) 它工作正常。但不知何故 texel.x 会导致编译错误。有没有人看到这段代码有明显的问题?
android - LibGDX - 自定义阴影映射
我需要在我的场景中创建阴影。我不想使用Environment
withDirectionalShadowLight
因为它已被弃用并且DefaultShader
是冗余的。所以,我需要实现我自己的支持阴影的着色器。根据这篇文章,我创建了 2 个着色器。其中之一是ShadowGen
着色器:
顶点:
分段:
另一个是使用这个阴影贴图的基本着色器:
顶点:
分段:
Shadow
我在类中使用这些着色器,如下所示:
shadowMapShader的代码是:
所以,实际结果是:
如果我使用DefaultShader
withEnvironment
结果符合预期:
这有什么问题?任何帮助将不胜感激!
c# - 在使用 Monodroid 的真实 Android 设备上,顶点蒙皮看起来很乱
我为 3D 动画做“顶点蒙皮”没有问题。使用模拟器(和genymotion)时一切顺利。但是,在真实设备(如三星和联想)上运行时看起来很乱。
截图(模拟器)
截图(真机)
1drv.ms/1BzZ2we
传递皮肤变换矩阵
GLSL 顶点
APK
http://1drv.ms/1BzYV3Q 触摸屏开/关动画。
信息
- Xamarin.Android = 4.10.xx
- 模拟器目标 = API 16 或 4.1
- 真实设备目标 = API 16 或 4.1
- App Target = API 10 或 2.3(也在 API 14 和 API 16 中测试),结果保持不变
有什么办法可以解决这个问题吗?
最好的问候,谢谢。
opengl-es - 在 OpenGL ES 中,多个程序可以使用相同的 VBO 并绑定到它们的属性吗?
我有两个程序要在它们之间切换。我将位置数据加载到 VBO 中,然后为我的第一个程序设置顶点属性数组。当我切换到第二个程序并尝试使用相同的数据设置我的顶点属性数组时,它无法绘制。但是,如果我使用完全相同的代码制作第二个缓冲区,并将其用于第二个程序,它们都画得很好。我想知道是否有人可以澄清在程序之间共享这些 VBO 的规则,因为除非需要它们,否则我宁愿没有两个缓冲区。
libgdx - GLSL ES - 将纹理从矩形映射到极坐标并重复
我需要将矩形纹理扭曲为具有极坐标的纹理。为了阐明我的问题,我将对其进行说明:
我有图像:
我必须使用着色器将其变形为如下所示:
然后我要把它映射到飞机上。我怎样才能做到这一点?任何帮助将不胜感激!