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
|
||||
renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment");
|
||||
renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment");
|
||||
renderer.shaderManager.AddShaderFromFiles("defaultHideCam", "./defaultHideCam.vertex", "./defaultHideCam.fragment");
|
||||
|
||||
// Initialize game objects
|
||||
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[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[1] = -Environment::cameraShift.v[1];
|
||||
|
||||
@ -9,9 +9,11 @@
|
||||
namespace ZL {
|
||||
|
||||
void RenderSystem::initialize() {
|
||||
/*
|
||||
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.InitOpenGL();
|
||||
renderer.InitOpenGL();*/
|
||||
}
|
||||
|
||||
void RenderSystem::drawScene(GameObjectManager& gameObjects) {
|
||||
@ -100,12 +102,15 @@ void RenderSystem::drawViola(GameObjectManager& gameObjects)
|
||||
void RenderSystem::drawWorld(GameObjectManager& gameObjects) {
|
||||
static const std::string defaultShaderName = "default";
|
||||
static const std::string colorShaderName = "defaultColor";
|
||||
static const std::string hideCamShaderName = "defaultHideCam";
|
||||
|
||||
static const std::string vPositionName = "vPosition";
|
||||
static const std::string vTexCoordName = "vTexCoord";
|
||||
static const std::string vColorName = "vColor";
|
||||
static const std::string textureUniformName = "Texture";
|
||||
|
||||
//static const std::string modelViewMatrixName = "modelView";
|
||||
|
||||
/*
|
||||
renderer.shaderManager.PushShader(defaultShaderName);
|
||||
renderer.RenderUniform1i(textureUniformName, 0);
|
||||
@ -122,9 +127,26 @@ void RenderSystem::drawWorld(GameObjectManager& gameObjects) {
|
||||
|
||||
drawViola(gameObjects);
|
||||
|
||||
renderer.shaderManager.PushShader(defaultShaderName);
|
||||
renderer.shaderManager.PushShader(hideCamShaderName);
|
||||
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(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)
|
||||
{
|
||||
auto shader = shaderManager.GetCurrentShader();
|
||||
|
||||
@ -117,6 +117,8 @@ namespace ZL {
|
||||
|
||||
void RenderUniformMatrix4fv(const std::string& uniformName, bool transpose, const float* 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);
|
||||
|
||||
|
||||
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