こんにちは私は最近webglを学び、それからある種のゲームを作ろうとしました。
これまでに作成したものはあまり意味がありませんが、ゲームロジックの一部が含まれています。
基本的には正方形を動かしたいのですが、一定のステップ内で正方形を動かすと、現在の位置が新しい正方形になり、前の正方形が大きくなったり長くなったりします。そして、あるポイントに到達すると、移動する正方形は最後の正方形を消去し、前の正方形から離れます。
これがデモです:https://codepen.io/zhenghaohe/pen/xMVeWq
まず、バッファに十分なスペースを割り当てます。
gl.bufferData(gl.ARRAY_BUFFER, 200*4*8, gl.STATIC_DRAW);
画像サイズ400ピクセルx200ピクセルの20x10の正方形グリッドがあり、最大200の正方形を含めることができます。正方形ごとに、4つの頂点(三角形のストライプ)を使用して描画します。すべての頂点は8バイト(2フロート)です。
次に、先頭の正方形の中心を移動し、bufferSubDateを使用して新しい頂点をバッファーに送信します
function setNewBuffer(dir) {
const newCenter = getNewCenter(dir,previousCenter);
const newVertices = getNewVertices(newCenter);
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
if(index === BREAK_POINT) {
index--;
}
gl.bufferSubData(gl.ARRAY_BUFFER, 32*index, new Float32Array(newVertices));
index++;
previousCenter = newCenter;
}
今のところ問題は、ブレークポイントに達した後、私の正方形が水平に動いているときだけ、それは適切に切り離されてそれ自体で動くことができます、しかし私がそれを垂直に動かすとそれはどういうわけかそれらの前の正方形と突然接続します。理由がわかりません。
誰かがこの問題で私を助けることができますか?コードについて何か提案があれば、遠慮なく教えてください。
ありがとう
You use four point value to draw a rectangle with TRIANGLE_STRIP
. TRIANGLE_STRIP
will use each three point value to make a triganle: [ABCD]
, webgl will draw triangle : ABC and BCD.
in your code :
initialVertices = [
0, 0,
0, 20,
20, 0,
20, 20,
];
When I enter RIGHT
it will create a new vertices like this(for example , plus 10px):
[
10, 0,
10, 20,
30, 0,
30, 20,
]
and your code will subbuffer data to add the new vertices data in the buffer , so whole vertices data in the buffer is :
[
0, 0,
0, 20,
20, 0,
20, 20,
10, 0,
10, 20,
30, 0,
30, 20,
];
it means the vertices data are [ABCDEFGH]
now.
TRIANGLE_STRIP
type will use each three points to draw triangle , so there is 6 triangles will be drawn not 4 : ABC BCD CDE DEF EFG FGH
, I think that you just want get : ABC BCD EFG FGH
triangles.
resolve:
use the degenerate triangle.
Don't use [ABCD]
vertices data directly , you can use [AABCDD]
, 6 points data to make a rectangle.
[AABCDD] -> AAB ABC BCD CDD , AAB and CDD
縮退した三角形であるため、webglはそれを描画しません。したがって、次のような新しい長方形のポイントデータを追加する[EEFGHH]
と、バッファ内のデータ全体が[AABCDDEEFGHH]
、webglによって三角形になります。
AAB ABC BCD CDD DDE DEE EFG FGH GHH
、
AAB CDD DDE DEE GHH
描画されないことがわかるので、2つの別個の長方形を取得できます。ABC BCD EFG FGH
あなたが私の優れた英語を理解できることを願っています
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加