C语言 如何将纹理应用于 GTK 或开罗中的四边形?



我正在尝试制作一个适合四边形的图像。

#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

我想我找到了我正在寻找的 Mac 版本的东西,但我如何在 GTK 中做到这一点?

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

在 Metal 教程中,这是首先教授的功能之一。这在GTK/Cairo中是否可能,或者我需要放弃我的进步并使用OpenGL或Linux的东西。

你说的是任意线性变换。由于Gtk建立在开罗图形之上,因此非常适合在其中查看(https://www.cairographics.org/manual/cairo-Transformations.html)。所有线性变换都可以由变换矩阵表示,开罗将其用作其绘图模型的一部分。然而,它确实说它是一个仿射矩阵,这意味着平行线被保留(即并非所有线性变换都可以表示,你的四边形也必须是一个平行四边形)。

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

为了得到变换矩阵,你需要求解一组联立方程组。对此有帮助的软件包括libBLAS,Eigen和OpenCV。

相关内容

  • 没有找到相关文章