【问题标题】:how set light and materials to obtain an emerald object如何设置灯光和材质以获得翡翠物体
【发布时间】: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 modelGouraud 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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多