如何设置光线和材料以获得祖母绿物体

问题描述

当我在 opengl 中为对象设置材质时 (glutSolidSphere(2.,10.,8.);),例如祖母绿参数:

 float[] mat_ambient ={ 0.0215f,0.1745f,0.0215f,0.55f };
 float[] mat_diffuse ={0.07568f,0.61424f,0.07568f,0.55f };
 float[] mat_specular ={0.633f,0.727811f,0.633f,0.55f };
 float shine = 76.8f;

为了获得真正的祖母绿物体,我应该以相同的方式设置光的成分吗?我的意思是:

float[] light_ambient ={ 0.0215f,0.55f };
float[] light_diffuse ={0.07568f,0.55f };
float[] light_specular ={0.633f,0.55f };

float[] light_position= { 1.0,1.0,0.0 };

结果并不好...

解决方法

如果您想用 Blinn–Phong reflection modelGouraud shading 渲染绿色表面,您已经找到了答案。但是,您无法使用 20 年历史的 OpenGL 固定功能管道做任何更现实的事情。与您之前问题 How can I do a brass surface? 的评论中的原因相同。
使用 Gouraud 着色,光照模型是按顶点计算的,而 Phong shadding 是按片段计算的。在球体上使用更高的分辨率来改善照明并获得一些镜面高光。请参阅 GLSL fixed function fragment program replacementWhat's the difference between Phong shading and Gouraud shading?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...