Make hole
This commit is contained in:
parent
87032466ac
commit
d414505d15
1
Game.cpp
1
Game.cpp
@ -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;
|
||||||
|
|||||||
@ -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];
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
12
Renderer.cpp
12
Renderer.cpp
@ -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();
|
||||||
|
|||||||
@ -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
61
defaultHideCam.fragment
Normal 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
15
defaultHideCam.vertex
Normal 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;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user