[Add] Ground plane.
This commit is contained in:
parent
e208f49674
commit
a6646820c5
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
|
uniform vec3 overrideColor;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
FragColor = vec4(0.2f, 0.5f, 0.8f, 1.0f);
|
FragColor = vec4(overrideColor, 1.0f);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
} \
|
} \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
Renderer::Renderer(void) : _vao(0), _vbo(0) {}
|
Renderer::Renderer(void) : _vao(0), _vbo(0), _ground_vao(0), _ground_vbo(0) {}
|
||||||
|
|
||||||
Renderer::~Renderer(void) {
|
Renderer::~Renderer(void) {
|
||||||
if(_vao != 0) {
|
if(_vao != 0) {
|
||||||
@ -29,6 +29,12 @@ Renderer::~Renderer(void) {
|
|||||||
if(_vbo != 0) {
|
if(_vbo != 0) {
|
||||||
glDeleteBuffers(1, &_vbo);
|
glDeleteBuffers(1, &_vbo);
|
||||||
}
|
}
|
||||||
|
if(_ground_vao != 0) {
|
||||||
|
glDeleteVertexArrays(1, &_ground_vao);
|
||||||
|
}
|
||||||
|
if(_ground_vbo != 0) {
|
||||||
|
glDeleteBuffers(1, &_ground_vbo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Renderer::init(int screen_width, int screen_height) {
|
bool Renderer::init(int screen_width, int screen_height) {
|
||||||
@ -98,6 +104,28 @@ bool Renderer::init(int screen_width, int screen_height) {
|
|||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
|
|
||||||
|
/* Setup ground plane. */
|
||||||
|
float ground_vertices[] = {
|
||||||
|
/* Positions. */
|
||||||
|
500.0f, -0.5f, 500.0f,
|
||||||
|
-500.0f, -0.5f, 500.0f,
|
||||||
|
-500.0f, -0.5f, -500.0f,
|
||||||
|
|
||||||
|
500.0f, -0.5f, 500.0f,
|
||||||
|
-500.0f, -0.5f, -500.0f,
|
||||||
|
500.0f, -0.5f, -500.0f,
|
||||||
|
};
|
||||||
|
|
||||||
|
glGenVertexArrays(1, &_ground_vao);
|
||||||
|
glGenBuffers(1, &_ground_vbo);
|
||||||
|
glBindVertexArray(_ground_vao);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, _ground_vbo);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(ground_vertices), ground_vertices, GL_STATIC_DRAW);
|
||||||
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), (void*)0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
|
||||||
glViewport(0,0,screen_width, screen_height);
|
glViewport(0,0,screen_width, screen_height);
|
||||||
GL_CHECK_ERROR();
|
GL_CHECK_ERROR();
|
||||||
glEnable(GL_DEPTH_TEST); /* Depth testing for 3D! */
|
glEnable(GL_DEPTH_TEST); /* Depth testing for 3D! */
|
||||||
@ -124,32 +152,42 @@ void Renderer::render(const Player& player, const std::vector<RemotePlayer>& rem
|
|||||||
GLint view_loc = glGetUniformLocation(_shader.get_id(), "view");
|
GLint view_loc = glGetUniformLocation(_shader.get_id(), "view");
|
||||||
GLint proj_loc = glGetUniformLocation(_shader.get_id(), "projection");
|
GLint proj_loc = glGetUniformLocation(_shader.get_id(), "projection");
|
||||||
GLint model_loc = glGetUniformLocation(_shader.get_id(), "model");
|
GLint model_loc = glGetUniformLocation(_shader.get_id(), "model");
|
||||||
|
GLint color_loc = glGetUniformLocation(_shader.get_id(), "overrideColor");
|
||||||
|
|
||||||
glUniformMatrix4fv(view_loc, 1, GL_FALSE, view.get_ptr());
|
glUniformMatrix4fv(view_loc, 1, GL_FALSE, view.get_ptr());
|
||||||
GL_CHECK_ERROR();
|
GL_CHECK_ERROR();
|
||||||
glUniformMatrix4fv(proj_loc, 1, GL_FALSE, projection.get_ptr());
|
glUniformMatrix4fv(proj_loc, 1, GL_FALSE, projection.get_ptr());
|
||||||
GL_CHECK_ERROR();
|
GL_CHECK_ERROR();
|
||||||
|
|
||||||
|
/* Draw the ground. */
|
||||||
|
BettolaMath::Mat4 ground_model = BettolaMath::Mat4::translation(0.0f, 0.0f, 0.0f);
|
||||||
|
glUniformMatrix4fv(model_loc, 1, GL_FALSE, ground_model.get_ptr());
|
||||||
|
glUniform3f(color_loc, 0.2f, 0.4f, 0.2f);
|
||||||
|
glBindVertexArray(_ground_vao);
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||||
|
glBindVertexArray(0); /* WHOOAAA! Got to make sure we unbind the VAO! */
|
||||||
|
|
||||||
|
/* Set players colour back. */
|
||||||
|
glUniform3f(color_loc, 0.2f, 0.5f, 0.8f);
|
||||||
|
|
||||||
/* Draw the local player's cube. */
|
/* Draw the local player's cube. */
|
||||||
BettolaMath::Mat4 model = BettolaMath::Mat4::translation(player.get_x(), 0.0f, player.get_y());
|
BettolaMath::Mat4 model = BettolaMath::Mat4::translation(player.get_x(), 0.0f, player.get_y());
|
||||||
glUniformMatrix4fv(model_loc, 1, GL_FALSE, model.get_ptr());
|
glUniformMatrix4fv(model_loc, 1, GL_FALSE, model.get_ptr());
|
||||||
GL_CHECK_ERROR();
|
GL_CHECK_ERROR();
|
||||||
|
|
||||||
glBindVertexArray(_vao);
|
glBindVertexArray(_vao);
|
||||||
GL_CHECK_ERROR();
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 36);
|
glDrawArrays(GL_TRIANGLES, 0, 36);
|
||||||
GL_CHECK_ERROR();
|
glBindVertexArray(0); /* F.ck me! Forgot to unbind here too?!?!? */
|
||||||
|
|
||||||
/* Draw remote players' cube. */
|
/* Draw remote players' cube. */
|
||||||
for(const auto& remote_player : remote_players) {
|
for(const auto& remote_player : remote_players) {
|
||||||
|
glBindVertexArray(_vao); /* bind cube VAO for each remote player. */
|
||||||
BettolaMath::Mat4 remote_model = BettolaMath::Mat4::translation(remote_player.get_x(),
|
BettolaMath::Mat4 remote_model = BettolaMath::Mat4::translation(remote_player.get_x(),
|
||||||
0.0f, remote_player.get_y());
|
0.0f, remote_player.get_y());
|
||||||
glUniformMatrix4fv(model_loc, 1, GL_FALSE, remote_model.get_ptr());
|
glUniformMatrix4fv(model_loc, 1, GL_FALSE, remote_model.get_ptr());
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 36);
|
glDrawArrays(GL_TRIANGLES, 0, 36);
|
||||||
GL_CHECK_ERROR();
|
glBindVertexArray(0); /* Unbind it! */
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindVertexArray(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Renderer::_init_shaders(void) {
|
bool Renderer::_init_shaders(void) {
|
||||||
|
|||||||
@ -20,6 +20,8 @@ private:
|
|||||||
Shader _shader;
|
Shader _shader;
|
||||||
unsigned int _vao;
|
unsigned int _vao;
|
||||||
unsigned int _vbo;
|
unsigned int _vbo;
|
||||||
|
unsigned int _ground_vao;
|
||||||
|
unsigned int _ground_vbo;
|
||||||
BettolaMath::Mat4 _projection;
|
BettolaMath::Mat4 _projection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user