я учусь 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
Других решений пока нет …