首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将重心坐标传递给AGAL着色器?(AGAL线框明暗器)

如何将重心坐标传递给AGAL着色器?(AGAL线框明暗器)
EN

Stack Overflow用户
提问于 2013-01-18 16:27:32
回答 2查看 1.1K关注 0票数 2

我想创建一个线框效果使用在Stage3D的AGAL编写的着色器程序。

我一直在谷歌上搜索,我知道我可以使用通过顶点程序传入片段程序的barycentric coordinates (BC)来确定像素与三角形的边缘有多近,如果足够近,则对其进行相应的着色。

我的困惑是,我将使用什么方法将此信息传递到着色器程序中。我有一个简单的例子,设置了一个立方体,8个顶点和一个索引缓冲区来绘制使用它们之间的三角形。

如果我将BC放到顶点缓冲区中,那么这就没有意义了,因为它们需要根据渲染的三角形而有所不同;例如,当使用Vetex2和Vetex3渲染时,Vetex1可能需要(1,0,0),但是当使用Vetex5和Vetex6渲染时,可能需要另一个值。也许我没有完全理解这个方法。

我是否需要复制顶点位置并将额外的数据添加到顶点缓冲区中,实质上是每个三角形生成3个顶点,并使我的顶点数量增加三倍?我总是给顶点一个(1,0,0),(0,1,0)或(0,0,1)值,还是这只是一个例子?我是不是太复杂了,有没有一种更简单的方法来使用着色器和Stage3d来做线框?

希望这能完全解释我的问题。非常感谢您的回答,谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-07 00:27:02

这完全取决于你的几何图形,这个问题实际上是一个图形顶点着色的问题:你需要你的几何图形是3-可着色的。

例如,让我们假设(1, 0, 0)基向量是红色的,(0, 1, 0)是绿色的,(0, 0, 1)是蓝色的。很明显,如果您使用以下基本元素构建几何

然后,您可以避免重复顶点,因为这样的图将是3-可着色的(即,每条边,因此每个三角形,将具有不同颜色的顶点)。您可以在任何方向上平铺此基本元素,图形将保持3色:

票数 3
EN

Stack Overflow用户

发布于 2013-01-19 17:56:04

你偶然发现了让我对AGAL/Stage3D着迷的东西。API中的限制使您无法在许多情况下使用共享顶点。线框渲染是破坏down...but的一个例子,简单的平面着色也是另一个例子。您需要做的是为网格中的每个三角形创建三个唯一的顶点。对于每个顶点,添加一个额外的参数(或者设计您的引擎以接受顶点法线并重用这些法线,因为您不太可能对线框进行着色)。

分别为每个三角形分配一个单位向量A1,0,0,B0,1,0或C0,0,1。这将帮助您开始。请注意,显而易见的解决方案(片段着色器中的阈值和有条件地绘制像素)会产生相当丑陋的锯齿效果。请查看此页面,了解有关消除片段程序渲染线框的锯齿的技术:

http://cgg-journal.com/2008-2/06/index.html

正如我所提到的,如果您希望实现平面着色,则需要使用类似的技术(每个三角形的唯一顶点)。由于没有与GL_FLAT等效的方法,也没有办法使变化寄存器返回平均值,因此实现平面着色的唯一方法是为给定三角形的每个顶点过程计算相同的lighting...which,这意味着每个顶点需要相同的顶点法线。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14394983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档