首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用与OpenGL版本相同的代码移动OpenGL ES纹理

使用与OpenGL版本相同的代码移动OpenGL ES纹理
EN

Stack Overflow用户
提问于 2017-10-29 22:06:19
回答 1查看 52关注 0票数 1

在我的Windows代码(OpenGL 4)中,我使用这个来计算片段着色器中的纹理位置:

代码语言:javascript
复制
vec2 pixel = "some equation"
vec2 textureSize = vec2(512.0, 512.0);
vec2 texel = floor(pixel + vec2(0.5)) + vec2(0.5);
texel /= textureSize

如果我在iOS (OpenGL ES 3.0)上运行这段代码,我的整个图像在x和y方向上会发生部分移位。我试着删除vec2(0.5),只使用

代码语言:javascript
复制
vec2 texel = floor(pixel + vec2(0.5))

但它甚至更不正确。

ES中发生了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-10-30 00:50:53

可能是着色器精度。尝试添加:

代码语言:javascript
复制
precision highp float;

位于片段着色器的顶部。

如果没有该语句,并且在单个var上没有精度限定符,那么您的数学操作可能(取决于实现)使用半精度浮点数而不是单精度(16位浮点数而不是32位浮点数),而这种精度的缺乏可以解释您所看到的工件。

请注意,OpenGLES实现可以自由地不支持片段着色器中的highp,因此此方法可能并不适用于所有地方。但是,它在所有iOS设备上都受支持,这就是您所提到的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47001102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档