我通过调用仅绘制几何的背面gl.cullFace(gl.FRONT).我注意到这些表面上的光线与我的预期相反.为了正确渲染,我是否必须明确反转背面上的曲面法线方向,或者OpenGL子系统是否自动执行此操作?
编辑:想到它,如果我手动反转他们的法线他们将成为正面并将被剔除.
我们有一组三角形。每个三角形都是三个点。每个点都是实数的三元组。我们可以计算每个三角形的表面法线。然而,对于 Gouraud 着色,我们需要顶点法线。因此,我们必须访问每个顶点并查看共享该顶点的三角形,平均它们的表面法线,然后得到顶点法线。
实现这一目标最有效的算法和数据结构是什么?
一个简单的方法是这样的(伪 python 代码):
MAP = dict()
for T in triangles:
for V in T.vertices:
key = hash(V)
if MAP.has(key):
MAP[key].append(T)
else:
MAP[key] = []
MAP[key].append(T)
VNORMALS = dict()
for key in MAP.keys():
VNORMALS[key] = avg([T.surface_normal for T in MAP[key]])
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?
我希望在我的节点绑定构建时使用编译器和链接器标志.如何node-gyp build以详细模式运行才能实现.(类似于make VERBOSE=1为cmake)
有一段时间我在源文件中使用了tabstop = 4.现在我写了很多有深度缩进的javascript,一个4的tabstop似乎很浪费,所以我想把它转换为2.问题是我也使用"set expandtab".所以仅设置tabstop = 2,将无济于事.
关于如何将我的所有文件快速转换为tabstop 2的任何建议?
我目前相关的.vimrc设置是
set tabstop=4
set shiftwidth=4
set expandtab
Run Code Online (Sandbox Code Playgroud) 我一直在我的网站上使用HTML5离线缓存一段时间,出于某些原因我正在考虑将其关闭.令我惊讶的是它不起作用.
这就是我实现HTML5离线缓存的方法.
在我的index.html我给清单文件的路径
<html manifest="app.manifest">
Run Code Online (Sandbox Code Playgroud)
在app.manifest文件中,我列出了我希望由浏览器缓存以供离线使用的所有js/css/png文件.每次部署更新时,我都会更新app.manifest文件,这会导致浏览器获取清单文件中列出的所有文件的最新版本.
为了关闭离线缓存,我将index.html的开始标记更改为
<html>
Run Code Online (Sandbox Code Playgroud)
我对app.manifest文件进行了虚拟更改,以便浏览器(已经缓存我的网站)将检测到更改并下载所有文件的最新版本(包括index.html).
我注意到的是,浏览器确实获得了所有文件的最新版本.我<html>在没有manifest声明的更新版本中看到了新标记,但是浏览器对将来更改的行为不会改变.即我现在希望浏览器在服务器上更改时立即获取新版本的index.html文件.然而,这不会发生.在我对清单文件进行任何更改之前,浏览器不会下载更新的index.html.
因此,在我看来,浏览器已将app.manifest文件永久地与我的网站URL相关联,即使我没有在<html>标签中提及它也不会将其删除.
我已经在Google Chrome和Firefox上测试了这个,结果相同.我也尝试重新启动Chrome,但它不会忘记我的网站曾为其定义了app.manifest.我还没有在网上找到关于离线缓存这方面的任何讨论.
更新:我设法通过清除所有浏览数据(通过转到设置)摆脱Chrome中的行为.但这不是我可以告诉用户做的事情.
我正在编写Node插件并尽可能多地使用nan库来编写代码.Node项目推荐它,因为它允许您编写与不同版本的v8和节点兼容的代码.
但是,经过多次查看文档后,我还没有找到有关在nan API中处理数组的任何指导.对于基本任务,例如处理由Javascript代码作为参数传递的数组,或者在加载项中实例化新数组对象并将其返回到Javascript代码.我们是否应该直接使用v8::ArrayAPI.我希望API 的Nan :: New部分可以更好地处理这个问题.
我错过了什么吗?
这是一个例子
$ cat main.js
App = {
version : 1.1
};
require('./mymod.js');
$ cat mymod.js
console.log(App.version);
$ node main.js
1.1
Run Code Online (Sandbox Code Playgroud)
请注意我App在main.js中如何声明var.这让我访问App从mymod.js不用打电话require.如果我App用a 声明var,这将无效.
我想明白为什么会这样?它是node.js或bug的预期行为吗?这种行为是否与ECMAScript或CommonJS标准一致?
这个技巧提供了一种强大的机制来规避requirenode.js 的模块系统.在每个文件中定义您的对象并将它们添加到顶级App命名空间.您在其他文件中的代码将自动访问这些对象.我错过了什么?
我的python代码在本机库中调用C函数(也是由我编写的).该函数接受两个字符串作为参数,并将其响应作为字符串返回.python传递给C库的两个参数字符串只能由C库读取,所以我并不担心它们的内存管理.AFAIK,它们的内存将由python分配,并在python运行时看起来合适时释放.
但是,据我所知,C库返回的字符串的内存必须明确管理.我可以实现它的一种方法是:C函数callocs一个字符数组,用answer填充它并从函数返回.python代码使用返回的字符串,应该在该字符串上调用libc的free,或者调用同一个C库的另一个函数来处理释放内存.
有没有其他方法可以做到这一点?ctype是否提供任何实用程序函数来简化释放本机库返回的数据结构的内存?