Compare commits

..

2 commits

Author SHA1 Message Date
Tim Blume
3a07155756 end foo 2022-03-09 01:02:51 +01:00
e1a41a526d wip 2022-03-09 00:56:20 +01:00
11 changed files with 48 additions and 37 deletions

1
.gitignore vendored
View file

@ -11,3 +11,4 @@ tests/tests
*.swp
*.core
vgcore*
.cache

View file

@ -7,19 +7,19 @@ varying vec2 uv;
const int gaussRadius = 11;
const float gaussFilter[gaussRadius] = float[gaussRadius](
0.0402,0.0623,0.0877,0.1120,0.1297,0.1362,0.1297,0.1120,0.0877,0.0623,0.0402
0.0402,0.0623,0.0877,0.1120,0.1297,0.1362,0.1297,0.1120,0.0877,0.0623,0.0402
);
uniform vec2 scale;
void main()
{
vec2 texCoord = uv.xy - float(int(gaussRadius/2)) * scale;
vec3 color = vec3(0.0, 0.0, 0.0);
for (int i=0; i<gaussRadius; ++i) {
color += gaussFilter[i] * texture2D(tex, texCoord).xyz;
texCoord += scale;
}
vec2 texCoord = uv.xy - float(int(gaussRadius/2)) * scale;
vec3 color = vec3(0.0, 0.0, 0.0);
for (int i=0; i<gaussRadius; ++i) {
color += gaussFilter[i] * texture2D(tex, texCoord).xyz-0.0002;
texCoord += scale;
}
gl_FragColor = vec4(color, 1.0);
}

View file

@ -51,8 +51,6 @@ class GameWindow : public endofthejedi::GLWindow {
void resize() override
{
std::cout<<"resize()" << std::endl;
glViewport(0, 0, getwidth(), getheight());
// resize the game

View file

@ -99,7 +99,15 @@ namespace endofthejedi {
m_width = attribs.width;
m_height = attribs.height;
resize();
} else if (event.type == ConfigureNotify) {
XConfigureEvent xce = event.xconfigure;
if ((unsigned int)xce.width != m_width||
(unsigned int)xce.height != m_height) {
m_width = xce.width;
m_height = xce.height;
resize();
}
} else if (event.type == ClientMessage) {
if (event.xclient.data.l[0] == (int) m_atomWmDeleteWindow) {
stop();

View file

@ -1,6 +1,7 @@
#include "polygon_model.hpp"
#include <iostream>
#include <ostream>
namespace endofthejedi {
PolygonModel::PolygonModel(const std::string &filename)
@ -99,9 +100,7 @@ namespace endofthejedi {
return false;
}
aiNode *node = scene->mRootNode;
const aiMesh* mesh = scene->mMeshes[node->mMeshes[0]];
const aiMesh* mesh = scene->mMeshes[0];
// 3 vertices per face, 3 floats per vertex
m_numVertices = mesh->mNumFaces*3;

View file

@ -153,27 +153,25 @@ void RendererPolygon3d::setup() {
m_postprocess_fbo.attachTexture(GL_COLOR_ATTACHMENT0,
m_postprocess_tex0.getName());
renderBackgroundImage();
renderBackgroundImage();
//float s = 0.1;
//glClearColor(s, s, 1.2*s, 1.0);
//float s = 0.1;
//glClearColor(s, s, 1.2*s, 1.0);
m_shader_game_objects.bind();
m_shader_game_objects.bind();
// TODO: add ONE sun planet
// TODO: add lights for explosions
// TODO: add ONE sun planet
// TODO: add lights for explosions
configureLightningInShader(&m_shader_game_objects);
configureLightningInShader(&m_shader_game_objects);
//std::cout<<"setting aspect ratio: " << m_aspectRatio << std::endl;
//std::cout<<"setting aspect ratio: " << m_aspectRatio << std::endl;
renderPlanets();
renderShips();
renderMissiles();
renderParticles();
renderTraces();
renderPlanets();
renderShips();
renderMissiles();
renderParticles();
renderTraces();
glUniform1f(m_shader_game_objects.location("aspectRatio"), m_aspectRatio);
m_postprocess_tex1.bind();
@ -184,14 +182,12 @@ void RendererPolygon3d::setup() {
m_shader_game_objects.bind();
configureLightningInShader(&m_shader_game_objects);
glUniform1f(m_shader_game_objects.location("aspectRatio"), m_aspectRatio);
renderPlanets();
renderShips();
renderMissiles();
renderParticles();
renderTraces();
// postprocessing
m_postprocess_shader.bind();
//glColor3f(1.0, 0.0, 0.0);
@ -520,6 +516,10 @@ void RendererPolygon3d::renderPlanets() {
m_planetModel->render();
}
}
/*
void RendererPolygon3d::renderSun() {
m_planetModel->bind();
@ -553,8 +553,8 @@ void RendererPolygon3d::renderMissiles() {
m_missileModel->bind();
for (const game::Missile *missile : m_missiles) {
glm::vec3 c = glm::vec3(1.0, 1.0, 0.3);
glUniform3f(m_shader_game_objects.location("materialColor"), c.x, c.y, c.z);
glm::vec3 c = glm::vec3(missile->color);
glUniform3f(m_shader_game_objects.location("materialColor"), c.x/2, c.y/2, c.z/2);
// TODO: rename functions so their name represents what args they
// take
@ -665,6 +665,7 @@ void RendererPolygon3d::renderMissiles() {
glUseProgram(0);
// TODO dont use line mode. make that with own quads
glPolygonMode(GL_FRONT, GL_LINE);
for (const game::Trace *trace : m_state->traces) {
float fade_out = 1.0;
@ -680,7 +681,7 @@ void RendererPolygon3d::renderMissiles() {
}
glEnd();
}
glLineWidth(1.0f);
glLineWidth(1.0f);
glPolygonMode(GL_FRONT, GL_FILL);
}

View file

@ -38,6 +38,7 @@ namespace endofthejedi {
void renderMissiles();
void renderShips();
void renderParticles();
void renderText(const char *text, float x, float y, float sx, float sy);
void addModel(const std::string &filename, PolygonModel **dest);

View file

@ -19,6 +19,7 @@ namespace game {
state->generateId(),
player,
player->ship->position,
player->color,
-util::deg2rad(m_angle),
0.005*player->speed);

View file

@ -11,9 +11,10 @@
#include <glm/gtx/norm.hpp>
namespace game {
Missile::Missile(size_t id, Player *player, const glm::vec2 &pos, float angle, float speed)
Missile::Missile(size_t id, Player *player, const glm::vec2 &pos, const glm::vec3 &col, float angle, float speed)
: Object(id, pos)
, player(player)
, color(col)
{
velocity = speed * glm::vec2(std::sin(angle), std::cos(angle));

View file

@ -58,7 +58,7 @@ namespace game {
size_t planetId;
};
Missile(size_t id, Player *player, const glm::vec2 &pos, float angle, float speed);
Missile(size_t id, Player *player, const glm::vec2 &pos, const glm::vec3 &col, float angle, float speed);
~Missile();
// try to advance. if something will be hit, return the first hit in
@ -68,6 +68,7 @@ namespace game {
Player *player; // owner won't be hit by own missiles
glm::vec2 velocity;
Trace *trace;
glm::vec3 color;
};
}

View file

@ -164,10 +164,10 @@ namespace game {
Player *player = playerForId(playerId);
if (player != nullptr) {
for (Missile *missile : player->missiles) {
player->missiles.remove(missile);
player->missiles.remove(missile);
missile->player = nullptr;
m_nextEvents.push_back(new MissileEvent(LifeCycle::Destroy, missile));
}
}
if (player->ship != nullptr) {
ships.remove(player->ship);