Compare commits

..

4 commits

Author SHA1 Message Date
37e525d6ee Moved OpenGL texture generation to the Texture class 2019-11-03 15:50:37 +01:00
d0b533608a Fixed colors of RGBA TGA not being inverted 2019-11-03 15:49:55 +01:00
5f1cd422ff Moved resources to the example directory 2019-11-03 15:32:47 +01:00
9568b54b87 Added getters for camera properties
Added world translation for camera
Renamed previous translation to local_translate
2019-11-03 15:32:14 +01:00
9 changed files with 54 additions and 16 deletions

View file

@ -36,30 +36,30 @@ void manage_inputs()
if (InputStatus::is_special_key_pressed(GLUT_KEY_RIGHT)) if (InputStatus::is_special_key_pressed(GLUT_KEY_RIGHT))
{ {
timer_ticks += 5; timer_ticks += 5;
OGLE::camera.translate({0,0,0.1}); OGLE::camera.local_translate({0, 0, 0.1});
} }
if (InputStatus::is_special_key_pressed(GLUT_KEY_LEFT)) if (InputStatus::is_special_key_pressed(GLUT_KEY_LEFT))
{ {
timer_ticks -= 5; timer_ticks -= 5;
OGLE::camera.translate({0,0,-0.1}); OGLE::camera.local_translate({0, 0, -0.1});
} }
if (InputStatus::is_key_pressed(' ')) if (InputStatus::is_key_pressed(' '))
{ {
OGLE::camera.translate({0,0.1,0}); OGLE::camera.local_translate({0, 0.1, 0});
} }
if (InputStatus::is_special_key_pressed(GLUT_KEY_PAGE_DOWN)) if (InputStatus::is_special_key_pressed(GLUT_KEY_PAGE_DOWN))
{ {
OGLE::camera.translate({0,-0.1,0}); OGLE::camera.local_translate({0, -0.1, 0});
} }
if (InputStatus::is_special_key_pressed(GLUT_KEY_UP)) if (InputStatus::is_special_key_pressed(GLUT_KEY_UP))
{ {
OGLE::camera.translate({0.1,0,0}); OGLE::camera.local_translate({0.1, 0, 0});
} }
if (InputStatus::is_special_key_pressed(GLUT_KEY_DOWN)) if (InputStatus::is_special_key_pressed(GLUT_KEY_DOWN))
{ {
OGLE::camera.translate({-0.1,0,0}); OGLE::camera.local_translate({-0.1, 0, 0});
} }
// Get mouse delta since last frame // Get mouse delta since last frame
@ -103,17 +103,9 @@ int main(int argc, char** argv)
// Load and generate tree texture // Load and generate tree texture
tree_texture.load_rgba_tga("resources/arbre.tga","resources/arbre_masque.tga"); tree_texture.load_rgba_tga("resources/arbre.tga","resources/arbre_masque.tga");
glGenTextures(1,tree_texture.opengl_id);
// TODO : Put in the Texture class
glBindTexture(GL_TEXTURE_2D,tree_texture.opengl_id[0]);
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA8,tree_texture.width,tree_texture.height,GL_RGBA,GL_UNSIGNED_BYTE,tree_texture.image_data);
// Load and generate raptor texture // Load and generate raptor texture
raptor_texture.load_rgb_tga("resources/RAPTOR.tga"); raptor_texture.load_rgb_tga("resources/RAPTOR.tga");
glGenTextures(1, raptor_texture.opengl_id);
// TODO : Put in the Texture class
glBindTexture(GL_TEXTURE_2D, raptor_texture.opengl_id[0]);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB8, raptor_texture.width, raptor_texture.height, GL_RGB, GL_UNSIGNED_BYTE, raptor_texture.image_data);
// Load raptor model // Load raptor model
raptor.load_ascii_off_file("resources/RAPTOR.off"); raptor.load_ascii_off_file("resources/RAPTOR.off");

View file

@ -17,7 +17,11 @@ Camera::Camera(const Vec3d& eye_pos, const Vec3d& look_direction, const Vec3d& u
compute_base_change(); compute_base_change();
} }
void Camera::translate(const Vec3d& translation) void Camera::translate(const Vec3d &translation) {
eye = eye + translation;
}
void Camera::local_translate(const Vec3d& translation)
{ {
eye = eye + translation * rotation_quaternion; eye = eye + translation * rotation_quaternion;
} }
@ -55,6 +59,21 @@ void Camera::set_position(const Vec3d& eye_pos)
gaze = eye_pos; gaze = eye_pos;
} }
const Vec3d& Camera::get_eyepos() const
{
return eye;
}
const Vec3d& Camera::get_gaze() const
{
return gaze;
}
const Vec3d& Camera::get_gazeup() const
{
return gaze_up;
}
void Camera::compute_base_change() void Camera::compute_base_change()
{ {
// Third vector of the base, should already be normalized // Third vector of the base, should already be normalized

View file

@ -15,9 +15,12 @@ class Camera {
public: public:
Camera(const Vec3d& eye_pos,const Vec3d& look_direction,const Vec3d& up_vector); Camera(const Vec3d& eye_pos,const Vec3d& look_direction,const Vec3d& up_vector);
/// Translates the camera according to the world axises.
/// \param translation Translation in the world coordinates system.
void translate(const Vec3d& translation);
/// Translates the camera relative to its current position and look direction. /// Translates the camera relative to its current position and look direction.
/// \param translation Translation where x is pointing in the direction of vision. /// \param translation Translation where x is pointing in the direction of vision.
void translate(const Vec3d& translation); void local_translate(const Vec3d& translation);
/// Rotates the gaze around its local x and z but around global y, relatively to the current orientation. /// Rotates the gaze around its local x and z but around global y, relatively to the current orientation.
/// This is to provide a coherent movement in regards to mouse movement. /// This is to provide a coherent movement in regards to mouse movement.
/// \param rotation Angles are radians to rotate about each axis. /// \param rotation Angles are radians to rotate about each axis.
@ -27,6 +30,10 @@ public:
void look(); void look();
void set_position(const Vec3d& eye_pos); void set_position(const Vec3d& eye_pos);
const Vec3d& get_eyepos() const;
const Vec3d& get_gaze() const;
const Vec3d& get_gazeup() const;
private: private:
Vec3d eye; Vec3d eye;
Vec3d gaze; Vec3d gaze;

View file

@ -73,6 +73,7 @@ bool Texture::load_rgb_tga(const std::string& rgb_filename)
{ {
bool return_value = load_tga(rgb_filename,image_data); bool return_value = load_tga(rgb_filename,image_data);
invert_channels(0,2); invert_channels(0,2);
generate_texture();
return return_value; return return_value;
} }
@ -117,9 +118,25 @@ bool Texture::load_rgba_tga(const std::string& rgb_filename, const std::string&
// Now we have an RGBA image, update color_bits // Now we have an RGBA image, update color_bits
color_bits = 32; color_bits = 32;
invert_channels(0,2);
generate_texture();
return true; return true;
} }
void Texture::generate_texture()
{
glGenTextures(1,opengl_id);
glBindTexture(GL_TEXTURE_2D,opengl_id[0]);
if (color_bits == 24)
{
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGB8,width,height,GL_RGB,GL_UNSIGNED_BYTE,image_data);
}
else if (color_bits == 32)
{
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA8,width,height,GL_RGBA,GL_UNSIGNED_BYTE,image_data);
}
}
void Texture::invert_channels(uint8_t first_channel, uint8_t second_channel) void Texture::invert_channels(uint8_t first_channel, uint8_t second_channel)
{ {
uint8_t increment = color_bits/8; uint8_t increment = color_bits/8;

View file

@ -33,6 +33,9 @@ private:
/// Load and RGB TGA image file to an array /// Load and RGB TGA image file to an array
bool load_tga(const std::string& filename, uint8_t*& data_array); bool load_tga(const std::string& filename, uint8_t*& data_array);
/// Initialize the texture for OpenGL
void generate_texture();
void invert_channels(uint8_t first_channel,uint8_t second_channel); void invert_channels(uint8_t first_channel,uint8_t second_channel);
}; };