我正在交换新的位置数据,以便在用户点击时形成点云(在高云和宽云之间交替)。我做了这个小提琴,到目前为止,我可以让云第一次正确渲染(一个高云),但在点击事件中,所有的点位置似乎都变成了0,0,而不是变成一个宽云。我错过了什么?
以下是一些需要检查的片段:
function makeCloud() {
var cloudWidth, cloudHeight;
if ( isTallCloud ) {
cloudHeight = 100;
cloudWidth = 25;
} else {
cloudHeight = 25;
cloudWidth = 100;
}
isTallCloud = !isTallCloud;
var positions = new Float32Array( particles * 4 );
var offsets = new Float32Array( particles * 4 );
for ( var i = 0, i4 = 0; i < particles; i ++, i4 +=4 ) {
positions[ i4 + 0 ] = ( Math.random() * 2 - 1 ) * cloudWidth; // x
positions[ i4 + 1 ] = ( Math.random() * 2 - 1 ) * cloudHeight; // y
positions[ i4 + 2 ] = 0.0; // velocity
positions[ i4 + 3 ] = 0.0; // velocity
offsets[ i4 + 0 ] = positions[ i4 + 0 ]; // width offset
offsets[ i4 + 1 ] = positions[ i4 + 1 ]; // height offset
offsets[ i4 + 2 ] = stateChange; // this will hold the change state ( 0.0 or 1.0 )
offsets[ i4 + 3 ] = 0.0; // not used
}
cloudData = {
"positions" : positions,
"offsets" : offsets
}
}
function updateStateChange() {
for ( var i = 0, i4 = 0; i < particles; i ++, i4 +=4 ) {
cloudData.offsets[ i4 + 2 ] = stateChange; // this will hold the change state ( 0.0 or 1.0 )
}
}
function updateOffsets() {
offsetsTexture = new THREE.DataTexture( cloudData.offsets, width, height, THREE.RGBAFormat, THREE.FloatType );
positionUniforms.tOffsets.value = offsetsTexture;
positionUniforms.tOffsets.needsUpdate = true;
}
function onDocumentClick() {
event.preventDefault();
stateChange = 1.0;
makeCloud();
updateOffsets();
}
function animate() {
requestAnimationFrame( animate );
update();
render();
}
function render() {
renderer.render( scene, camera );
}
function update() {
positionUniforms.uTime.value += 0.01;
gpuCompute.compute();
particleUniforms.tPositions.value = gpuCompute.getCurrentRenderTarget( positionVariable ).texture;
if ( stateChange === 1.0 ) {
stateChange = 0.0;
console.log("swapped state!");
updateStateChange();
updateOffsets();
}
}
着色器代码中的一个片段:
vec4 offsets = texture2D( tOffsets, uv ).xyzw;
float swapState = offsets.z;
vec4 nowPos;
vec2 velocity;
if ( swapState == 0.0 ) {
nowPos = texture2D( tPositions, uv ).xyzw;
velocity = vec2(nowPos.z, nowPos.w);
} else { // if swapState == 1.0
nowPos = vec4( offsets.x, offsets.y, 0.0, 0.0 );
velocity = vec2(0.0, 0.0);
}
背景:
我意识到,只需点击一下交换所有数据,就可以很容易地得到我想要的结果;然而,我试图通过在纹理中传递这些偏移值来更新的原因是,在我的更大程序中,有更多的点云,我只想改变选定的云(如着色器中的swapState
所示),同时让物理着色器继续控制剩余的未选定云。更新所有云会破坏着色器控制的物理连续性。
我在我的代码中发现了错误——缺陷在于我如何为DataTexture
设置必要性更新
属性。请参阅此处的固定小提琴。这是使它最终按预期工作的修订:
function updateOffsets() {
offsetsTexture = new THREE.DataTexture( cloudData.offsets, width, height, THREE.RGBAFormat, THREE.FloatType );
offsetsTexture.needsUpdate = true; // **using this way of updating the texture produced the behavior I expected
positionUniforms.tOffsets.value = offsetsTexture;
// positionUniforms.tOffsets.needsUpdate = true; **this form of updating caused the faulty behavior
}
问题内容: 我有一个CI管道来构建我的android应用程序,并使用gitlab管道运行有条件的测试。我的gitlabRunner是一台ubuntu 16.04机器,在docker容器中运行每个构建。我有一个通过USB连接到gitlab运行程序的物理android设备。 最近,每次触发新的构建时,系统都会提示我允许android目标上的USB设备使用RSA指纹。问题在于指纹随着每个构建而变化。 我
好的,所以我需要创建我自己的纹理/图像数据,然后在OpenGL中将它显示到一个四边形上。我让四边形工作,我可以用我自己的纹理加载器在上面显示一个TGA文件,它完美地映射到四边形。 但是我如何创建自己的“自制图像”,即每个像素1000x1000和3个通道(RGB值)?纹理数组的格式是什么,例如如何将像素(100,100)设置为黑色? 这就是我对完全白色的图像/纹理的想象: 编辑:下面的答案是正确的,
我有一段代码可以在Windows7本机或Ubuntu16.04本机下正常工作,但是在VMPlayer6中使用Ubuntu16.04和vmwgfx,除非移动窗口,否则它不会更新。三种情况下的代码完全相同。 节点这是旧的JOGL 1 http://jogamp.org/deployment/archive/master/gluegen-old-1.0b6/gluegen-rt-natives-linu
问题内容: 我的数据库确实发生了一些奇怪的事情。我正在使用PHP将数据插入数据库中,并且在过去的两年中我一直在这样做,没有任何问题。当客户在我的网站上付款时,我会将交易中的所有数据存储在数据库中。每个交易都有一个唯一的“ transaction_id”。当我将付款信息插入数据库时,除“ transaction_id”外,所有信息均已正确插入。所有交易均被赋予“ 4294967295”的“ tr
我有一个像这样的物体。 我的目标是引用数组,并使用。我根据这个答案和另一个答案编写了这个代码。 我将我的发送到以更新彼得的银牌。请求机构是: 问题是,当我使用将竞争对手设置为时,我不知道中有什么。我想使用整个来更新数组中的对象,但是当我这样做的时候,该对象被覆盖,所以彼得的银章变成了: 如何更新数组中的对象,当我知道对象的与所有字段从没有删除字段,我想保持? 我认为数组是空的,因为该对象已重新初始
我有一个使用Liquibase for PostgreSQL定义的现有模式。我正在添加对Oracle的支持,这需要进行重大更改。有些create-table标记只需更改数据类型即可工作,有些则不然(需要sql更改)。当前的changelog-schema文件在单个change-set下有多个create-table语句(我知道这不是一个好的设计,但这正是我现在要处理的),为了重用那些create-