Репозиторий GitHub
Что конкретно не так с моим кодом, так это то, что я получаю большие числа для своих вершин (как показано в журнале консоли) и в конечном итоге не вижу куба!
Куб .cpp: функция-конструктор, в которой вершины проекции равны вершинам (функции перемещения и вращения вершин выполняются вне функции проекции экрана и вызываются только один раз перед игровым циклом)
Код: Выделить всё
Cube::Cube() {
vertices = {{0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {1, 0, 0},
{0, 0, 1}, {0, 1, 1}, {1, 1, 1}, {1, 0, 1}};
projection_vertices = vertices;
modified_vertices = {{0, 0}, {0, 0}, {0, 0}, {0, 0},
{0, 0}, {0, 0}, {0, 0}, {0, 0}};
p_cube_vertbuff = new sf::VertexArray(sf::LineStrip, 8);
Код: Выделить всё
void Cube::screen_projection(Camera* camera, Projection* projection, sf::RenderWindow& wind) {
printf("Cube\n");
for (int i = 0; i < projection_vertices.size(); i++) {
printf("%f, %f, %f\n", projection_vertices[i].x, projection_vertices[i].y, projection_vertices[i].z);
projection_vertices[i] = vec3_mat_mul(projection_vertices[i], camera->camera_matrix());
// printf("%f, %f, %f\n", vertices[i].x, vertices[i].y, vertices[i].z);
projection_vertices[i] = vec3_mat_mul(projection_vertices[i], projection->projection_matrix);
// printf("%f, %f, %f\n", vertices[i].x, vertices[i].y, vertices[i].z);
projection_vertices[i] = vec3_mat_mul(projection_vertices[i], projection->to_screen_matrix);
// printf("%f, %f, %f\n", vertices[i].x, vertices[i].y, vertices[i].z);
modified_vertices[i] = vec3_to_vec2(projection_vertices[i]);
}
for (int i = 0; i < modified_vertices.size(); i++) {
// printf("%f, %f\n", modified_vertices[i].x, modified_vertices[i].y);
(*(p_cube_vertbuff))[i].position = sf::Vector2f(modified_vertices[i].x, modified_vertices[i].y);
(*(p_cube_vertbuff))[0].color = sf::Color(255, 0, 0);
}
wind.draw(*p_cube_vertbuff);
}
Код: Выделить всё
void Cube::vertices_to_projection() {
vertices = projection_vertices;}
Подробнее здесь: https://stackoverflow.com/questions/786 ... out-opengl