Three.js: 缺少 InterleavedBuffer 类的默认步幅值

创建于 2017-05-28  ·  3评论  ·  资料来源: mrdoob/three.js

问题描述

在 InterleavedBuffer 类,建议将步幅设为默认值 0。 如果用户忘记指定步幅, this.stride将具有值undefined ,这将级联到var stride = data.stride; ,并进一步到_gl.vertexAttribPointer导致未定义的 webgl 行为。

三.js版本
  • [X] 开发
  • [x] r85
  • [ ] ...
浏览器
  • [x] 全部
  • [ ] 铬合金
  • []火狐
  • [ ] IE浏览器
操作系统
  • [x] 全部
  • [ ] 窗户
  • [ ] 苹果系统
  • []Linux
  • [ ] 安卓
  • [] iOS

最有用的评论

为参数设置默认值意味着完全不指定值是可以的。 但是,在这种情况下,必须设置一个值。

此外,如果默认值为零,则下一行可以除以零。

三.js 一般不检查参数值。

所有3条评论

为参数设置默认值意味着完全不指定值是可以的。 但是,在这种情况下,必须设置一个值。

此外,如果默认值为零,则下一行可以除以零。

三.js 一般不检查参数值。

  1. 不幸的是,没有办法强制用户设置该值,与 C++ 不同,它将在编译时检测到。 如果必须设置,为什么不抛出错误以防它没有设置而不是静默通过并返回奇怪的图形行为? 作为three.js 的新用户,我浪费了很多时间来找出问题所在,而且我很确定我不会是唯一会陷入这个陷阱的人。

  2. 没有办法阻止用户将 0 分配给stride ,这会导致刚刚提到的@WestLangley被零除的问题。

  3. 此处的 API 文档未能明确说明stride的含义。 根据我对 OpenGL/WebGL API 的经验,这里的stride是顶点属性的原始元素的数量,浮点数或整数。 所以count似乎是其属性在第一个参数array中定义的顶点数。

  4. 而且,如果我错了,请纠正我, this.count在整个WebGLRender中没有发现任何用法,而stride已在关键的 GL 调用_gl.vertexAttribPointer中使用stride 0 后,这并不完全正确,并且this.count现在是Infinity ,它使我的渲染恢复正常,因为它从未被使用过在框架的什么地方。

所以,我建议设置一个安全防护来检查stride的值,并在undefined0的情况下提示用户。

是的,这就是 JavaScript,我们之前也有过这些讨论。

另一方面,如果您觉得文档不充分或不正确,这将是帮助我们改进它的好时机。 :)

在您引用的代码中, count是顶点数。 该属性可能会或可能不会被渲染器使用,但如果需要,它是应用程序层可用的属性。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

scrubs picture scrubs  ·  3评论

danieljack picture danieljack  ·  3评论

jack-jun picture jack-jun  ·  3评论

clawconduce picture clawconduce  ·  3评论

makc picture makc  ·  3评论