如何对三角形或三角形以各自颜色给出的三角形或平面进行Gourad着色?
三角形ABC
点A具有坐标x1,y1和颜色r1,g1,b1
点B具有坐标x2,y2和颜色r2,g2,b2
点C具有坐标x3,y3和颜色r3,g3,b3
任何人都可以提供帮助
仅使用Javascript
答案 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
玩得开心!