openGL рендерит только один слой по оси Z

Я пишу игру FPS. Я использую sfml для окна, звуков и т. Д. И OpenGL для 3D-графики, но обнаружил проблему. OpenGL отображает только те вершины, которые имеют 0 на оси z. Что я сделал не так? У меня есть структура, содержащая topLeft, topRight, bottomLeft а также bottomRight и они sf::Vector3f,

//engine

using namespace DlsE;

DlsE::Engine::Engine()
{
quad = Quad(
Vector3x3<float>(
sf::Vector3f(200 - 200, 200 - 200, 50),
sf::Vector3f(200 + 200, 200 - 200, 50),
sf::Vector3f(200 - 200, 200 + 200, -50),
sf::Vector3f(200 + 200, 200 + 200, -50)
)
);
}DlsE::Engine::~Engine()
{
}

void DlsE::Engine::Draw(sf::RenderWindow * okno)
{
okno->popGLStates();
glColor3f(1, 0, 0);

quad.Draw();
quad.RotateByDeg(2.f*manager::deltaTime.asSeconds(), 0, 0,quad.MakeCenterContext());

glFlush();
okno->pushGLStates();
}

//Quad.cpp

Quad::Quad()
{
}

DlsE::Quad::Quad(Vector3x3<float> p) : p(p)
{
}

Quad::~Quad()
{
}

void DlsE::Quad::Draw()
{
glBegin(GL_TRIANGLES);
glVertex3f(p.topLeft.x, p.topLeft.y, p.topLeft.z);
glVertex3f(p.topRight.x, p.topRight.y, p.topRight.z);
glVertex3f(p.bottomRight.x, p.bottomRight.y, p.bottomRight.z);

glVertex3f(p.topLeft.x, p.topLeft.y, p.topLeft.z);
glVertex3f(p.bottomRight.x, p.bottomRight.y, p.bottomRight.z);
glVertex3f(p.bottomLeft.x, p.bottomLeft.y, p.bottomLeft.z);

glEnd();
}

void DlsE::Quad::RotateByDeg(float x, float y, float z, sf::Vector3f context)
{
p = RotateX(x*PI / 180.f, p, context);
p = RotateY(y*PI / 180.f, p, context);
p = RotateZ(z*PI / 180.f, p, context);
}

sf::Vector3f DlsE::Quad::MakeCenterContext()
{
return sf::Vector3f(
(p.bottomLeft.x + p.bottomRight.x + p.topLeft.x + p.topRight.x) / 4,
(p.bottomLeft.y + p.bottomRight.y + p.topLeft.y + p.topRight.y) / 4,
(p.bottomLeft.z + p.bottomRight.z + p.topLeft.z + p.topRight.z) / 4);
}

//Game.cpp

std::string Game::Update(sf::RenderWindow * okno)
{
return "GAME";
}

void Game::Draw(sf::RenderWindow * okno)
{
glClearColor(0, 1, 1, 0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

engine.Draw(okno);
}

Game::Game()
{
}

Game::~Game()
{
}

Скриншот

введите описание изображения здесь

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]