渲染 WebGL 时特定于 Windows 的问题.属性设置为零
Windows-specific issue when rendering WebGL... attribute set to zero?
我在使用 WebGL 时遇到了一个难以调试的问题。 我正在为CraftyJS游戏框架实现WebGL后端。 在OSX,Linux和Android上一切正常,但是当协作者在Windows上进行测试时,出现了一个重要的错误 - 旋转的精灵呈现为未旋转! 我能够在IE,Chrome和Firefox上复制它。 我正在使用的顶点程序类型的示例,它只是呈现一个彩色矩形:
attribute vec2 aPosition;
attribute vec3 aOrientation;
attribute vec4 aExtra;
attribute vec4 aColor;
varying lowp vec4 vColor;
uniform vec4 uViewport;
mat4 viewportScale = mat4(2.0 / uViewport.z, 0, 0, 0, 0, -2.0 / uViewport.w, 0,0, 0, 0,1,0, -1,+1,0,1);
vec4 viewportTranslation = vec4(uViewport.xy, 0, 0);
vec2 entityOrigin = aOrientation.xy;
mat2 entityRotationMatrix = mat2(cos(aOrientation.z), sin(aOrientation.z), -sin(aOrientation.z), cos(aOrientation.z));
void main() {
vec2 pos = aPosition;
pos = entityRotationMatrix * (pos - entityOrigin) + entityOrigin ;
gl_Position = viewportScale * (viewportTranslation + vec4(pos, 1.0/(1.0+exp(aExtra.x) ), 1) );
vColor = vec4(aColor.rgb*aColor.a*aExtra.y, aColor.a*aExtra.y);
}
这个问题似乎与aOrientation
属性有关——它用于计算旋转矩阵。 使用 Firefox 的着色器编辑器,如果我手动指定entityOrigin
和entityRotationMatrix
那么程序将正确渲染。 但默认情况下,它呈现为好像 aOrientation
属性的所有组件都只有 0。 着色器的所有其他方面(定位+尺寸、颜色、alpha 透明度、视口比例/平移(似乎都可以正常工作;只有依赖于aOrientation
的行为才会被破坏,而且似乎只依赖于Windows。
由于我很少访问Windows机器,因此很难调试。 是否有任何特定于Windows(或特定于硬件/驱动程序?(的问题可能会以某种方式导致设置该特定属性时出现问题?
想通了,一旦我真正有时间坐下来与Windows机器进行实验 - 编译器正在"优化"我在Windows上的属性。 我想这可能是依赖于驱动程序/平台/硬件的,这是有道理的。
解决方案是将以下行放在main()
内部而不是外部。
vec2 entityOrigin = aOrientation.xy;
mat2 entityRotationMatrix = mat2(cos(aOrientation.z), sin(aOrientation.z), -sin(aOrientation.z), cos(aOrientation.z));
我想我真的不明白 main 内部的代码和 main 外部的代码之间的区别。 要研究的东西! :)
相关文章:
- JavaScript Pub/Sub属性访问问题
- 使用导航属性创建Kendo UI网格模型的问题
- 使用jQuery设置HTML5属性值时出现问题
- 将输入值设置为ng模型属性[Angular]时出现问题
- 我该如何解决这个问题?“未捕获的类型错误:无法读取 null 的属性'appendChild'”
- 奇怪的数据属性布尔问题
- HTML:密码字段中的HTML5占位符属性问题 - 显示正常文本
- 更改 img src 属性问题
- 访问Javascript对象属性问题
- 声明javascript对象属性问题
- 环回相关的模型属性问题
- 文本框只读属性问题与我的struts应用程序
- JavaScript中的搜索栏样式属性问题
- 框架"src"属性问题
- 类和属性问题
- Microsoft Edge上的SelectionStart属性问题
- Javascript压缩和对象属性问题
- CSS使用JavaScript在表中显示属性问题
- img属性问题re:IE-->赢得't显示图像的本机宽度,恢复为1px宽
- jQuery html属性问题