如何在GTK或Cairo中将纹理应用于四边形?

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

我正在尝试使图像适合四边形。

#include <gtk/gtk.h>

int main(int argc, char *argv[]) {
    gtk_init(&argc, &argv);
    GtkWidget (*Image) = gtk_image_new_from_file("image.png");
    GtkWidget (*Window) = gtk_window_new(0);
    gtk_image_set_pixel_size(GTK_IMAGE(Image), 200);
    gtk_container_add(GTK_CONTAINER(Window), Image);
    gtk_widget_show_all(Window);
    gtk_main();
    return 0;
}

假设我有8个变量。每个对应于四边形的顶点。 x1 y1 x2 y2 x3 y3 x4 y4这八个数字对应于可用于构造四边形的窗口/绘图区域上的四个点。这些数字表示的点是从窗口左起的x像素和从窗口的顶部起是y的像素,由于有4个,因此数字表示哪个。我已经很长时间试图解决这个问题了。如何使用它们创建四边形,并拉伸图像使其适合内部?另外,如果可能的话,我想避免包括标准文件和gtk以外的头文件。基本上,我需要从方形文件中加载图像,然后对其进行转换以匹配所需的形状。我该怎么做?不要以为我正在尝试编辑图像文件,实际上是在为块沙箱游戏渲染块面。

我的确感谢您的帮助,但我仍然不太了解如何做我正在描述的事情。我需要知道的是我是否应该使用GtkDrawingArea

I think I found something for the Mac version of what I am looking for,但是我该如何在GTK中做到这一点?

有关更多信息,我正在尝试以3D游戏的形式渲染纹理。

在Metal教程中,这是第一个教授的功能。在GTK / Cairo中可以做到这一点吗,还是我需要取消进度并使用OpenGL或其他适用于Linux的东西。

c image gtk3
1个回答
1
投票

您正在谈论的是任意线性变换。由于Gtk建立在开罗图形的顶部,因此您很适合在其中显示(https://www.cairographics.org/manual/cairo-Transformations.html)。所有线性变换都可以由一个变换矩阵表示,cairo将其用作绘图模型的一部分。但是它确实说这是一个仿射矩阵,表示保留了平行线(即,并非所有线性变换都可以表示,并且四边形也必须是平行四边形)。

仿射矩阵的使用在许多图形后端很常见。如果您想绕开它以获得任意失真(例如透视图),则使用ImageMagick(具有FFMPEG作为后端)将是一个不错的方法。 OpenGL也将具有这些功能(例如,如果是3D,则需要使用此功能进行正交投影)

为了获得转换矩阵,您将需要解决一组联立方程。对此有帮助的软件包括libBLAS,Eigen和OpenCV。

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