From a556b45abf18f1bd509daaf63b66b7d55e9fd291 Mon Sep 17 00:00:00 2001 From: jjesswan Date: Mon, 22 Apr 2024 21:56:26 -0400 Subject: add engine version --- engine-ocean/Game/Environment/grassenvironment.cpp | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 engine-ocean/Game/Environment/grassenvironment.cpp (limited to 'engine-ocean/Game/Environment/grassenvironment.cpp') diff --git a/engine-ocean/Game/Environment/grassenvironment.cpp b/engine-ocean/Game/Environment/grassenvironment.cpp new file mode 100644 index 0000000..1d1ed9b --- /dev/null +++ b/engine-ocean/Game/Environment/grassenvironment.cpp @@ -0,0 +1,85 @@ +#include "grassenvironment.h" +#include "Game/Components/CollisionComponents/BoundingTriangle.h" +#include "Game/Components/CollisionComponents/CollisionComponent.h" +#include "Game/Components/TransformComponent.h" +#include "Game/GameObjects/GameObject.h" +#include "Graphics/global.h" + +GrassEnvironment::GrassEnvironment(std::map>& rigid_gameobjects, + std::map>& dynamic_gameobjects, + std::shared_ptr camera): + m_rigid_gameobjects(rigid_gameobjects), + m_dynamic_gameobjects(dynamic_gameobjects), + m_camera(camera) +{ + + initializeGrassVBO(); +} + +void GrassEnvironment::initializeGrassVBO(){ +// grass_tex = Global::graphics.loadTextureFromFile("/Users/jesswan/Desktop/cs1950u/cs1950u-jjesswan/Resources/Images/meadow_texture_atlas.png").textureID; +// wind_tex = Global::graphics.loadTextureFromFile("/Users/jesswan/Desktop/cs1950u/cs1950u-jjesswan/Resources/Images/wind_flowmap1.png").textureID; +// meadow_tex = Global::graphics.loadTextureFromFile("/Users/jesswan/Desktop/cs1950u/cs1950u-jjesswan/Resources/Images/meadow_flower_map.png").textureID; + + +// std::vector surface_points = m_rigid_gameobjects["ground"]->getComponent()->getCollisionShape()->getSurfacePoints(); +// positions.insert(std::end(positions), std::begin(surface_points), std::end(surface_points)); + + +// glGenVertexArrays(1, &VAO); +// glGenBuffers(1, &VBO); +// glBindVertexArray(VAO); + +// glBindBuffer(GL_ARRAY_BUFFER, VBO); +// glBufferData(GL_ARRAY_BUFFER, positions.size()*sizeof(glm::vec3), positions.data(), GL_STATIC_DRAW); + +// glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), (void*)0); + +// // unbind +// glEnableVertexAttribArray(0); +// glBindBuffer(GL_ARRAY_BUFFER, 0); +} + +glm::vec2 GrassEnvironment::getRandomOffset(int ub, int numRows){ + int index = floor(Global::graphics.generateRandomNumbers(0, ub)); + int column = index % numRows; + float xoffset = static_cast(column)/static_cast(numRows); + + int row = floor(index/numRows); + float yOffset = static_cast(row)/static_cast(numRows); + return glm::vec2(xoffset, yOffset); +} + +void GrassEnvironment::draw(){ + // draw grass + glPointSize(8.f); + Global::graphics.bindShader("grass"); + + // activate texture + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, grass_tex); + + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, wind_tex); + + glActiveTexture(GL_TEXTURE7); + glBindTexture(GL_TEXTURE_2D, meadow_tex); + + // update time + glUniform1f(glGetUniformLocation(Global::graphics.getShaderID("grass"), "u_time"), glfwGetTime()*.1f); + // update player pos + glm::vec3 playerPos = m_dynamic_gameobjects.at("player")->getComponent()->getPos(); + glUniform3f(glGetUniformLocation(Global::graphics.getShaderID("grass"), "playerPos"), playerPos.x, playerPos.y, playerPos.z); + + //glm::vec2 offset = getRandomOffset(4, 2); + // update offset + //glUniform2f(glGetUniformLocation(Global::graphics.getShaderID("grass"), "atlas_offset"), offset.x, offset.y); + + + Global::graphics.setCameraData(m_camera); + Global::graphics.setGlobalData(glm::vec3(.5f)); + glBindVertexArray(VAO); + glDrawArrays(GL_POINTS, 0, positions.size()); +}; + +void GrassEnvironment::update(double deltaTime){}; -- cgit v1.2.3-70-g09d2