使用顶点着色器确定线的方向

Posted

技术标签:

【中文标题】使用顶点着色器确定线的方向【英文标题】:Determining line orientation using vertex shaders 【发布时间】:2010-04-01 11:21:42 【问题描述】:

我希望能够计算线到眼睛坐标的方向,并使用顶点和片段着色器为线上的每个像素存储该值。我的想法是在每对顶点的模型视图转换之后使用 atan2(Gy/Gx) 计算方向梯度,然后将此值量化为颜色强度以传递给片段着色器。我怎样才能访问顶点对的位置来实现这一点,或者我应该使用另一种方法吗? 谢谢

【问题讨论】:

【参考方案1】:

我怎样才能获得职位 顶点对?

如果您只使用顶点和片段着色器,则不能简单地做到这一点。简单的方法是使用geometry shaders。在此着色器阶段中,您可以访问组成线段的一对顶点。然后就可以直接确定线的方向并将其传递给片段着色器。

如果几何着色器不是一个选项(因为您的目标受众),您可以复制几何体(在每个顶点中存储实际顶点加上下一个顶点),然后在顶点着色器中进行计算。

【讨论】:

抱歉应该说使用 OpenGL 2.1 所以无法访问几何着色器。我知道我可以将下一个顶点传递给着色器,但我如何确定当前正在渲染的顶点。我目前使用 drawElements 函数。我是否需要在glBegin(GL_QUADS)之后使用glVertex3f列出所有顶点,然后在每次调用后传递一个具有下一个顶点位置的统一vec3? @Brett 你想使用一个额外的顶点属性,你总是会放置下一个顶点。所以你的顶点数组现在将是原来的两倍,并且你的顶点着色器可以访问这两个值。

以上是关于使用顶点着色器确定线的方向的主要内容,如果未能解决你的问题,请参考以下文章

损坏的顶点和片段着色器

OpenGL学习随笔-- 顶点着色器(VertexShader)

片段着色器是不是处理来自顶点着色器的所有像素?

几何着色器被错误地解释为顶点着色器

Unity Shader:几何着色器

顶点着色器+片段着色器