【发布时间】:2021-04-07 14:48:01
【问题描述】:
当我在 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.1745f, 0.0215f, 0.55f };
float[] light_diffuse ={0.07568f, 0.61424f, 0.07568f, 0.55f };
float[] light_specular ={0.633f, 0.727811f, 0.633f, 0.55f };
float[] light_position= { 1.0, 1.0, 1.0, 0.0 };
结果不好……
【问题讨论】:
-
如果你想用Blinn–Phong reflection model 和Gouraud shading 渲染一个绿色表面,你已经找到了答案。但是,使用 20 年历史的 OpenGL Fixed-Function 管道,您无法做任何更现实的事情。与您上一个问题 How can I do a brass surface? 的 cmets 中的原因相同。
-
@Raddib76 我已经更好地说明了我对所获得结果的问题......这是一个重要的家庭作业......你能帮帮我吗?我的参考是it.hiof.no/~borres/j3d/explain/light/p-materials.html.. 我不明白我的结果
-
不,我不能。使用这项技术是不可能的。在您的示例中,光源的位置似乎在对象的后面(注意,视图空间 z 轴指向视口外),但结果永远不会质量好。如果您想使用 OpenGL 而不是渲染引擎(Unity、Unreal、...)),我建议您阅读一个很好的教程。例如LearnOpenGL
-
现在您认为这很好,至少对于使用这些旧工具可以做什么?我已经编辑了图像...
-
这几乎是你能得到的最好的了。但是,您可以为球体使用更高的分辨率来获得一些镜面高光。
标签: opengl light opengl-compat