0

OpenGLプロジェクトの照明部分については、現在、チームのためにこの部分を実行しています。

パート1でモデルの材料特性を定義します。材料定義を簡単に置き換えられるようにします。具体的には、ロボットコンポーネントとリモートコントロールユニットは「光沢がある」必要があります。さまざまな色合いの場合、瓦礫の山は溶けてはいけません。メインのプラットフォームタイルはディフューズグレーである必要があります。独自の材料特性を選択し、ブロック、ベース、工場などについて適切に文書化します。

コントロールユニットに「シャイニー」エフェクトをかけようとしただけでうまくいきませんでした。テストするためのサンプル照明をまだ入れていない(または少なくともリポジトリにない)ので、いくつかのサンプル照明を入れてみました。その結果、コントローラーの立方体部分は反射しましたが(白すぎますが、何を試しても、立方体の色は灰色になります)、シリンダーアンテナは反射しませんでした。(機能しないものをコミットできなかったため、これらのテストはいずれもリポジトリにありません。)

基本的に、マテリアルプロパティと、それらをテストするための基本的な照明の設定についてサポートが必要です(チームメートの1人が照明に取り組んでいるため、テスト照明は一時的なものです)。

誰かがこの部分を手伝ってくれると本当にありがたいです。

プロジェクト情報:

  • プロジェクトのリポジトリ(Visual Studio 2010プロジェクト)
  • マップ/グリッドはxz平面に沿って配置され、yは高さです。
  • すべてがglCubesまたはglutシェイプのいずれかを使用して行われるため、それらに法線を定義する必要はありません。一部のタイルとすべての数字4のみがgl_quadsを使用して行われます。

私が何かを逃した場合、またはあなたがより多くの情報を必要とするならば、尋ねてください!

4

1 に答える 1

2

OpenGL でのライトニングの基本について説明します... まず、ライトを有効にして設定する必要があります。以下に例を示します。

    void setlight(){
            //here you set the lights and parameters, example with one light
            float LightAmbient[] = { 0.1f, 0.1f, 0.05f, 1.0f };
            float LightEmission[] = { 1.0f, 1.0f, 0.8f, 1.0f };
            float LightDiffuse[] = { 1.0f, 1.0f, 0.8f, 1.0f };
            float LightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
            float LightDirection[]={-0.5f, -0.5f, -0.5f};
            glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);
            glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
            glLightfv(GL_LIGHT0, GL_SPECULAR, LightSpecular);
            glLightfv(GL_LIGHT0, GL_POSITION, LightDirection);
            glEnable(GL_LIGHTING);
            glEnable(GL_LIGHT0);
    }
    void setmaterial(){
            //here you set materials, you must declare each one of the colors global or locally like this:
            float MatAmbient[] = { 0.1f, 0.1f, 0.1f, 1.0f };
            float MatDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
            float MatSpecular[] = { 0.1f, 0.1f, 0.0f, 0.1f };
            float MatShininess = 60;
            float black[] = {0.0f,0.0f,0.0f,1.0f};
            glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, MatAmbient);
            glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MatDiffuse);
            glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, MatSpecular);
            glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, MatShininess);
            glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
    }
    void render(){
            //your render function
            //clean buffers, set viewport, projection, lookat, etc...
            . . .

            //set light and materials
            setlight();
            setmaterial();

            //draw your stuff

            . . .

            glutSwapBuffers();
    }

ここで、異なるオブジェクトを描画するために異なるマテリアルを設定する必要がある場合は、描画する前に各オブジェクトのマテリアルを設定する必要があります... 例:

    for(int i=0; i<num_objetcs; i++){
            setmaterial(i);
            drawobject(i);
    }

もちろん、私が前に書いたことを変更する必要があります... ライトを設定し、各オブジェクトにマテリアルを設定してから、1 つずつ描画するだけです。「setmaterial」関数を変更して、マテリアル パラメータを取得する必要があります。あとは何をすればよいかわかっていると思いますが、頑張ってください。

于 2012-02-27T23:49:37.867 に答える