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);
|
glClear(GL_DEPTH_BUFFER_BIT);
|
||||||
}
|
}
|
||||||
drawShip();
|
drawShip();
|
||||||
|
drawRemoteShips();
|
||||||
drawBoxes();
|
drawBoxes();
|
||||||
|
|
||||||
drawUI();
|
drawUI();
|
||||||
CheckGlError();
|
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() {
|
void Game::processTickCount() {
|
||||||
|
|
||||||
if (lastTickCount == 0) {
|
if (lastTickCount == 0) {
|
||||||
|
|||||||
@ -44,7 +44,7 @@ namespace ZL {
|
|||||||
void drawShip();
|
void drawShip();
|
||||||
void drawBoxes();
|
void drawBoxes();
|
||||||
void drawUI();
|
void drawUI();
|
||||||
|
void drawRemoteShips();
|
||||||
void fireProjectiles();
|
void fireProjectiles();
|
||||||
|
|
||||||
void handleDown(int mx, int my);
|
void handleDown(int mx, int my);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user