跳转到主要内容

纹理映射器

纹理映射器是一种控件,能够绘制转换后的图像,可以自由缩放并围绕可调原点旋转。 视角印象也可通过应用虚拟相机来实现,其中视角的数量是可调的。

Note
  • 该控件对MCU负载有很大影响。
  • 该控件不支持每像素1位的色深。
  • 在模拟器中运行的纹理映射器

    控件组

    纹理映射器位于TouchGFX Designer中的图像控件组中。

    TouchGFX Designer中的纹理映射器

    属性

    TouchGFX Designer中纹理映射器的属性。

    属性组属性说明
    名称控件的名称名称是TouchGFX Designer和代码中使用的唯一标识符
    位置XY 指定控件左上角相对于其父的位置。

    WH 指定控件的宽度和高度。

    锁定指定控件是否应锁定为其当前的X、Y、W和H。
    如果锁定控件,还会禁止通过屏幕与控件进行交互。

    可见 指定控件的可见性。
    如果将控件标记为不可见,还会禁止通过屏幕与控件进行交互。

    动画纹理映射器指定纹理映射器是否应该生成为动画纹理映射器。
    图像图像指定要转换的图像。

    锁定图像到中心 指定图像位置是否应锁定在控件的中心。
    如果纹理映射器在运行时调整大小,该选项不会为图像保持居中位置。.

    XY 指定要转换的图像左上角在控件中的位置。
    角&缩放X轴角Y轴角Z轴角指定图像在控件内的旋转变换。
    角度的单位是弧度。

    缩放指定图像在控件内的缩放变换。
    原点锁定原点到中心指定图像的旋转点是否应锁定在控件的中心。
    如果纹理映射器在运行时调整大小,该选项不会保持居中的原点位置。.

    X轴原点, Y轴原点Z轴原点指定一个点,让控件内的图像围绕其进行旋转和缩放。

    如需了解更多细节,请参阅原点 & 相机一节
    相机相机距离指定虚拟相机的距离。
    当图像旋转时,这将改变视角数量。
    外观渲染算法 指定用于在控件内渲染图像的算法。
    选项有“最近邻插值”和“双线性插值”。

    Alpha 指定控件的透明度。
    控件Alpha值的范围是0到255。 0表示完全透明,255表示不透明。
    Mixin可拖动 指定在运行时控件是否可拖动。

    ClickListener 指定控件被点击时是否会调用回调函数。

    FadeAnimator 指定控件是否可绘制其 Alpha 值变化的动画。

    MoveAnimator 指定控件是否可绘制 XY 值变化的动画。

    原点&相机

    原点决定所选图像应该围绕哪个点进行变换。 坐标属性X轴原点Y轴原点与纹理映射器的宽度和高度有关,而与所选图像的宽度和高度无关。

    坐标属性Z轴原点相机距离有关。 如果相机距离设为1000,且图像应该围绕自己的轴旋转,Z轴原点也应设为1000。

    如要将变换位置锁定在纹理映射器的中心,请勾选“锁定原点到中心”的复选框。 这将锁定X轴原点Y轴原点属性到纹理映射r的中心,并将Z轴原点锁定到相机距离值。

    当图像旋转时,相机距离改变显示的视角数量。 相机距离越靠近,视野(FOV)变得越大,因此感知到的视角数量就会增加。

    在纹理映射器中用于原点和相机距离的坐标系统

    交互

    下面的部分介绍了纹理映射器支持的操作和触发条件。

    Note
    如果一个旋转或缩放交互被应用到一个纹理映射器,它的持续时间或延迟大于零,它将被生成为AnimationTexture映射器。

    操作

    控件特有的操作说明
    旋转纹理映射器将纹理映射器围绕其X轴、Y轴和Z轴原点,相对于其当前方向或相对于特定角度进行旋转。
    缩放纹理映射器缩放纹理映射器(相对于其当前尺寸或相对于特定尺寸)。
    调整控件的尺寸调整控件的宽度和高度。
    标准控件操作说明
    移动控件随时间的推移将控件移动到新位置。
    渐隐控件随时间的推移改变控件的Alpha值。
    隐藏控件隐藏控件(将可见性设置为false)。
    显示控件使隐藏的控件可见(将可见性设置为true)。

    触发条件

    纹理映射器不会产生任何触发条件。

    性能

    纹理映射器严重依赖于MCU对图像进行缩放和旋转。 因此,在大部分平台上,会将纹理映射器视为要求高的控件。

    关于绘图性能的更多信息,请阅读通用UI组件性能部分。

    示例

    生成代码

    在生成的视图基类的代码中,可以查看TouchGFX Designer是如何创建纹理映射器的。

    Screen1ViewBase.cpp
    #include <gui_generated/screen1_screen/Screen1ViewBase.hpp>
    #include "BitmapDatabase.hpp"

    Screen1ViewBase::Screen1ViewBase() :
    interaction1Counter(0)
    {
    textureMapper.setXY(150, 46);
    textureMapper.setBitmap(touchgfx::Bitmap(BITMAP_BLUE_LOGO_TOUCHGFX_LOGO_ID));
    textureMapper.setWidth(180);
    textureMapper.setHeight(180);
    textureMapper.setBitmapPosition(26.000f, 26.000f);
    textureMapper.setScale(1.000f);
    textureMapper.setCameraDistance(1000.000f);
    textureMapper.setOrigo(90.000f, 90.000f, 1000.000f);
    textureMapper.setCamera(90.000f, 90.000f);
    textureMapper.updateAngles(-0.500f, -0.500f, -0.500f);
    textureMapper.setRenderingAlgorithm(touchgfx::TextureMapper::BILINEAR_INTERPOLATION);

    add(textureMapper);
    }

    void Screen1ViewBase::setupScreen()
    {

    }
    Tip
    可在用户代码中使用这些函数以及TextureMapper类中提供的其他函数。 如果更改控件的外观,请必须调用 textureMapper.invalidate() 强制进行重新绘制。

    用户代码

    如果纹理映射器被设置为动画纹理映射器,可以设置两个回调函数:

    • 每次当前动画执行一个步骤时,都会调用setTextureMapperAnimationStepAction
    • 当所有动画结束时调用setTextureMapperAnimationEndedAction

    下面两段代码演示了如何设置这两个回调函数:

    Screen1View.hpp
    class Screen1View
    {
    public:
    Screen1View();
    virtual ~Screen1View() {}
    virtual void setupScreen();
    virtual void tearDownScreen();
    private:
    /*
    * Callback Declarations
    */
    touchgfx::Callback<Screen1View, const touchgfx::AnimationTextureMapper&> textureMapperStepActionCallback;
    touchgfx::Callback<Screen1View, const touchgfx::AnimationTextureMapper&> textureMapperAnimationEndedCallback;

    /*
    * Callback Handler Declarations
    */
    void textureMapperStepActionCallbackHandler(const touchgfx::AnimationTextureMapper& src);
    void textureMapperAnimationEndedCallbackHandler(const touchgfx::AnimationTextureMapper& src);
    };
    Screen1View.cpp
    #include <gui/screen1_screen/Screen1View.hpp>

    Screen1View::Screen1View() :
    textureMapperStepActionCallback(this, &Screen1View::textureMapperStepActionCallbackHandler),
    textureMapperAnimationEndedCallback(this, &Screen1View::textureMapperAnimationEndedCallbackHandler)
    {
    textureMapper.setTextureMapperAnimationStepAction(textureMapperStepActionCallback);
    textureMapper.setTextureMapperAnimationEndedAction(textureMapperAnimationEndedCallback);
    add(textureMapper);
    }

    void Screen1View::textureMapperStepActionCallbackHandler(const touchgfx::AnimationTextureMapper& src)
    {
    if (&src == &textureMapper)
    {
    //execute code whenever the animation running in AnimationTextureMapper steps
    }
    }

    void Screen1View::textureMapperAnimationEndedCallbackHandler(const touchgfx::AnimationTextureMapper& src)
    {
    if (&src == &textureMapper)
    {
    //execute code whenever the animation running in AnimationTextureMapper ends
    }
    }

    TouchGFX Designer示例

    如需进一步了解纹理映射器,请尝试在TouchGFX Designer中使用下列UI模板之一创建新应用:

    TouchGFX Designer中的纹理映射器示例UI模板

    TouchGFX Designer中的动画纹理映射器示例UI模板

    API参考