首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blinn Phong渲染

Blinn Phong渲染
EN

Computer Graphics用户
提问于 2016-07-19 22:00:48
回答 1查看 385关注 0票数 0

我试图将Blinn Phong渲染为平面上的BRDF模型。我假设每个像素中的每一个法线都与平面垂直。我知道要进行渲染,我们必须使用3d编程API,如OpenGL或WebGL等等。

我的目的是在没有这些API的情况下渲染表面平面。我采取的步骤是,我创建了两个空格:

  1. 图像空间:(0,0)位于图像的左上角。
  2. 相机空间:(0,0)在图像的中间。

在矢量计算中,将图像空间的每个像素位置转换为摄像机空间,然后再转换为世界空间。

代码语言:javascript
复制
double[] cam=((new double[]{0,0,1}));
double[] lum=((new double[]{0,0,1}));
double[] E=new double[3];
double[] L=new double[3];
double[] H=new double[3];
double D2;
Mat image=new Mat(rows,cols,CvType.CV_8UC3);
System.out.println("Start!!");
System.out.println("ok");
for(int i=0;i<tileHNumber;i++)
{
    for(int j=0;j<tileWNumber;j++)
    {
        for(int s=0;s<192;s++)
        {
            for(int t=0;t<192;t++)
            {
                originS=s+192*i;//ligne
                originT=t+192*j;//colonne
                double[] pos=(Image2Cam(new double[]{originT,originS,0}));
                E=normalize(XY(cam,pos));
                L=normalize(XY(lum, pos);
                double[] le=addXY(L,E);
                H=normalize(le);
                D2=dot(E,E);
                double blue=color(blueColor,pos,E,L,H,D2);
                double green=color(greenColor,pos,E,L,H,D2);
                double red=color(redColor,pos,E,L,H,D2);
                image.put(originS, originT, new byte[]{(byte)(blue),(byte)(green),(byte)(red)});
            }
        }
    }
}
public static double color(double col,double[] pos,double[] E,double[] L,double[] H,double D2)
{
    double value=0;
    double[] N=normalize((new double[]{pos[0],pos[1],1}));
    double diffuse=Math.max(0, dot(N,L));
    double specular=Math.pow(Math.max(0, dot(N,H)),60);
    value=d*diffuse*0.5+0.2*d+specular*255*0.3;
    return value;
}

下面的两个图像显示了我的结果:第一个只显示漫射图像。第二幅只显示由白色表示的镜面图像。

我的问题是为什么镜片不是围绕着图像的中心。

EN

回答 1

Computer Graphics用户

发布于 2016-07-20 08:43:25

如果我猜对了,你画的是一个面对摄像机的平面,所以你的法线应该是0,0,-1。

变化

double[] N=normalize(新double[]{pos0,pos1,1});

double[] N=normalize((新double[]{0,0,-1}));

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

https://computergraphics.stackexchange.com/questions/3768

复制
相关文章

相似问题

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