Ошибка OpenGL с переводом, C1068 и C2003 - PullRequest
1 голос
/ 05 ноября 2019

Я начал учебник по OpenGL, и этот урок о переводе треугольника с использованием glm. Тем не менее, всякий раз, когда я компилирую программу, появляются следующие ошибки

0(9) : error C1068: too much data in type constructor
(0) : error C2003: incompatible options for link`.

Снова я новичок в OpenGL, и этот учебник с версией 3.6, и я на 4.6, поэтому я незнаете, если это может быть проблемой, вот код, надеюсь, вы могли бы помочь мне (все на одной странице между прочим).

1 Ответ

0 голосов
/ 05 ноября 2019

Униформа model относится к типу mat4. Вы должны преобразовать координату вершины по матрице в вершинном шейдере:

gl_Position = vec4(0.4 * pos.x + model, 0.4 * pos.y, pos.z, 1.0); `

gl_Position = model * vec4(0.4 * pos.x, 0.4 * pos.y, pos.z, 1.0);

Вы не получили ошибку, потому чтоесть проблема в addShader. Ошибки компиляции шейдерного объекта можно получить glGetShaderiv, а не glGetProgramiv. Если шейдер успешно скомпилирован, то результатом будет GL_TRUE, а не GL_FALSE:

glGetShaderiv(theShader, GL_COMPILE_STATUS, &result);
if (result != GL_TRUE) {
    glGetShaderInfoLog(theShader, sizeof(eLog), NULL, eLog);
    std::cout << "Error compiling the " << shaderType << ' ' << eLog << '\n';
}

Более того, glm::mat4 model; дает неинициализированную матрицу. Чтобы получить Identity matrix , вы должны передать один скаляр (1.0) конструктору матрицы:

glm::mat4 model(1.0f);
...