.. _global-constants: **************** 全局常量 **************** DSHL 支持一些内置的全局常量,您可以在预着色器 :ref:`preshader` 中获取这些常量,然后在 ``hlsl`` 块中使用。 常量列表: - ``globtm`` -- ``float4x4`` 世界-视图-投影矩阵 - ``projtm`` -- ``float4x4`` 投影矩阵 - ``viewprojtm`` -- ``float4x4`` 视图-投影矩阵 - ``local_view_x, local_view_y, local_view_z, local_view_pos`` -- 逆视图矩阵的 1..4 列, 为 ``float3`` 格式 - ``world_local_x, world_local_y, world_local_z, world_local_pos`` -- 世界变换矩阵的 1..4 列, 为 ``float3`` 格式 使用示例: .. code-block:: c shader example_shader { // 通过预着色器抓取全局常量 (vs) { viewprojtm@f44 = viewprojtm; world_local_x@f3 = world_local_x; world_local_y@f3 = world_local_y; world_local_z@f3 = world_local_z; world_local_pos@f3 = world_local_pos; } hlsl(vs) { float4 example_vs(float4 pos: POSITION0) { // 在 hlsl 中使用全局常量 float3 worldPos = float3(pos.x * world_local_x + pos.y * world_local_y + pos.z * world_local_z + world_local_pos); return mulPointTm(worldPos, viewprojtm); } } } .. warning:: 矩阵常量 ``globtm, projtm, viewprojtm`` 仅适用于 ``(vs)`` 预着色器。