所以我现在正在学习angular2并阅读关于模块的ngbook2.模块包含组件,但也可以使用其公共组件导入不同的模块.
问题是:模块组件的范围是什么(在这个意义范围内,作为应用程序的一部分,而不是内部变量的范围).模块是整个应用程序还是只是某些部分,如标题,包含其组件?
常用的惯例是什么?
我刚刚使用three.js将我的第一个布料模拟从opengl移植到webgl (可以在这里看到).
事情是它看起来有点沉闷,我想添加(因为我希望我能从我的计算机图形类中正确记住)环境遮挡,以使布料在与球碰撞时很好地遮挡.我对着色器的了解现在处于非常低的水平,所以我非常感谢有关这个主题的任何资源有助于three.js开发(教程,书名等),因为谷歌对它一无所知.
所以,由于WestLangley,阴影得到了修复!现在回到其他问题:关于三个着色器的任何有用资源,或者只是一般的hlsl?
我正在尝试学习如何利用三个和webgl的gpu可能性,所以我只是分析代码来获得一些模式,方法是如何完成的,我需要一些代码解释.
我找到了这个例子:一百万个粒子,这似乎是最简单的一个,涉及着色器和吐出的计算.
因此,根据我的想法: - 粒子的速度和位置数据保存在纹理中,传递给着色器以在那里执行计算,然后将它们返回更新
粒子是在平面上随机创建的,不超过纹理大小?
for(var i = 0; i <1000000; i ++){
Run Code Online (Sandbox Code Playgroud)particles.vertices.push(new THREE.Vector3((i % texSize)/texSize,Math.floor(i/texSize)/ texSize,0)); }
我没有看到任何粒子位置更新?如何从着色器检索数据并更新每个粒子?
pick()只通过鼠标位置来计算粒子运动的方向?
为什么有2个缓冲区?和8(4对片段和矢量)着色器?只有用于计算速度和位置的那个还不够吗?
着色器如何更新纹理?我只是看到它没有写入它的阅读?
提前感谢您的任何解释!
我试图摆脱我页面中的jquery,并将某些功能重写为纯js。有2个班级工作清单,其中包含几个li元素。每个li元素都应具有单击动作,以向其添加“活动”类。在jQuery中,它非常简单:
$('.work li').on('click', function () {
var that = $(this);
that.parent().find('li.active').removeClass('active');
$(this).addClass('active');
})
Run Code Online (Sandbox Code Playgroud)
在纯js中是否有更好的解决方案,而不是使用嵌套循环来做类似的事情:
var lists = document.getElementsByClassName('work');
for(var i=0; i<lists.length; i++){
var children = lists[i].querySelectorAll('li');
for(var j=0; j<children.length;j++){
children[j].addEventListener();
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下问题:尝试使用 RenderPass 渲染多个场景以进行后处理。
现在有2个场景:
1)地形+云
2) 文字层
两个场景都在渲染,但文本层被混合到地形中(通常如果它们在同一个场景中渲染,它应该像这样)。奇怪的是:我可以通过比地形高得多的云看到文字(地形和云在同一场景中进行测试)
您可以看到云层上方的文字,但它与地形融为一体
为了呈现它,我使用以下代码:
@renderPass = new THREE.RenderPass( @scene, @camera )
@renderPass.renderToScreen = true
@renderPass.clear = false
@renderPass.clearDepth = true
@textPass = new THREE.RenderPass( @textScene, @camera )
@textPass.renderToScreen = true
@textPass.clear = false
@textPass.clearDepth = true
@composer = new THREE.EffectComposer( @renderer );
@composer.addPass( @renderPass )
@composer.addPass( @textPass )
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用以下方法正常渲染它们时:
@renderer.clear()
@renderer.render @scene, @camera
@renderer.clearDepth();
@renderer.render @textScene, @camera
Run Code Online (Sandbox Code Playgroud)
有没有办法以渐变的方式混合2个纹理?恩.第一个纹理从顶部开始,然后到达底部,第二个纹理从底部开始并向上移动.我想让它们像渐变中那样松散不透明,以创建平滑的连接.可能吗?
也许有其他方法来创建这样的纹理?问题是我的地形高度差异看起来不太好 - 在一个方形区域,一个三角形的纹理与另一个三角形不同.
终于有时间玩着色器,但一时间卡住了.我想将顶点传递给着色器并在其上制作一些gpgpu.
Gpgpu工作正常,我猜是因为我看到几个像素,中间的一个被推到一边,因为我放入代码只是为了测试.
现在我想传递球体顶点.以下是我要采取的步骤.请指出错误:-)
编辑:小提琴添加 - 点击这里
1)创建几何体,并将其传递给数据数组.
geometry = new THREE.SphereGeometry( 0.2, 15, 15 );
console.log(geometry.vertices.length);
var a = new Float32Array(geometry.vertices.length * 4);
for(var k=0; k<geometry.vertices.length; k++) {
a[ k*4 + 0 ] = geometry.vertices[k].x;
a[ k*4 + 1 ] = geometry.vertices[k].y;
a[ k*4 + 2 ] = geometry.vertices[k].z;
a[ k*4 + 3 ] = 1;
}
Run Code Online (Sandbox Code Playgroud)
2)将其保存在数据纹理中
posTexture[2] = new THREE.DataTexture(a, 16, 16, THREE.RGBAFormat, THREE.FloatType);
Run Code Online (Sandbox Code Playgroud)
3)设置'Set scene'(它应该将datatexture传递给它一次)setUniforms = {posTexture:{type:"t",value:posTexture [2]}};
var setMaterial = new THREE.ShaderMaterial({
uniforms: setUniforms,
vertexShader: document.getElementById('setVert').textContent, …Run Code Online (Sandbox Code Playgroud)