问题标签 [geometry-shader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2481 浏览

c++ - opengl 绘制二维坐标而不是顶点坐标系

我如何绘制二维坐标而不是顶点坐标系,因为这 =>

在此处输入图像描述

这是我的代码,一个背景纹理和一个点

函数 DrawPoint => 画圆

所以我不知道我是否必须更改 DrawPoint 功能。

更新:这是我的主要来源

更新 2:

如果以这种方式不可能,是否有一种方法可以将 x 和 y 转换为向量?例如:

DrawPoint(VectConvert(50),VectConvert(100),0.01f);

0 投票
0 回答
480 浏览

opengl - 具有 GL_TRIANGLES_ADJACENCY_EXT 的曲面细分和几何着色器

我有一个小程序可以从一些 SRTM 数据中渲染地形。

我正在玩一些 glsl 新功能。我已经成功创建了一个 vs、tcs、tes、gs 和 fs,其中 gs 只是一个通过着色器:

现在,在 tcs 和 tes 中我添加了更多的三角形,我需要计算新的法线,所以我认为我必须在 gs 中使用 triangles_adjacency 选项进行计算,这样我就可以访问 4 个三角形的六个顶点。但是当我更改代码时:

没有什么是平局。我知道,如果我激活了曲面细分,我必须在绘制数组中使用 GL_PATCHES(我以这种方式制作),但我不明白我该怎么做才能看到这个 gs 的工作。

但是我的目标是在细分后计算新的法线;谁能最终帮助我在哪里计算它们?

0 投票
0 回答
810 浏览

opengl - 几何着色器 GLSL 的条件输出

我试图弄清楚如何在几何着色器中切换输出,特别是这两个输出:

我正在渲染星团,并使用几何着色器中生成的精灵拥有一个包含 100 000 多颗星星的数据集。但是,精灵“光晕”只有在我们靠近目标恒星时才会出现。

几何着色器

片段着色器

我最近遇到了几何着色器的,但找不到一个像样的例子来说明如何在我的实例中做到这一点。

如果需要发布更多代码,请告诉我。

0 投票
1 回答
790 浏览

c++ - How do you find the Y position of a point between four vertices? HLSL

Let's say there is a grid terrain for a game composed of tiles made of two triangles - made from four vertices. How would we find the Y (up) position of a point between the four vertices?

Terrain

I have tried this:

Where z/yOffset is the z/y offset from the first vertex of the tile in percent / 100. This works for flat surfaces but not so well on bumpy terrain.

I expect this has something to do with the terrain being made from triangles where the above may work on flat planes. I'm not sure, but does anybody know what's going wrong?

This may better explain what's going on here:

enter image description here

In the code above "heights[]" is an array of the Y coordinate of surrounding vertices v0-3. Triangle 1 is made of vertex 0, 2 and 1. Triangle 2 is made of vertex 1, 2 and 3.

I wish to find coordinate Y of p1 when its x,y coordinates lay between v0-3.

So I have tried determining which triangle the point is between through this function:

This isn't giving me the results I expected

I am then trying to find the y coordinate of point p1 inside each triangle:


Using the following to find the correct triangle:

And correcting the code above to use the correct cross function seems to have solved the problem.

enter image description here

0 投票
1 回答
867 浏览

opengl - GLSL EndPrimitive() 打破三角带

我正在使用运行 Mavericks 的 Intel HD 4000 图形的 Macbook Pro 上试验几何着色器。我注意到EndPrimitive()通话中有一些奇怪的行为。这是我的几何着色器:

该程序使用glfw并请求 OpenGL 3.2 核心上下文。我只画了一个顶点,[0, 0]我的目标是最终让我的几何着色器输出一个由多个三角形条带组成的方形网格。着色器按原样输出网格的单行。结果如下:

显然正确的输出

那时我想结束当前的三角形带原语并为下一行开始一个新的。然而,简单地取消注释EndPrimitive()上面着色器中的调用会破坏结果:

输出中断

我误解了什么EndPrimitive()吗?我的理解是它应该结束当前的三角形带并开始一个新的。由于在循环之后我没有做任何事情,因此无论有EndPrimitive()没有它,我的着色器的结果都应该是相同的。

另外,我现在无法测试不同的实现,会不会是我的错误?有什么我可以尝试查明这个问题的吗?

0 投票
2 回答
1485 浏览

opengl - GLSL中沿线带的屏幕空间距离

渲染线条时,如何获取片段到沿线条的整个线条起点的距离(以像素为单位)?

当在 3D 中渲染两个点之间的单个线段时,屏幕空间中这两个点之间的距离就是它们的 2D 投影之间的欧几里得距离。如果我渲染这个片段,我可以插入(GLSL 中的布局限定符 noperspective)从起点到每个片段的线的起点的屏幕空间距离。

但是,在渲染线条时,这不起作用,因为在几何着色器中,我只有有关当前段的起点和终点的信息,而不是所有先前段的信息。所以我用上面的方法可以计算的只是每个片段到线段起点的距离,而不是到线段起点的距离。但这就是我想要实现的。

我需要它来做什么:程式化的线条渲染。例如,根据屏幕覆盖率(以像素为单位的长度)为折线着色,每 50 个像素添加一个距离标记,沿线带交替多个纹理,...

我目前做的是:

  • 预先将线的每个点投影到 CPU 上
  • 以像素为单位计算所有投影线段的长度
  • 将长度作为顶点属性存储在缓冲区中(顶点 0 的距离为 0,顶点 1 的长度为 0->1,顶点 2 的长度为 0->1 + 1->2,...)
  • 在几何着色器中,创建线段并使用在 CPU 上计算的距离
  • 为每个片段插入没有透视校正的值

这行得通,但必须有更好的方法来做到这一点。每帧在 CPU 上投影几百或几千个线点是不可行的。在几何着色器中是否有一种聪明的方法来计算它?我所拥有的是当前线段起点和终点的世界空间位置,我有两个点到沿线的线带起点的世界空间距离(同样是顶点属性0、0- >1, 0->1 + 1->2, ...) 并且我可以提供关于线带的任何其他统一数据(以世界空间单位表示的总长度,线段数,...)。

编辑:我不想计算到线段起点的欧几里得距离,而是计算沿整条线的距离,即到当前片段的所有投影线段的长度之和。

0 投票
0 回答
333 浏览

opengl - GLSL 如何为几何着色器提供线输入?

在几何着色器中使用layout(points) in时,我可以简单地通过顶点着色器转发数据,方法是为 gl_Position 提供一个vec4

然后我可以gl_in[0].gl_Position在几何着色器中访问它。

但是,如果我想将输入输入到几何着色器中layout(lines) in呢?这可以通过顶点着色器转发值来完成,还是有其他方法?

简而言之:如何向几何着色器提供线数据,以便可以使用gl_in[0].gl_Positionand访问它gl_in[1].gl_Position

0 投票
1 回答
1408 浏览

c++ - 通过 GLSL 着色器传递数据

我在通过我的着色器传递数据时遇到了一些问题,尤其是几何着色器。我以前从未使用过几何着色器,所以我在理解它传递数据的方式时遇到了一些麻烦。

基本上,在几何着色器之前,我会使用输入/输出限定符将数据从顶点着色器传递到片段。就像我有:

顶点着色器!

片段着色器:

那么,对于几何着色器,我是否必须做这样的事情来传递数据?

我的问题是,如何在每个着色器之间正确传递数据?就像,这是这样做的方法吗?(因为它不适合我!)

0 投票
1 回答
8720 浏览

opengl - 将线带邻接与几何着色器一起使用

因此,我一直在尝试使用几何着色器从线带邻接图元中绘制一个圆柱体,它适用于 4 个顶点,但我想将其应用于更长的线带。问题是,它在第​​四个顶点之后完全混乱了。我知道原语使着色器可以访问邻接信息,但我不确定如何访问它,所以我的问题是:

如何使用邻接信息?而且,是否可以使用相同的绘图调用对多条线执行此操作?

如果你能提供它,我将非常感谢伪代码示例。

0 投票
1 回答
515 浏览

c++ - C++, OpenGL - 几何着色器

我被 OpenGL 中的几何着色器困住了——C++ 编程。我想通过重复 6 次绘制一个旋转的墙来创建简单的立方体。这是我的顶点着色器(每个都在序言中有#version 330核心):

现在几何着色器:

现在片段着色器:

好吧,有一些垃圾,我也想在我的立方体中添加阴影,但是我在发送坐标时遇到了问题。主要问题是 - 在这里我得到了我的缩放正方形(通过 MVP 矩阵),我什至可以用基本界面(ROT 矩阵)旋转它,但是当我取消注释我的“+offset”行时,我得到了一些混乱。我应该怎么做才能使清洁6次重复?