個々の頂点に異なる継続時間と遅延を使用して、3つの3Dモデルから3つの頂点に3つの頂点をモーフィングしたいと考えています。均一な変数を使用して異なる遷移遅延の頂点を移動する
まず、私は両方のモデルを読み込み、より大きなvert countでモデルを取り込み、頂点の位置をコピーします。
class CustomGeometry extends THREE.BufferGeometry {
constructor (refGeo1, refGeo2) {
super()
let count = refGeo1.attributes.position.count
let targets = new Float32Array(count * 3)
for (let i = 0; i < count; i += 3) {
// if there is no corresponding vertex, simply assign 0
targets[i + 0] = refGeo2.attributes.position.array[i + 0] || 0
targets[i + 1] = refGeo2.attributes.position.array[i + 1] || 0
targets[i + 2] = refGeo2.attributes.position.array[i + 2] || 0
}
this.addAttribute('position', refGeo1.attributes.position)
this.addAttribute('targetPosition', new THREE.BufferAttribute(targets, 3))
}
}
その後、私は均一な変数mixFactor
を渡し、私の頂点シェーダで行うことができます:その後、私は2番目のモデルを取ると、割り当てることがtargetPosition
属性として頂点位置だ
vec3 newPosition = mix(position, targetPosition, mixFactor)
そして、ここではライブですexample
これは、mixFactor変数が変更されたときに頂点が同じタイミング間隔で空間を一様に移動する点を除いては問題ありません。どのようにミックスに遅延と異なるタイミングを追加しますか?
は私がattribute float mixFactor
は、CPUにそれらのすべてを均一のinstedしてからトゥイーン行うことができます理解しますが、これは自分のパフォーマンスを殺すのだ...私はtransitionTiming
とtransitionDelay
フロートは、私の頂点に属性を追加する必要が疑われるが、失われています私のシェーダで数学を行う方法...
@gmanねえ、あなたの提案に感謝、残念ながら、私はそれを動作させるように見えることはできません。それは最初のモデルの位置がいくつかの奇妙な未定義の空間に終わる間に2番目のモデルをうまく表示することになります。あなたはここでそれをチェックすることができます:https://codepen.io/gbnikolov/pen/JyXKaW –
申し訳ありませんが、私はすべてを綴る必要があることを認識していませんでした。更新された答えを明確にしようとしました – gman
ちょっと@gman、時間をとってくれてありがとう!ちょっとゆっくりと始まる。 –