Фрагмент шейдера необъяснимого поведения
Я написал программу на C ++, где рисую чайник и применяю освещение. Это само по себе просто, но я также использую шейдеры. Простой яЯ новичок в GLSL Я только что попробовал простой фрагментный шейдер, но вывод на экран необъясним.
В этом файле я инициализирую glew в методе init, где я также компилирую вершинный и фрагментный шейдеры. Oни'в "vertex_shader» а также "fragment_shader» файлы.
То, что вы можете не узнать, это то, чтоСвет и Материал. Oни'только некоторые структуры, содержащие всю информацию о огнях. Я'Я проверил эти структуры, поэтому яЯ уверен, что работа, как ожидалось. Когда я объявляю material = BlackPlastic, я просто устанавливаю значение по умолчанию, определенное с помощью директивы define. Я также могу опубликовать этот код, если вы думаете, что проблема есть.
#include
#include
#include
#include
#include
#include "utility.hpp"
#define MAX_DIM 1000
GLfloat width=600, height=800;
GLuint vertex_shader, fragment_shader;
GLuint program;
const char* vertex_shader_filename= "vertex_shader";
const char* fragment_shader_filename= "fragment_shader";
Light light;
Material material;
void init()
{
// Inizializzazione di GLEW
glewInit();
if(GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader)
{
cout < "Supporto GLSL" < endl;
}
// Lettura e compilazione del vertex shader
GLchar* buffer= new GLchar[MAX_DIM];
ifstream stream;
streamsize count;
stream.open(vertex_shader_filename);
stream.read(buffer,MAX_DIM);
count= stream.gcount();
stream.close();
vertex_shader= glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, (const GLchar**)&buffer, &count);
glCompileShader(vertex_shader);
// Lettura, inizializzazione ed esecuzione del fragment shader
stream.open(fragment_shader_filename);
stream.read(buffer,MAX_DIM);
count= stream.gcount();
stream.close();
fragment_shader= glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader, 1, (const GLchar**)&buffer, &count);
glCompileShader(fragment_shader);
delete[] buffer;
// Creazione del programma
program= glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);
glUseProgram(program);
// Inizializzazione materiale e luce
material= BlackPlastic;
light= {vector