Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
User interface 我可以把一个矩形表示为xywhrgb吗?_User Interface_Opengl_Graphics_Glsl - Fatal编程技术网

User interface 我可以把一个矩形表示为xywhrgb吗?

User interface 我可以把一个矩形表示为xywhrgb吗?,user-interface,opengl,graphics,glsl,User Interface,Opengl,Graphics,Glsl,我正在学习OpenGL,并且一直在尝试为GUI创建小部件。将单色框渲染为(pos,color)[4]对我来说似乎有点浪费。有没有办法将其压缩到(x,y,w,h,color) 我不会画足够多的矩形,这会很重要,但我很好奇 注意:为了方便起见,我用一个元组表示每个顶点/对象。好吧,您可以通过某种方式将代码抽象到使用这些参数的某个类,就像SDL2所做的那样。没有OpenGL类可以帮助您解决这些问题。比如: struct Vertex { glm::vec3 position; glm:

我正在学习OpenGL,并且一直在尝试为GUI创建小部件。将单色框渲染为
(pos,color)[4]
对我来说似乎有点浪费。有没有办法将其压缩到
(x,y,w,h,color)

我不会画足够多的矩形,这会很重要,但我很好奇


注意:为了方便起见,我用一个元组表示每个顶点/对象。

好吧,您可以通过某种方式将代码抽象到使用这些参数的某个类,就像SDL2所做的那样。没有OpenGL类可以帮助您解决这些问题。比如:

struct Vertex {
    glm::vec3 position;
    glm::vec3 color;
};
class Model {
private:
    std::vector<Vertex> mVertices;
public:
    Model(/* Pass Vertices or Load Model through OBJ */);
};
struct顶点{
glm::vec3位置;
glm::vec3颜色;
};
类模型{
私人:
std::向量向量向量;
公众:
模型(/*通过OBJ传递顶点或加载模型*/);
};
这就是我使用的,抱歉,没有传递顶点,而是传递无符号整数宽度、无符号整数高度、无符号整数xpo、无符号整数ypo,并将它们传递给变换矩阵。
希望有帮助

好吧,在对Spektre给出的提示进行了一些实验之后,我想我有了一个解决方案

我已经习惯于将形状表示为:

struct Shape {
  enum Kind : byte {
    LineRect,
    FillRect,
    ...
  }

  float2 position, extent;

  uint color;

  Kind kind;
}
顶点着色器获取该结构,并将整个对象连同投影矩阵传递给几何体着色器以生成顶点。几何体着色器将打开
kind
,并发射形状的顶点,将每个顶点乘以投影矩阵


此格式需要21个字节(
float
float+
float
+
float
+
uint
+
byte
)来表示矩形、圆、等腰三角形以及可能的椭圆。我有理由相信纹理矩形也是可能的,在uv坐标下,
color
分为
ushort[2]

是。。。几何体着色器可以从填充矩形的单顶点2个三角形发射…您可以使用它来绘制圆、轮廓等。使用相同的着色器也可以这样,不是吗?是的。。。但在圆的情况下,你们需要发出超量的形状,并在片段中决定是像素在里面还是
丢弃
。类似这样的情况:因为对单个基本体可以发射的顶点数量有限制。。。您可能对此感兴趣您是否熟悉OpenGL实例?如果你利用了这一点,你可以让你的法线
(0,0),(0,1),(1,0),(1,1)
坐标只指定一次,然后对每个实例只指定一个颜色,x,y,w,h等。但是,理想情况下,我希望能够在一次绘制调用中渲染多个对象类型。它可能(不是)最有效,但对我来说,它更容易使用。