でテンプレートのセットアップをいじっているだけMTKView
です。そして、私は次のことを理解しようとしています:
カメラのデフォルトの位置。
MDLMesh
とを使用してプリミティブを作成するときのデフォルトの場所MTKMesh
。回転に平行移動が含まれるのはなぜですか。
関連コード:
matrix_float4x4 base_model = matrix_multiply(matrix_from_translation(0.0f, 0.0f, 5.0f), matrix_from_rotation(_rotation, 0.0f, 1.0f, 0.0f));
matrix_float4x4 base_mv = matrix_multiply(_viewMatrix, base_model);
matrix_float4x4 modelViewMatrix = matrix_multiply(base_mv, matrix_from_rotation(_rotation, 0.0f, 1.0f, 0.0f));
上記のコードは_update
、テンプレートによるメソッドからのものです。明らかに、カメラの代わりにモデルを回転させようとしています。しかし、私を困惑させているのは、翻訳も必要であるという事実です。「常に回転するから」などの主張を読んだことがあります(0, 0, 0)
。しかし(0, 0, 0)
、オブジェクトが別の場所に配置されている場合、なぜでしょうか? また、次のように変更すると、カメラは通常の負の z 軸ではなく、正の z 軸 (質問 1 ) を見ているように見えます。
matrix_float4x4 base_model = matrix_multiply(matrix_from_translation(0.0f, 0.0f, 5.0f), matrix_from_rotation(_rotation, 0.0f, 1.0f, 0.0f));
に:
matrix_float4x4 base_model = matrix_multiply(matrix_from_translation(0.0f, 0.0f, -5.0f), matrix_from_rotation(_rotation, 0.0f, 1.0f, 0.0f));
オブジェクトがカメラの後ろにあるように見えるため、画面には何も表示されません。これは、カメラが正の z 軸を見ていることを意味します。
(すべてゼロ)を設定すると、オブジェクトは期待どおりにmatrix_from_translation(0.0f, 0.0f, 0.0f)
y 軸 (質問 3 ) 上で回転しません。
MDLMesh
andMTKMesh
がデフォルトで配置されている場所を見つけようとしましたが(質問 2 )、その位置を記録するプロパティが見つかりませんでした。以下は、同じくテンプレートによる、プリミティブの作成方法です。
MDLMesh *mdl = [MDLMesh newBoxWithDimensions:(vector_float3){2,2,2} segments:(vector_uint3){1,1,1}
geometryType:MDLGeometryTypeTriangles inwardNormals:NO
allocator:[[MTKMeshBufferAllocator alloc] initWithDevice: _device]];
_boxMesh = [[MTKMesh alloc] initWithMesh:mdl device:_device error:nil];
上記の方法で生成された位置を知らなければ、回転と移動がどのように機能するか、Metal のカメラのデフォルトの位置を理解するのに役立ちます。
ありがとう。