簡體   English   中英

在OpenGL場景中創建聚光燈

[英]Creating spotlight in OpenGL scene

我正在研究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

在某個地方可能很難理解亮點,但也要閱讀,但是由於我正在按照自己的演講時間表去做,所以我現在無法避免此步驟。 有人可以幫我嗎?

您完全完全誤解了着色器的功能。 首先,您要在全局范圍內聲明函數調用,無論如何都不允許這樣做。 然后,由於某種原因,我無法理解您嘗試在着色器中調用已棄用的舊樣式固定功能OpenGL狀態設置程序函數。 這不是它的工作方式。

我建議您先閱讀一個不錯的OpenGL教程,並從頭開始研究它,而不必跳過任何事情。 我建議http://arcsynthesis.org/gltut

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM