Yee render works
This commit is contained in:
parent
e0453db063
commit
ff95163bcd
59
src/Game.cpp
59
src/Game.cpp
@ -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) {
|
||||
|
||||
@ -44,7 +44,7 @@ namespace ZL {
|
||||
void drawShip();
|
||||
void drawBoxes();
|
||||
void drawUI();
|
||||
|
||||
void drawRemoteShips();
|
||||
void fireProjectiles();
|
||||
|
||||
void handleDown(int mx, int my);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user