Slide 18
Slide 18 text
Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved.
作ったもの紹介
18
// eventからマウス位置を取って、座標位置から cube回転させればマウスでコ
ントロール可能だが、幾何計算が必要なのでライブラリとかに頼りたい
// 既存のWeb資産(npmとか)にあるにはあるが、ターゲットが Canvasとかで、
Canvas自体へのイベント追加とかで動くのでそのままだと流用できない
(3d-view-controlsとか)
// surfaceがAPI的にcanvasのWrapperだとラクできそうだけど・・・・
for await (const event of win.events(false)) {
if (event.type === EventType.Quit) break;
const transformationMatrix = getTransformationMatrix();
device.queue.writeBuffer(
uniformBuffer,
0,
transformationMatrix.buffer,
transformationMatrix.byteOffset,
transformationMatrix.byteLength,
);
const renderPassDescriptor: GPURenderPassDescriptor = {
colorAttachments: [
{
view: context.getCurrentTexture().createView(),
clearValue: { r: 0.5, g: 0.5, b: 0.5, a: 1.0 },
loadOp: "clear",
storeOp: "store",
},
],
depthStencilAttachment: {
view: depthTexture.createView(),
depthClearValue: 1.0,
depthLoadOp: "clear",
depthStoreOp: "store",
},
};
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
passEncoder.setPipeline(pipeline);
passEncoder.setBindGroup(0, uniformBindGroup);
passEncoder.setVertexBuffer(0, verticesBuffer);
passEncoder.draw(cubeVertexCount);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
surface.present();
}