This commit is contained in:
OusmBlueNinja 2024-12-30 00:51:58 -06:00
parent af98c41a6f
commit 41a09cc8f3
6 changed files with 52 additions and 61 deletions

View File

@ -11,7 +11,7 @@ local new_rotation = 0
-- Variables for bobbing effect
local initial_position = {x = 0, y = 0, z = 0} -- To store the gun's initial position
local bobAmplitude = 0.5 -- Amplitude of the bobbing (units)
local bobFrequency = 0.1 -- Frequency of the bobbing (oscillations per second)
local bobFrequency = 0.5 -- Frequency of the bobbing (oscillations per second)
-- Reference to the Gun GameObject and its Transform component
local gun = nil

View File

@ -10,39 +10,20 @@ uniform TextureArray uTextures; // Array of diffuse textures
uniform int uNumDiffuseTextures; // Number of active diffuse textures
// Input variables from the vertex shader
in vec2 TexCoords; // Texture coordinates
in vec2 TexCoords; // Texture coordinates
flat in int TextureIndex; // Texture index for this fragment
// Output fragment color
out vec4 FragColor;
void main()
{
// Define grid dimensions
const int gridCols = 8; // Number of columns in the grid
const int gridRows = 4; // Number of rows in the grid
const float gridWidth = 1.0 / float(gridCols);
const float gridHeight = 1.0 / float(gridRows);
// Calculate grid cell indices based on TexCoords
int col = int(floor(TexCoords.x / gridWidth));
int row = int(floor(TexCoords.y / gridHeight));
// Clamp indices to grid boundaries to prevent out-of-range access
col = clamp(col, 0, gridCols - 1);
row = clamp(row, 0, gridRows - 1);
// Calculate texture index based on row and column
int texIndex = row * gridCols + col;
// Clamp texture index to the number of active textures
texIndex = clamp(texIndex, 0, uNumDiffuseTextures - 1);
// Calculate local texture coordinates within the grid cell
vec2 localTexCoords = fract(TexCoords / vec2(gridWidth, gridHeight));
// Sample the selected texture using localTexCoords
vec4 color = texture(uTextures.texture_diffuse[texIndex], localTexCoords);
// Clamp the texture index to prevent out-of-bounds access
int texIndex = clamp(TextureIndex, 0, uNumDiffuseTextures - 1);
// Sample the texture using the provided index and texture coordinates
vec4 sampledColor = texture(uTextures.texture_diffuse[texIndex], TexCoords);
// Set the final fragment color
FragColor = color;
FragColor = sampledColor;
}

View File

@ -1,30 +1,33 @@
#version 330 core
// Input vertex attributes (from the VAO)
layout(location = 0) in vec3 aPos; // Vertex position
layout(location = 1) in vec3 aNormal; // Vertex normal
layout(location = 2) in vec2 aTexCoords; // Vertex texture coordinates
layout(location = 0) in vec3 aPos; // Vertex position
layout(location = 1) in vec3 aNormal; // Vertex normal
layout(location = 2) in vec2 aTexCoords; // Vertex texture coordinates
layout(location = 3) in int aTexIndex; // Texture index (integer)
// Uniforms
uniform mat4 uMVP; // Model-View-Projection matrix
uniform mat4 uModel; // Model matrix
// Output variables to the fragment shader
out vec2 TexCoords; // Passed texture coordinates
out vec3 Normal; // Passed normal vector
out vec3 FragPos; // Passed fragment position
out vec2 TexCoords; // Passed texture coordinates
flat out int TextureIndex; // Passed texture index
void main()
{
// Calculate the position of the vertex in clip space
// Transform vertex position to clip space
gl_Position = uMVP * vec4(aPos, 1.0);
// Calculate the position of the vertex in world space
FragPos = vec3(uModel * vec4(aPos, 1.0));
// Transform vertex position to world space
vec3 FragPos = vec3(uModel * vec4(aPos, 1.0));
// Calculate the normal vector in world space
Normal = mat3(transpose(inverse(uModel))) * aNormal;
// Transform normal to world space
vec3 Normal = mat3(transpose(inverse(uModel))) * aNormal;
// Pass through the texture coordinates
// Pass through texture coordinates
TexCoords = aTexCoords;
// Pass through the texture index
TextureIndex = aTexIndex;
}

View File

@ -149,7 +149,7 @@ DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=8,27 Size=1904
DockNode ID=0x00000017 Parent=0x0000000D SizeRef=1303,751 CentralNode=1 HiddenTabBar=1 Selected=0xDFF75B3F
DockNode ID=0x00000018 Parent=0x0000000D SizeRef=1303,389 Split=X Selected=0x9B5D3198
DockNode ID=0x0000001B Parent=0x00000018 SizeRef=612,680 HiddenTabBar=1 Selected=0x1C0788A1
DockNode ID=0x0000001C Parent=0x00000018 SizeRef=645,680 Selected=0x9B5D3198
DockNode ID=0x0000001C Parent=0x00000018 SizeRef=645,680 Selected=0x7D9E6BA2
DockNode ID=0x0000000E Parent=0x00000003 SizeRef=1202,569 Selected=0xE98146C5
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1202,291 Selected=0x9DD4E196
DockNode ID=0x00000002 Parent=0x00000008 SizeRef=334,1142 HiddenTabBar=1 Selected=0x36DC96AB

View File

@ -1,16 +1,16 @@
Entities:
- ID: 0
Name: Gun
Name: Bacround
Components:
Transform:
Position: [-0.200000003, 14.618, 0.699999988]
Position: [-0.200000003, 244.5, -220.699997]
Rotation: [0, -88, 0]
Scale: [0.0500000007, 0.0500000007, 0.0500000007]
Scale: [1, 1, 1]
Mesh:
vao: 7
vao: 4
indexCount: 786801
textures:
- id: 11
- id: 34
type: texture_diffuse
path: textures/lion.tga
- id: 12
@ -84,4 +84,18 @@ Entities:
path: textures/vase_round.tga
MeshPath: assets/models/sponza.obj
ScriptComponent:
ScriptPath: assets/scripts/BouncingItem.lua
ScriptPath: ""
- ID: 1
Name: Gun
Components:
ScriptComponent:
ScriptPath: assets/scripts/BouncingItem.lua
Mesh:
vao: 5
indexCount: 116445
textures: ~
MeshPath: assets/models/AK-47.obj
Transform:
Position: [0, 9.54316807, -50]
Rotation: [0, 253.495804, 0]
Scale: [0.100000001, 0.100000001, 0.100000001]

View File

@ -18,7 +18,7 @@ extern std::vector<std::shared_ptr<GameObject>> g_GameObjects;
#define CAM_FOV 45.0f
#define CAM_NEAR_PLAIN 0.1f
#define CAM_FAR_PLAIN 1000.0f
#define CAM_FAR_PLAIN 2048.0f
// Include your AssetManager & Shader headers
#include "Engine/AssetManager.h"
@ -400,7 +400,7 @@ void RenderWindow::RenderSceneToFBO(bool *GameRunning)
// Use our loaded shader
if (!m_ShaderPtr)
{
std::cerr << "[RenderWindow] Shader pointer is null. Cannot render." << std::endl;
DEBUG_PRINT("[RenderWindow] Shader pointer is null. Cannot render.");
m_FBO.Unbind();
return; // Can't render without a shader
}
@ -447,7 +447,7 @@ void RenderWindow::RenderSceneToFBO(bool *GameRunning)
// Validate VAO
if (mesh->vao == 0)
{
std::cerr << "[RenderWindow] Warning: Mesh VAO is not initialized." << std::endl;
DEBUG_PRINT("[RenderWindow] Warning: Mesh VAO is not initialized.");
continue;
}
@ -472,7 +472,7 @@ void RenderWindow::RenderSceneToFBO(bool *GameRunning)
}
else
{
std::cerr << "[RenderWindow] Warning: Uniform 'uMVP' not found in shader." << std::endl;
DEBUG_PRINT("[RenderWindow] Warning: Uniform 'uMVP' not found in shader.");
}
// Pass Model matrix to the shader
@ -483,7 +483,7 @@ void RenderWindow::RenderSceneToFBO(bool *GameRunning)
}
else
{
std::cerr << "[RenderWindow] Warning: Uniform 'uModel' not found in shader." << std::endl;
DEBUG_PRINT("[RenderWindow] Warning: Uniform 'uModel' not found in shader.");
}
// -----------------------------------
@ -507,7 +507,6 @@ void RenderWindow::RenderSceneToFBO(bool *GameRunning)
// Activate the appropriate texture unit
glActiveTexture(GL_TEXTURE0 + textureUnit);
glBindTexture(GL_TEXTURE_2D, texture.id);
CheckOpenGLError("After glBindTexture");
// Construct the uniform name dynamically (e.g., "uTextures.texture_diffuse[0]")
std::string uniformName = "uTextures.texture_diffuse[" + std::to_string(textureUnit) + "]";
@ -516,12 +515,6 @@ void RenderWindow::RenderSceneToFBO(bool *GameRunning)
if (texLoc != -1)
{
glUniform1i(texLoc, textureUnit);
CheckOpenGLError("After glUniform1i for texture");
}
else
{
std::cerr << "[RenderWindow] Warning: Uniform '" << uniformName
<< "' not found in shader." << std::endl;
}
textureUnit++;
@ -549,7 +542,7 @@ void RenderWindow::RenderSceneToFBO(bool *GameRunning)
}
else
{
std::cerr << "[RenderWindow] Warning: Uniform 'uNumDiffuseTextures' not found in shader." << std::endl;
DEBUG_PRINT("[RenderWindow] Warning: Uniform 'uNumDiffuseTextures' not found in shader.");
}
// -----------------------------------