0

我需要一个渲染平台来显示我的网格处理算法的结果,它非常基本和简单,我已经完成了,除了 OpenGL 的默认照明有点奇怪。

我的渲染结果是这样的:

斯坦福兔子

OpenGL中的光照参数是这样的:

    // Lights properties
    float ambientProperties[]   = {0.4f, 0.4f, 0.4f, 1.0f};
    float diffuseProperties[]   = {0.8f, 0.8f, 0.8f, 1.0f};
    float specularProperties[]  = {1.0f, 1.0f, 1.0f, 1.0f};
    float lightPosition[]       = {0.2f, -0.3f, -0.3f, 0.0f};

    glLightfv(GL_LIGHT0, GL_AMBIENT, ambientProperties);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseProperties);
    glLightfv(GL_LIGHT0, GL_SPECULAR, specularProperties);
    glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
    glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, 1.0);
    glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);

    // Material Properties
    float   MatAmbient[]  = {0.3f, 0.3f, 0.3f, 1.0f};
    float   MatDiffuse[]  = {0.7f, 0.7f, 0.7f, 1.0f};

    float   MatSpecular[]  = {0.8f, 0.8f, 0.8, 1.0f};
    float   MatShininess[]  = { 64 };
    float   MatEmission[]  = {0.0f, 0.0f, 0.0f, 1.0f};

    glMaterialfv(GL_FRONT, GL_AMBIENT, MatAmbient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, MatDiffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR, MatSpecular);
    glMaterialfv(GL_FRONT, GL_SHININESS, MatShininess);
    glMaterialfv(GL_FRONT, GL_EMISSION, MatEmission);

我想要的是这样的:

手 http://iparla.inria.fr/publications/2007/BS07b/sketch_teaser.jpg

我已将我的渲染结果的全分辨率版本更改为顶点法线并添加了简化版本,以使比较更有说服力。我们可以看到,后者显然更加生动,忽略了颜色。

可以像我想要的结果一样对默认的 OpenGL 照明进行参数调整吗?或者我怎样才能检索一些用于照明的高质量 GLSL 着色器的代码?我只是图形渲染的新手,我认为这样的照明例程并不罕见。

4

0 回答 0