点基元中的纹理

问题描述 投票:0回答:1

我正在使用点法来绘制正方形。

commandEncoder.drawPrimitives(type: .point, vertexStart: 0, vertexCount:1 ) 

通过这个,我传递了屏幕尺寸的纹理。(可绘制尺寸)。我可以在着色器中绘制如下。

fragment half4 fragment_chalk(VertexOutChalk params[[stage_in]],
                               texture2d<half>texture4 [[texture(0)]],
                              float2 texcoord [[ point_coord ]]
                              )
{

    constexpr sampler defaultSampler;
    half4 alphaSample = texture4.sample(defaultSampler,texcoord) *half4(0.8666667, 0.101960786, 0.35686275,0.7);
    return alphaSample;

} 

但我的需要是不要绘制完整的纹理。我想绘制与特定正方形相对应的部分。对于纹理采样,我需要传递与屏幕相关的坐标。我想更改采样的坐标。我怎样才能做到这一点

ios swift metal metalkit
1个回答
0
投票

假设特定的 Square 位于 normalized 坐标中,且格式与 NSRect (origin.x, origin.y, size.width, size.height) 相同,那么您需要将其传递给 params,并像这样修改 texcoord这个:

texcoord = texcoord * params.PartSquare.size + FullTextureSize * params.PartSquare.origin;

© www.soinside.com 2019 - 2024. All rights reserved.