如何对三角形或三角形的平面进行gouraud着色?

时间:2013-02-16 00:26:35

标签: javascript

如何对三角形或三角形以各自颜色给出的三角形或平面进行Gourad着色?

三角形ABC

点A具有坐标x1,y1和颜色r1,g1,b1

点B具有坐标x2,y2和颜色r2,g2,b2

点C具有坐标x3,y3和颜色r3,g3,b3

任何人都可以提供帮助

仅使用Javascript

1 个答案:

答案 0 :(得分:1)

好的,当然。这是C中的实现:http://www.nbb.cornell.edu/neurobio/land/oldstudentprojects/cs490-95to96/guo/report.html

如果记忆正确,我也会在Quake& /或Quake2源代码版本中找到。

说实话,我上次实施它已经有18年了。回到3d卡开始出现在消费者电脑上的时代。当然,即使是可用于directX和openGL的板载图形芯片也有硬件实现。 当然,有能力使用WebGL在网页中利用openGL。

该算法非常简单直接。你渲染水平线条。每行都有一个开始颜色和一个结束颜色。您只需在这两点之间插入颜色即可。为了获得每条水平线的起始颜色和结束颜色,您可以插入每个顶点给出的颜色。

它只是颜色本身的线性插值 - 颜色仅在面部法线和光矢量的每个顶点处计算,不像Phong模型,它插入入射角度,然后用于计算每个像素的颜色。 (Phong允许在多边形中间使用镜面高光,当高亮区域中包含顶点时,Gouraud允许它们。由于每个三角形有3个点积,因此每个像素的点积为Gouraud计算成本也要便宜得多。蓬)

使用1个成分的粗略示例,比3

?...?
.....
.....
.....
?...?

1...?
.....
.....
.....
5...?

1...2
.....
.....
.....
5...3

11122
22222
33322
44433
55433

仅从算法的描述中实现是非常令人满意的。 您可能会发现一些有用的资源:

shaderToy(webGL演示) - http://www.iquilezles.org/apps/shadertoy/

Gouraud阴影的例子 - http://eng-przemelek.blogspot.com.au/2010/05/gouraud-shading-in-javascript.html

玩得开心!

相关问题