Make hole

This commit is contained in:
Vladislav Khorev 2025-03-02 14:33:54 +03:00
parent 87032466ac
commit d414505d15
7 changed files with 127 additions and 2 deletions

View File

@ -53,6 +53,7 @@ void Game::setup() {
// Initialize renderer // Initialize renderer
renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment"); renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment");
renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment"); renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment");
renderer.shaderManager.AddShaderFromFiles("defaultHideCam", "./defaultHideCam.vertex", "./defaultHideCam.fragment");
// Initialize game objects // Initialize game objects
std::cout << "Hello 2" << std::endl; std::cout << "Hello 2" << std::endl;

View File

@ -361,6 +361,18 @@ void GameObjectManager::updateScene(size_t ms) {
Environment::cameraShift.v[0] += directionVector.v[0] * ms; Environment::cameraShift.v[0] += directionVector.v[0] * ms;
Environment::cameraShift.v[2] += directionVector.v[1] * ms; Environment::cameraShift.v[2] += directionVector.v[1] * ms;
} }
if (Environment::downPressed) {
Environment::cameraShift.v[0] -= directionVector.v[0] * ms;
Environment::cameraShift.v[2] -= directionVector.v[1] * ms;
}
if (Environment::rightPressed) {
Environment::cameraShift.v[2] += directionVector.v[0] * ms;
Environment::cameraShift.v[0] -= directionVector.v[1] * ms;
}
if (Environment::leftPressed) {
Environment::cameraShift.v[2] -= directionVector.v[0] * ms;
Environment::cameraShift.v[0] += directionVector.v[1] * ms;
}
Environment::characterPos.v[0] = -Environment::cameraShift.v[0]; Environment::characterPos.v[0] = -Environment::cameraShift.v[0];
Environment::characterPos.v[1] = -Environment::cameraShift.v[1]; Environment::characterPos.v[1] = -Environment::cameraShift.v[1];

View File

@ -9,9 +9,11 @@
namespace ZL { namespace ZL {
void RenderSystem::initialize() { void RenderSystem::initialize() {
/*
renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment"); renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment");
renderer.shaderManager.AddShaderFromFiles("defaultHideCam", "./defaultHideCam.vertex", "./defaultHideCam.fragment");
renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment"); renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment");
renderer.InitOpenGL(); renderer.InitOpenGL();*/
} }
void RenderSystem::drawScene(GameObjectManager& gameObjects) { void RenderSystem::drawScene(GameObjectManager& gameObjects) {
@ -100,12 +102,15 @@ void RenderSystem::drawViola(GameObjectManager& gameObjects)
void RenderSystem::drawWorld(GameObjectManager& gameObjects) { void RenderSystem::drawWorld(GameObjectManager& gameObjects) {
static const std::string defaultShaderName = "default"; static const std::string defaultShaderName = "default";
static const std::string colorShaderName = "defaultColor"; static const std::string colorShaderName = "defaultColor";
static const std::string hideCamShaderName = "defaultHideCam";
static const std::string vPositionName = "vPosition"; static const std::string vPositionName = "vPosition";
static const std::string vTexCoordName = "vTexCoord"; static const std::string vTexCoordName = "vTexCoord";
static const std::string vColorName = "vColor"; static const std::string vColorName = "vColor";
static const std::string textureUniformName = "Texture"; static const std::string textureUniformName = "Texture";
//static const std::string modelViewMatrixName = "modelView";
/* /*
renderer.shaderManager.PushShader(defaultShaderName); renderer.shaderManager.PushShader(defaultShaderName);
renderer.RenderUniform1i(textureUniformName, 0); renderer.RenderUniform1i(textureUniformName, 0);
@ -122,9 +127,26 @@ void RenderSystem::drawWorld(GameObjectManager& gameObjects) {
drawViola(gameObjects); drawViola(gameObjects);
renderer.shaderManager.PushShader(defaultShaderName); renderer.shaderManager.PushShader(hideCamShaderName);
renderer.RenderUniform1i(textureUniformName, 0); renderer.RenderUniform1i(textureUniformName, 0);
Vector3f testVec1{ 0,0,0 };
Vector3f testVec2{ 0,400,-600 };
renderer.RenderUniform3fv("targetPos", &Environment::characterPos.v[0]);
//renderer.RenderUniform3fv("targetPos", &testVec1.v[0]);
Vector3f cameraPos = Vector3f{ 0,0, 100 * Environment::zoom };
cameraPos = MultVectorMatrix(cameraPos, QuatToMatrix(QuatFromRotateAroundX(Environment::cameraAlpha)));
cameraPos = MultVectorMatrix(cameraPos, QuatToMatrix(QuatFromRotateAroundY(Environment::cameraPhi)));
cameraPos = cameraPos + Environment::characterPos;
renderer.RenderUniform3fv("eyePos", &cameraPos.v[0]);
//renderer.RenderUniform3fv("eyePos", &testVec2.v[0]);
renderer.EnableVertexAttribArray(vPositionName); renderer.EnableVertexAttribArray(vPositionName);
renderer.EnableVertexAttribArray(vTexCoordName); renderer.EnableVertexAttribArray(vTexCoordName);

View File

@ -583,6 +583,18 @@ namespace ZL {
} }
} }
void Renderer::RenderUniform3fv(const std::string& uniformName, const float* value)
{
auto shader = shaderManager.GetCurrentShader();
auto uniform = shader->uniformList.find(uniformName);
if (uniform != shader->uniformList.end())
{
glUniform3fv(uniform->second, 1, value);
}
}
void Renderer::RenderUniform1i(const std::string& uniformName, const int value) void Renderer::RenderUniform1i(const std::string& uniformName, const int value)
{ {
auto shader = shaderManager.GetCurrentShader(); auto shader = shaderManager.GetCurrentShader();

View File

@ -117,6 +117,8 @@ namespace ZL {
void RenderUniformMatrix4fv(const std::string& uniformName, bool transpose, const float* value); void RenderUniformMatrix4fv(const std::string& uniformName, bool transpose, const float* value);
void RenderUniform1i(const std::string& uniformName, const int value); void RenderUniform1i(const std::string& uniformName, const int value);
void RenderUniform3fv(const std::string& uniformName, const float* value);
void VertexAttribPointer2fv(const std::string& attribName, int stride, const char* pointer); void VertexAttribPointer2fv(const std::string& attribName, int stride, const char* pointer);

61
defaultHideCam.fragment Normal file
View File

@ -0,0 +1,61 @@
uniform sampler2D Texture;
varying vec2 texCoord;
varying vec3 vWorldPos;
uniform vec3 eyePos; // Позиция камеры
uniform vec3 targetPos; // Цель камеры
void main()
{
/*
float maxDistance = 2000;
float alpha = 0.0;
vec4 color = texture2D(Texture, texCoord);
vec3 dir = targetPos - eyePos;
float dirLengthSq = dot(dir, dir);
if (dirLengthSq > 0.0)
{
vec3 objToEye = vWorldPos - eyePos;
float t = dot(objToEye, dir) / dirLengthSq;
if (t >= 0.0 && t <= 1.0)
{
vec3 projection = eyePos + t * dir;
vec3 delta = vWorldPos - projection;
float distSq = dot(delta, delta);
if (distSq < maxDistance * maxDistance)
{
//color.a *= alpha; // Применяем прозрачность
color.rgb = vec3(1,0,0);
}
}
}
*/
vec4 color;
vec3 dirToCamera = normalize(eyePos - targetPos);
vec3 dirToVertex = normalize(vWorldPos - targetPos);
float dotProduct = dot(dirToCamera, dirToVertex);
float distanceX = abs(vWorldPos.x);
float distanceZ = abs(vWorldPos.z);
float distanceToCamera = length(vWorldPos - targetPos);
if ((distanceX > 750 || distanceZ > 750) && (dotProduct > 0.93))
{
//color.rgba = vec4(1,0,0,1);
discard;
}
else
{
color.rgb = texture2D(Texture, texCoord).rgb;
//color.rgb = vec3(clamp(vWorldPos.z/500, 0, 1), 0, 0);
color.a = 1;
}
gl_FragColor = color;
}

15
defaultHideCam.vertex Normal file
View File

@ -0,0 +1,15 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
varying vec2 texCoord;
varying vec3 vWorldPos; // Мировая позиция вершины
uniform mat4 ProjectionModelViewMatrix;
//uniform mat4 ModelMatrix; // Матрица модели объекта
void main()
{
vec4 worldPos = vec4(vPosition, 1.0);
vWorldPos = worldPos.xyz;
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
texCoord = vTexCoord;
}