Yee render works

This commit is contained in:
Vladislav Khorev 2026-01-16 18:11:52 +03:00
parent e0453db063
commit ff95163bcd
2 changed files with 60 additions and 1 deletions

View File

@ -548,12 +548,71 @@ namespace ZL
glClear(GL_DEPTH_BUFFER_BIT);
}
drawShip();
drawRemoteShips();
drawBoxes();
drawUI();
CheckGlError();
}
void Game::drawRemoteShips() {
// Используем те же константы имен для шейдеров, что и в drawShip
static const std::string defaultShaderName = "default";
static const std::string vPositionName = "vPosition";
static const std::string vTexCoordName = "vTexCoord";
static const std::string textureUniformName = "Texture";
// Активируем шейдер и текстуру (предполагаем, что меш у всех одинаковый)
renderer.shaderManager.PushShader(defaultShaderName);
renderer.RenderUniform1i(textureUniformName, 0);
renderer.EnableVertexAttribArray(vPositionName);
renderer.EnableVertexAttribArray(vTexCoordName);
renderer.PushPerspectiveProjectionMatrix(1.0 / 1.5,
static_cast<float>(Environment::width) / static_cast<float>(Environment::height),
Environment::CONST_Z_NEAR, Environment::CONST_Z_FAR);
// Биндим текстуру корабля один раз для всех удаленных игроков (оптимизация батчинга)
glBindTexture(GL_TEXTURE_2D, spaceshipTexture->getTexID());
// Итерируемся по актуальным данным из extrapolateRemotePlayers
for (auto const& [id, playerState] : latestRemotePlayers) {
//if (id == networkClient->GetClientId()) continue; // Не рисуем себя через этот цикл
renderer.PushMatrix();
renderer.LoadIdentity();
// 1. Камера и вид игрока
renderer.TranslateMatrix({ 0, 0, -1.0f * Environment::zoom });
renderer.RotateMatrix(Environment::inverseShipMatrix);
// 2. Относительная позиция (ОЧЕНЬ ВАЖНО)
// Мы перемещаем объект в позицию (Враг - Я)
// Если враг в 44928, а я в 45000, результат будет -72 по Z.
// Поскольку камера смотрит в -Z, корабль должен быть ПЕРЕД нами.
Eigen::Vector3f relativePos = playerState.position - Environment::shipPosition;
renderer.TranslateMatrix(relativePos);
// 3. Поворот врага
renderer.RotateMatrix(playerState.rotation);
// 4. Смещение самого меша (если оно есть в drawShip, оно должно быть и тут)
// В твоем drawShip() есть: renderer.TranslateMatrix({ 0, -6.f, 0 });
renderer.TranslateMatrix({ 0, -6.f, 0 });
renderer.DrawVertexRenderStruct(spaceship);
renderer.PopMatrix();
}
renderer.PopProjectionMatrix();
renderer.DisableVertexAttribArray(vPositionName);
renderer.DisableVertexAttribArray(vTexCoordName);
renderer.shaderManager.PopShader();
CheckGlError();
}
void Game::processTickCount() {
if (lastTickCount == 0) {

View File

@ -44,7 +44,7 @@ namespace ZL {
void drawShip();
void drawBoxes();
void drawUI();
void drawRemoteShips();
void fireProjectiles();
void handleDown(int mx, int my);