Я использую GLM и GLFW для рисования квадрата. У меня есть следующий код:Vertex OpenGL LookAt не отображается
static const GLfloat g_vertex_buffer_data[] = {
// square
0, 0, 0,
1, 0, 0,
0, 0, 1,
1, 0, 0,
1, 0, 1,
0, 0, 1,
};
glm::mat4 Projection = glm::perspective(glm::radians(45.0f), (float)_width/(float)_height, 0.1f, 100.0f);
glm::mat4 View = glm::lookAt(glm::vec3(0.f, 5.f, 0.f), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
glm::mat4 Model = glm::mat4(1.0f);
glm::mat4 mvp = Projection * View * Model;
GLuint MatrixID = glGetUniformLocation(programID, "MVP");
glm::mat4 MyModel = glm::mat4(1.0f);
glm::mat4 MyMVP = Projection * View * MyModel;
Странная вещь прямо здесь:
glm::mat4 View = glm::lookAt(glm::vec3(0.f, 5.f, 0.f), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
Прямо сейчас, я не вижу ничего. Но когда я меняю это на это:
glm::mat4 View = glm::lookAt(glm::vec3(0.f, 5.f, 0.000001f), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
Тогда я действительно могу видеть площадь. Почему я не могу его увидеть, когда я меняю Z coördinate на ноль, почему он работает, когда я меняю его на что-то> 0? Я на самом деле хочу, чтобы он был нулевым (поэтому смотри от 5 единиц до центральной точки), но это почему-то не работает.
--- редактировать ---
Это с glm::vec3(0.f, 5.f, 0.0000000000001f)
Это результат с glm::vec3(0.f, 5.f, 0.000000000000f)
Ваш вектор вверх должен быть (0,0,1), а не (0,1,0). В настоящее время ваше направление просмотра и вектор вверх совпадают, поэтому кросс-продукт не будет работать хорошо. Когда вы переходите на 0.001f, вектор вверх может быть «приблизительным». – aslg
@aslg Это сработало, но что это значит, когда я изменяю вектор вверх, как вы сказали? Что на самом деле происходит? Кстати, я сделал редактирование – Markinson