Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解Haskell图形程序中的TextureBlitt是什么_Haskell_Graphics_Opengl Es_Window Managers - Fatal编程技术网

了解Haskell图形程序中的TextureBlitt是什么

了解Haskell图形程序中的TextureBlitt是什么,haskell,graphics,opengl-es,window-managers,Haskell,Graphics,Opengl Es,Window Managers,在私有窗口管理器/合成器Haskell存储库中,我遇到了以下我试图理解的数据类型: data TextureBlitter = TextureBlitter { _textureBlitterProgram :: Program, -- OpenGL Type _textureBlitterVertexCoordEntry :: AttribLocation, -- OpenGL Type _textureBlitterTextureCoordEn

在私有窗口管理器/合成器Haskell存储库中,我遇到了以下我试图理解的数据类型:

data TextureBlitter = TextureBlitter {
  _textureBlitterProgram :: Program,                  -- OpenGL Type
  _textureBlitterVertexCoordEntry :: AttribLocation,  -- OpenGL Type
  _textureBlitterTextureCoordEntry :: AttribLocation, -- OpenGL Type
  _textureBlitterMatrixLocation :: UniformLocation    -- OpenGL Type
  } deriving Eq
类型
Program
AttribLocation
UniformLocation
都来自于此

问题:我在网上找不到关于“纹理闪电器”概念的好信息。所以我希望有更多专业知识的人能马上对这种类型(可能)的用途有一个很好的猜测

我假设字段
\u textureBlitterProgram::Program
是一个OpenGL着色器程序。但是其他的条目呢?作为一个整体,
texturebillt
应该代表什么

编辑:我在我的回购着色器中发现了同名的:

//textureblitter.vert
#version 300 es
precision highp float;

uniform highp mat4 matrix;
in highp vec3 vertexCoordEntry;
in highp vec2 textureCoordEntry;
out highp vec2 textureCoord;
void main() {
   textureCoord = textureCoordEntry;
   gl_Position = matrix * vec4(vertexCoordEntry, 1.);
}


我不使用haskell或它的OpenGL包。但是您公开的名称和着色器非常具有描述性。我将尝试用OpenGL术语解释什么是纹理。 假设你有一张宽x高的照片。假设它保存在二维矩阵中。
我们使用标准化坐标(即在[0-1]范围内):
u=a/w
v=b/h
,而不是通过a、b坐标来访问矩阵中的像素。这些公式需要
u
v
类型的
float
,因此不会对整数进行舍入。 使用
u,v
坐标可以访问“通用”矩阵中的任何像素。 现在,您希望在屏幕上显示该图片。它的矩形可以通过透视投影进行缩放、旋转甚至变形。不知怎的,你知道矩形的最后四个坐标。 如果还使用标准化坐标(同样在[0-1]范围内),则图片坐标和矩形坐标之间的映射会使图片调整为[可能变形的]矩形。 这就是OpenGL的工作原理。传递矩形的顶点,并使用一些矩阵计算它们的标准化最终坐标。您还可以传递图片矩阵(称为纹理)并将其映射到这些最终坐标。 完成所有这些计算和映射的程序是一个着色器,它通常由两个子着色器组成:一个逐顶点工作的顶点着色器(VS每个顶点只运行一次);和一个碎片着色器,用于碎片(顶点之间的插值点)

textureblitt或“将图片快速显示在屏幕上的对象”

  • 设置要使用的程序(着色器)。可以有多个着色器 具有不同的效果(例如修改图片的颜色)。只要选择一个
  • 设置顶点。
    attribloation
    表示工作点 顶点与使用它的着色器之间的连接 (着色器术语中的属性)
  • “图片”坐标也一样
  • 设置变换顶点的矩阵。因为这对我来说是一样的 在所有顶点中,使用另一种类型的连接:
    UniformLocation
    (一种 用着色器的说法是统一的)

我想你可以找到一个很好的教程,里面有关于如何设置和使用这个“纹理blitter”的示例。

我不使用haskell或它的OpenGL包。但是您公开的名称和着色器非常具有描述性。我将尝试用OpenGL术语解释什么是纹理。 假设你有一张宽x高的照片。假设它保存在二维矩阵中。
我们使用标准化坐标(即在[0-1]范围内):
u=a/w
v=b/h
,而不是通过a、b坐标来访问矩阵中的像素。这些公式需要
u
v
类型的
float
,因此不会对整数进行舍入。 使用
u,v
坐标可以访问“通用”矩阵中的任何像素。 现在,您希望在屏幕上显示该图片。它的矩形可以通过透视投影进行缩放、旋转甚至变形。不知怎的,你知道矩形的最后四个坐标。 如果还使用标准化坐标(同样在[0-1]范围内),则图片坐标和矩形坐标之间的映射会使图片调整为[可能变形的]矩形。 这就是OpenGL的工作原理。传递矩形的顶点,并使用一些矩阵计算它们的标准化最终坐标。您还可以传递图片矩阵(称为纹理)并将其映射到这些最终坐标。 完成所有这些计算和映射的程序是一个着色器,它通常由两个子着色器组成:一个逐顶点工作的顶点着色器(VS每个顶点只运行一次);和一个碎片着色器,用于碎片(顶点之间的插值点)

textureblitt或“将图片快速显示在屏幕上的对象”

  • 设置要使用的程序(着色器)。可以有多个着色器 具有不同的效果(例如修改图片的颜色)。只要选择一个
  • 设置顶点。
    attribloation
    表示工作点 顶点与使用它的着色器之间的连接 (着色器术语中的属性)
  • “图片”坐标也一样
  • 设置变换顶点的矩阵。因为这对我来说是一样的 在所有顶点中,使用另一种类型的连接:
    UniformLocation
    (一种 用着色器的说法是统一的)

我想你可以找到一个很好的教程,里面有关于如何设置和使用这个“纹理blitter”的示例。

大概TextureBlitter是一个blits纹理的东西,你可以很容易地找到
程序是一个OpenGL着色器程序,
AttriblLocation
是对顶点att的引用
//textureblitter.frag
#version 300 es
precision highp float;

uniform sampler2D uTexSampler;
in highp vec2 textureCoord;
out highp vec4 fragmentColor;

void main() {
   fragmentColor = texture2D(uTexSampler, textureCoord);
}