我只是在玩模板设置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 轴(问题 1)而不是通常的负 z 轴,因为如果我改变:
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
and的位置(问题 2),但我找不到记录其位置的属性。以下也是通过模板创建原语的方式:MTKMesh
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 中的默认位置的理解。
谢谢。