working on web
This commit is contained in:
parent
fa3a4c66c9
commit
db4254e205
@ -103,10 +103,10 @@ namespace ZL {
|
|||||||
});
|
});
|
||||||
uiManager.setSliderCallback("velocitySlider", [this](const std::string& name, float value) {
|
uiManager.setSliderCallback("velocitySlider", [this](const std::string& name, float value) {
|
||||||
int newVel = roundf(value * 10);
|
int newVel = roundf(value * 10);
|
||||||
/*if (newVel > 2)
|
if (newVel > 2)
|
||||||
{
|
{
|
||||||
newVel = 2;
|
newVel = 2;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
if (newVel != Environment::shipState.selectedVelocity) {
|
if (newVel != Environment::shipState.selectedVelocity) {
|
||||||
onVelocityChanged(newVel);
|
onVelocityChanged(newVel);
|
||||||
|
|||||||
@ -816,11 +816,16 @@ namespace ZL
|
|||||||
|
|
||||||
// defaultColor shader likely uses vColor (vec3), но нам нужен alpha.
|
// defaultColor shader likely uses vColor (vec3), но нам нужен alpha.
|
||||||
// У тебя в Renderer есть RenderUniform4fv, но шейдер может брать vColor.
|
// У тебя в Renderer есть RenderUniform4fv, но шейдер может брать vColor.
|
||||||
// Поэтому: сделаем ColorData vec3, а alpha дадим через uniform uColor, если есть.
|
// Поэтому: сделаем ColorData vec3, а alpha будем задавать uniform'ом отдельно.
|
||||||
// Если в defaultColor нет uniform uColor — тогда alpha будет 1.0.
|
|
||||||
// Для совместимости: кладём RGB, alpha будем задавать uniform'ом отдельно.
|
|
||||||
Vector3f rgb{ rgba.x(), rgba.y(), rgba.z() };
|
Vector3f rgb{ rgba.x(), rgba.y(), rgba.z() };
|
||||||
v.ColorData = { rgb, rgb, rgb, rgb, rgb, rgb };
|
v.ColorData = { rgb, rgb, rgb, rgb, rgb, rgb };
|
||||||
|
|
||||||
|
// defaultColor vertex shader expects vNormal and vTexCoord; provide valid values
|
||||||
|
// so WebGL/GLSL doesn't get NaN from normalize(vec3(0,0,0)).
|
||||||
|
const Vector3f n{ 0.f, 0.f, 1.f };
|
||||||
|
v.NormalData = { n, n, n, n, n, n };
|
||||||
|
const Vector2f uv{ 0.f, 0.f };
|
||||||
|
v.TexCoordData = { uv, uv, uv, uv, uv, uv };
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -915,7 +920,7 @@ namespace ZL
|
|||||||
|
|
||||||
// 4) Настройки стиля
|
// 4) Настройки стиля
|
||||||
Eigen::Vector4f enemyColor(1.f, 0.f, 0.f, 1.f); // красный
|
Eigen::Vector4f enemyColor(1.f, 0.f, 0.f, 1.f); // красный
|
||||||
float thickness = 2.0f; // толщина линий (px)
|
float thickness = 10.0f; // толщина линий (px)
|
||||||
float z = 0.0f; // 2D слой
|
float z = 0.0f; // 2D слой
|
||||||
|
|
||||||
// 5) Если цель в кадре: рисуем скобки
|
// 5) Если цель в кадре: рисуем скобки
|
||||||
@ -959,12 +964,14 @@ namespace ZL
|
|||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
glClear(GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
renderer.shaderManager.PushShader("defaultColor");
|
renderer.shaderManager.PushShader("defaultColor");
|
||||||
renderer.PushProjectionMatrix((float)Environment::width, (float)Environment::height, 0.f, 1.f);
|
renderer.PushProjectionMatrix((float)Environment::width, (float)Environment::height, 0.f, 1.f);
|
||||||
renderer.PushMatrix();
|
renderer.PushMatrix();
|
||||||
renderer.LoadIdentity();
|
renderer.LoadIdentity();
|
||||||
|
|
||||||
|
<<<<<<< Updated upstream
|
||||||
// рисуем кружок упреждения (только если есть решение)
|
// рисуем кружок упреждения (только если есть решение)
|
||||||
if (haveLead) {
|
if (haveLead) {
|
||||||
float leadNdcX, leadNdcY, leadNdcZ, leadClipW;
|
float leadNdcX, leadNdcY, leadNdcZ, leadClipW;
|
||||||
@ -987,6 +994,10 @@ namespace ZL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
=======
|
||||||
|
renderer.EnableVertexAttribArray("vPosition");
|
||||||
|
|
||||||
|
>>>>>>> Stashed changes
|
||||||
|
|
||||||
// верх-лево: горизонт + вертикаль
|
// верх-лево: горизонт + вертикаль
|
||||||
drawBar(left + cornerLen * 0.5f, top, cornerLen, thickness);
|
drawBar(left + cornerLen * 0.5f, top, cornerLen, thickness);
|
||||||
@ -1004,6 +1015,9 @@ namespace ZL
|
|||||||
drawBar(right - cornerLen * 0.5f, bottom, cornerLen, thickness);
|
drawBar(right - cornerLen * 0.5f, bottom, cornerLen, thickness);
|
||||||
drawBar(right, bottom + cornerLen * 0.5f, thickness, cornerLen);
|
drawBar(right, bottom + cornerLen * 0.5f, thickness, cornerLen);
|
||||||
|
|
||||||
|
renderer.DisableVertexAttribArray("vPosition");
|
||||||
|
|
||||||
|
|
||||||
renderer.PopMatrix();
|
renderer.PopMatrix();
|
||||||
renderer.PopProjectionMatrix();
|
renderer.PopProjectionMatrix();
|
||||||
renderer.shaderManager.PopShader();
|
renderer.shaderManager.PopShader();
|
||||||
@ -1069,6 +1083,11 @@ namespace ZL
|
|||||||
v.PositionData = { a, b, c };
|
v.PositionData = { a, b, c };
|
||||||
Vector3f rgb{ enemyColor.x(), enemyColor.y(), enemyColor.z() };
|
Vector3f rgb{ enemyColor.x(), enemyColor.y(), enemyColor.z() };
|
||||||
v.ColorData = { rgb, rgb, rgb };
|
v.ColorData = { rgb, rgb, rgb };
|
||||||
|
// defaultColor vertex shader expects vNormal and vTexCoord (avoids NaN on WebGL).
|
||||||
|
const Vector3f n{ 0.f, 0.f, 1.f };
|
||||||
|
v.NormalData = { n, n, n };
|
||||||
|
const Vector2f uv{ 0.f, 0.f };
|
||||||
|
v.TexCoordData = { uv, uv, uv };
|
||||||
hudTempMesh.AssignFrom(v);
|
hudTempMesh.AssignFrom(v);
|
||||||
renderer.DrawVertexRenderStruct(hudTempMesh);
|
renderer.DrawVertexRenderStruct(hudTempMesh);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -7,8 +7,8 @@
|
|||||||
namespace ZL {
|
namespace ZL {
|
||||||
void WebSocketClientEmscripten::Connect(const std::string& host, uint16_t port) {
|
void WebSocketClientEmscripten::Connect(const std::string& host, uint16_t port) {
|
||||||
// Формируем URL. Обратите внимание, что в Web часто лучше использовать ws://localhost
|
// Формируем URL. Обратите внимание, что в Web часто лучше использовать ws://localhost
|
||||||
std::string url = "ws://" + host + ":" + std::to_string(port);
|
//std::string url = "ws://" + host + ":" + std::to_string(port);
|
||||||
//std::string url = "wss://api.spacegame.fishrungames.com";
|
std::string url = "wss://api.spacegame.fishrungames.com";
|
||||||
|
|
||||||
EmscriptenWebSocketCreateAttributes attr = {
|
EmscriptenWebSocketCreateAttributes attr = {
|
||||||
url.c_str(),
|
url.c_str(),
|
||||||
|
|||||||
@ -896,40 +896,64 @@ namespace ZL {
|
|||||||
static const std::string vTexCoord("vTexCoord");
|
static const std::string vTexCoord("vTexCoord");
|
||||||
static const std::string vPosition("vPosition");
|
static const std::string vPosition("vPosition");
|
||||||
|
|
||||||
//glBindVertexArray(VertexRenderStruct.vao->getBuffer());
|
// On WebGL (and when not using VAO), vertex attribute arrays must be explicitly
|
||||||
|
// enabled before drawing. Desktop with VAO can rely on stored state; WebGL cannot.
|
||||||
//Check if main thread, check if data is not empty...
|
|
||||||
if (VertexRenderStruct.data.NormalData.size() > 0)
|
if (VertexRenderStruct.data.NormalData.size() > 0)
|
||||||
{
|
{
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.normalVBO->getBuffer());
|
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.normalVBO->getBuffer());
|
||||||
VertexAttribPointer3fv(vNormal, 0, NULL);
|
VertexAttribPointer3fv(vNormal, 0, NULL);
|
||||||
|
EnableVertexAttribArray(vNormal);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DisableVertexAttribArray(vNormal);
|
||||||
}
|
}
|
||||||
if (VertexRenderStruct.data.TangentData.size() > 0)
|
if (VertexRenderStruct.data.TangentData.size() > 0)
|
||||||
{
|
{
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.tangentVBO->getBuffer());
|
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.tangentVBO->getBuffer());
|
||||||
VertexAttribPointer3fv(vTangent, 0, NULL);
|
VertexAttribPointer3fv(vTangent, 0, NULL);
|
||||||
|
EnableVertexAttribArray(vTangent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DisableVertexAttribArray(vTangent);
|
||||||
}
|
}
|
||||||
if (VertexRenderStruct.data.BinormalData.size() > 0)
|
if (VertexRenderStruct.data.BinormalData.size() > 0)
|
||||||
{
|
{
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.binormalVBO->getBuffer());
|
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.binormalVBO->getBuffer());
|
||||||
VertexAttribPointer3fv(vBinormal, 0, NULL);
|
VertexAttribPointer3fv(vBinormal, 0, NULL);
|
||||||
|
EnableVertexAttribArray(vBinormal);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DisableVertexAttribArray(vBinormal);
|
||||||
}
|
}
|
||||||
if (VertexRenderStruct.data.ColorData.size() > 0)
|
if (VertexRenderStruct.data.ColorData.size() > 0)
|
||||||
{
|
{
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.colorVBO->getBuffer());
|
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.colorVBO->getBuffer());
|
||||||
VertexAttribPointer3fv(vColor, 0, NULL);
|
VertexAttribPointer3fv(vColor, 0, NULL);
|
||||||
|
EnableVertexAttribArray(vColor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DisableVertexAttribArray(vColor);
|
||||||
}
|
}
|
||||||
if (VertexRenderStruct.data.TexCoordData.size() > 0)
|
if (VertexRenderStruct.data.TexCoordData.size() > 0)
|
||||||
{
|
{
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.texCoordVBO->getBuffer());
|
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.texCoordVBO->getBuffer());
|
||||||
VertexAttribPointer2fv(vTexCoord, 0, NULL);
|
VertexAttribPointer2fv(vTexCoord, 0, NULL);
|
||||||
|
EnableVertexAttribArray(vTexCoord);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DisableVertexAttribArray(vTexCoord);
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.positionVBO->getBuffer());
|
glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.positionVBO->getBuffer());
|
||||||
VertexAttribPointer3fv(vPosition, 0, NULL);
|
VertexAttribPointer3fv(vPosition, 0, NULL);
|
||||||
|
EnableVertexAttribArray(vPosition);
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, static_cast<GLsizei>(VertexRenderStruct.data.PositionData.size()));
|
glDrawArrays(GL_TRIANGLES, 0, static_cast<GLsizei>(VertexRenderStruct.data.PositionData.size()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void worldToScreenCoordinates(Vector3f objectPos,
|
void worldToScreenCoordinates(Vector3f objectPos,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user