|
小弟初学OpenGL不久,最近在做一个东西的时候遇到一些问题,请教各位达人:)
我现在做的工作是:
1.从模型文件中读出所有三角形面片的顶点坐标
2.通过顶点坐标计算出三角形面片的法线
3.再通过每个三角形面片的法线求出每个顶点的法线
4.绘制
基本思路就是(从网上找到的:P)
Loop1:
foreach triangle
n = computeNormalofTri(triangle);
for i = 0 to 2
triangle.point.normal += n;
Loop2:
foreach point
Normalize( point.normal);
附上绘制代码:
for(m=0;m<triangle_loop.size();m++)
{
glBegin(GL_TRIANGLES);
for(n=0;n<3;n++)
{
//规范化法线
triangle_loop[m].p[n].VertexNormal = Normalize(triangle_loop[m].p[n].VertexNormal);
//设置法线
glNormal3f(triangle_loop[m].p[n].VertexNormal.x,
triangle_loop[m].p[n].VertexNormal.y,
triangle_loop[m].p[n].VertexNormal.z);
//绘制点
glVertex3f((float)triangle_loop[m].p[n].x,(float)triangle_loop[m].p[n].y,(float)triangle_loop[m].p[n].z);
}
glEnd();
}
但是绘制出来的效果不是很满意阿。。。。。如附件中的图片(总之就是有很强的鳞片状的感觉),我希望
能够做出平滑的光照效果。
几点说明:1.我已经开启了glShadeModel(GL_SMOOTH);
2.法线已经正确的单位化过了
我的问题就是:
1.小弟在网上看到有人说OpenGL默认实现了Blinn-Phong,那我这样做OpenGL会替我为法线先插值再进行
光照计算么?(我估计不是吧。。效果这么烂)
2.需要我们自己来对法线插值么?怎么做?(我在网上找了,好像没有找到,至于一些图形学
的书籍,上面也只有理论上的做法),希望做过的或者有经验的朋友指导一下 :)
3.我这个问题需要用shading language来做么?(小弟只是大概了解过,没有学过)
|
|