用射线投射自己实现phong照明

时间:2013-01-19 23:27:21

标签: java raytracing phong

我正在尝试用Java编写一个程序,用渲染光线投射技术和phong照明来渲染球体,但我有点迷失。

我理解phong方程系数背后的概念,但我不明白如何得到矢量值,以及所有这些与光线投射的关系

所以我想说我想在屏幕中间渲染球体,我有它的位置和半径,所以(cx,cy,r)。我现在从哪里开始?我究竟如何得到矢量值?我的想法如下(伪代码)

int cx = window width/2
int cy = window height/2
int r = 30;
for(i = 0 -> window height) {
    for(j = 0 -> window width) {
        if( (j-cx)^2 + (i-cy)^2 < r^2) {
            //point inside
            Color c = phong(arguments..)
            draw pixel j,i with color c
        }

    }
}

但我不知道这是否正确,如果是,如何获得矢量值,对于初学者来说,正常?

你能用正确的方式指出我吗?我试过google很多但没有成功,谢谢你提前

1 个答案:

答案 0 :(得分:0)

用于计算法线的向量通常来自 real 几何对象的曲面细分(近似)。所以你将球体分解成三角形。然后每个三角形(p1,p2,p3)都有自己的法向量((p2-p1)×(p3-p1)。

phong着色方法是一个插值,然后(理想情况下)模糊赠送的线你正在绘制三角形而不是真正的范围。但是,这对两侧的角落没有帮助。 :(

对于曲面细分,一种方法是用Bezier surface patches近似球体,然后可以将其细分为适当的小尺寸并简化为三角形。 My question over here探索了做这项工作来绘制茶壶(主要是革命的表面,与球体不同)。