1

OpenGLアプリケーションでスポット ライトを作成しようと勉強しています。私が使用しているコードを#vertex-shader以下に示します。

    #:vertex-shader #{
        #version 150 core
            in vec3 in_pos;
            in vec2 in_tc;
            out vec2 tc;

            glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 20.0f);
            GLfloat spot_direction[] = { -1.0, -1.0, 0.0 };
            glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction);

            glEnable(GL_LIGHT0);


            void main() {

                vec4 pos= vec4(vec3(1.0)*in_pos - vec3(1.0), 1.0);
                pos.z=0.0;
                gl_Position =   pos;
                tc = in_tc;
            }
}

問題は、コードを実行しようとするたびに、次のようなエラーが表示されることです。

Type: other, Source: api, ID: 131169, Severity: low
Message: Framebuffer detailed info: The driver allocated storage for renderbuffer 1.
 len = 157, written = 0
failed to compile vertex shader of deferred: directional
info log for shader deferred: directional
vertex info log for shader deferred: directional:
ERROR: Unbound variable: when

仕様:

Renderer: GeForce GTX 580/PCIe/SSE2
Version: 3.3.0 NVIDIA 319.17
GLSL: 3.30 NVIDIA via Cg compiler
Status: Using GLEW 1.9.0
1024 x 768
OS: Linux debian

このスポットライトを作成するのは非常に簡単だと思いますが、私は本当に初めてなのでOpenGL、今までその方法がわからず、次のようなソースを読んでもわかりません。

http://www.glprogramming.com/red/chapter05.html#name3

また、光点が非常に理解しにくい場所もありますが、講義のスケジュールに従っているため、今はこのステップを避けることはできません. 誰でも私を助けることができますか?

4

1 に答える 1

2

あなたは完全に、シェーダーが何をするかを完全に誤解しています。まず第一に、グローバルスコープで関数呼び出しを宣言していますが、これはとにかく許可されていません。そして、何らかの理由で、非推奨の古いスタイルの固定関数 OpenGL 状態セッター関数をシェーダーで呼び出そうとしていることを理解できません。これはどのように機能するかではありません。

適切な OpenGL チュートリアルに進み、スキップせずに最初から作業することをお勧めします。http://arcsynthesis.org/gltutをお勧めします

于 2013-10-31T15:52:20.533 に答える