GLSL:如何将浮点数转换为int?


40

在GLSL片段着色器中,我试图将A投射floatint。编译器会引发错误:

ERROR: 0:60: '=' :  cannot convert from 'mediump float' to 'highp int'

我试图提高的精度int

mediump float indexf = floor(2.0 * mixer);
highp int index = indexf;

但无济于事。

如何int正确投放?


1
供将来参考,如果您在Stack Overflow上问诸如此类的一般编程问题,将会得到更好的答案。stackoverflow.com-根据社区反馈,这个问题可能仍会迁移到那里。
Ricket

对于重新解释类型转换,现在有诸如的功能floatBitsToInt
jozxyqk 2014年

Answers:


41

尝试这个:

highp int index = int(indexf);

我在这里找到的。


还要注意,将float强制转换为int会自动对其进行平整(至少在我所见过的任何实现中都如此),因此您不必对floor进行调用。
Ricket

6
在大多数语言中,舍入模式是截断/舍入到零,这等于下限为正数,但不是负数。我不记得这是否适用于GLSL,但如果不适用,我会感到惊讶。

@Joe这是我从未想过的有趣事实,我只是通过Java测试用例进行了确认。
Ricket

4
高在这里重要吗?(在一个Integer)
列昂佩尔蒂埃

谢谢,它对我来说也有用。由于该页面不存在,您能否更新您提供的参考?
宝来'18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.