- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 OpenGL ES 2.0 中为 android 编写应用程序,但我遇到了一些着色器代码的问题。在这里:
attribute vec4 vPosition;
vec4 tempPosition;
void main() {
tempPosition = vPosition;
tempPosition.x = 2 - tempPosition.x;
gl_Position = tempPosition.yxzw;
}
导致错误的行是这一行:
tempPosition.x = 2 - tempPosition.x;
每次我想画东西时,我都会启用和禁用顶点属性数组。在我画之前我称之为:GLES20.glEnableVertexAttribArray(sPosition);
在我画之后我称之为GLES20.glDisableVertexAttribArray(sPosition);
我做错了什么?如何从 2 中减去 x?
编辑:
如果我将导致错误的行更改为:
tempPosition.xz = vec2(2,0) - tempPosition.xz;
它确实有效,但为什么我不能用一个数字减去?
最佳答案
在与 ES 2.0 一起使用的 GLSL 版本中(有点神秘的是版本 1.00),没有隐式类型转换。您不能将 int
类型的值添加到 float
类型的值或浮点向量。
这在规范的第 4 章“变量和类型”的介绍中指定:
The OpenGL ES Shading Language is type safe. There are no implicit conversions between types.
在第 5.9 节“表达式”中更详细地介绍了这种情况,其中定义了 +
运算符:
The two operands must be the same type, or one can be a scalar float and the other a float vector or matrix, or one can be a scalar integer and the other an integer vector.
因此,在操作 float 时需要使用 float 常量:
tempPosition.x = 2.0 - tempPosition.x;
更有趣的情况是为什么你的第二次尝试成功了,因为你也在混合不同的类型:
tempPosition.xz = vec2(2,0) - tempPosition.xz;
这是合法的,因为构造函数可以用于转换类型,并且是这样做的主要机制。例如,您可以将原始表达式写为:
tempPosition.x = float(2) - tempPosition.x;
这对于常量值看起来很尴尬,但如果整数值在变量中会更有意义:
int foo = ...;
tempPosition.x = float(foo) - tempPosition.x;
回到向量案例,第 5.4.2 节“向量和矩阵构造函数”指定:
If the basic type (bool, int, or float) of a parameter to a constructor does not match the basic type of the object being constructed, the scalar construction rules (above) are used to convert the parameters.
这意味着您可以使用 int
值作为 vec2
构造函数的参数,即使它包含 float
值。在这种情况下,值会自动转换。换句话说,你的第二个陈述等同于:
tempPosition.xz = vec2(float(2), float(0)) - tempPosition.xz;
恕我直言,不依赖隐式转换仍然更清晰,并写:
tempPosition.xz = vec2(2.0, 0.0) - tempPosition.xz;
请注意,完整的 OpenGL 在这方面不同于 OpenGL ES。在完整的 GLSL 中,存在隐式类型转换。我个人觉得这很不幸,因为我相信类型安全是一个有用的原则。
关于android - GLSL 错误 : No vertex attrib is enabled in a draw call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29179916/
似乎有时 object.setAttribute(attrib,value) 不等同于 javascript 中的 object.attrib=value? 我有以下代码,它工作正常: var las
我使用 windows attrib 命令删除目录只读属性并将其设置回来,如下所示: attrib -r C:\build attrib C:\build C:\build attrib +r
您好,我正在尝试编写代码来动态打开网址,首先我尝试使用以下 HTML: var rutaWeb = ScriptApp.getService().getUrl(); function doGet(e)
我想做的相当于 chmod -w+r-x foo或 attrib +R foo在 Windows PowerShell 中。环顾四周,我注意到一个相当粗糙的 Set-Acl看起来比我需要的更漂亮的功能
花了整整一个小时试图弄清楚这到底是为什么(coffeescript) $.ajax accepts: "application/json; charset=utf-8" 绝对没有做任何事情来更改接
在使用 pytest 对 CI 服务器上的 python 项目进行自动化测试期间发生此错误。 .我正在使用 pytest==4.0.2 .这个错误才刚刚开始发生,以前的管道似乎工作正常。 完整的错误:
在使用 pytest 在 CI 服务器上自动测试 python 项目期间发生此错误。 .我正在使用 pytest==4.0.2 .这个错误才刚刚开始发生,以前的管道似乎工作正常。 完整的错误: Fil
我正在 OpenGL ES 2.0 中为 android 编写应用程序,但我遇到了一些着色器代码的问题。在这里: attribute vec4 vPosition; vec4 tempPosition
我就想问问这个问题。 我想在我的闪存驱动器上取回我的文件,然后我尝试了这个: -s -r -h /s /d 但结果是: '-s' is not recognized as an internal or
如果我在模型中重写 getter 和 setter,在我的 Controller 中为该属性创建默认初始值的最佳方法是什么? 例如,当我在 Controller 中创建模型的新实例以包含一些初始值时,
这似乎是一个非常简单的问题,但谷歌搜索没有给我任何结果。这是错误(PS 5.1,win 10.0.14393 x64): Set-ItemProperty $myFileInfo -Name Attr
所以,我开始了一段相当即时的视觉化 3-D 编程世界之旅。我目前在 webgl 上投入了大量资金,在 JavaScript 和大多数面向 Web 的语言方面有很强的背景,但这是我的第一种图形语言。 在
我有以下用于 youtube API 的 JS 代码 - var tag = document.createElement('script'); tag.src = "https://www.yo
我刚刚开始尝试学习一些基本的 WebGL 编码,到目前为止一切进展顺利,直到我尝试渲染简单的 2D 纹理...... 这是我第一次真正做与计算机图形相关的事情,尤其是 WebGL/OpenGL。因此,
跳过 Nose 测试的类装饰器可以像下面这样写: from nose.plugins.attrib import attr@attr(speed='slow')class MyTestCase:
我是移动开发的新手,我使用 VS 2015 通过 apache cordova 和 ionic 构建简单的应用程序。我制作了具有两个 View 的应用程序:第一个 - 登录页面,第二个 - 包含从远程
以为我已经完成并准备好提交这个小项目,直到我遇到了这个意想不到的曲线球。目标是使用 token 词法分析器制作解析器。本质上 R G B and back to red 将以各自的颜色和属性
我是一名优秀的程序员,十分优秀!