如何在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 这8个数字对应于windowdrawing区域上的4个点,可以用来构造一个四边形。这些数字代表的点是 x 左边的像素和 y 从窗口的顶部,既然有4个,那么数字就代表哪一个。我一直想弄明白这个问题。我如何使用这些来创建一个四边形,并将图像拉伸到合适的位置?另外,我想尽可能避免包含标准文件和gtk以外的头文件。基本上,我需要从一个文件中加载一个正方形的图像,然后将其转换为所需的形状。我到底该怎么做呢?不要以为我是在尝试编辑图像文件,实际上我是在尝试为一个积木沙盒游戏渲染积木面。

我很感谢你的帮助,但我还是不知道如何做我所描述的事情。我需要知道的是,我是否应该用一个 GtkDrawingArea 还是没有?

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

为了更多的信息,我正试图以3D游戏的形式渲染纹理。

在Metal教程中,这是首先教授的功能之一。这在GTKCairo中可以实现吗,还是说我需要废掉我的进度,使用Linux的OpenGL或者其他什么东西。

c image gtk3
1个回答
1
投票

你所说的是一个任意的线性变换。因为Gtk是建立在cairo图形之上的,你可以在其中寻找(https:/www.cairographics.orgmanualcairo-Transformations.html). 所有的线性变换都可以用变换矩阵来表示,开罗使用这个矩阵作为其绘图模型的一部分,但是它说它是一个非线性矩阵,这意味着平行线会被保留下来(即不是所有的线性变换都可以用它来表示,你的四边形也必须是平行四边形)。不过,它确实说它是一个仿射矩阵,这意味着平行线会被保留下来(也就是说,并不是所有的线性变换都可以用它来表示,你的四边形也必须是一个平行四边形)。

对于很多图形后端来说,使用仿射矩阵是很常见的。如果你想绕过它来处理任意变形(例如透视),使用ImageMagick(有FFMPEG作为后端)将是一个很好的方法。OpenGL也有这些功能(由于是3D,你需要做正交投影等)。

为了得到变换矩阵,你需要解决一组同步方程。可以帮助解决这个问题的软件包括libBLAS、Eigen和OpenCV。

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