Position, scale and texturepath properties

This commit is contained in:
Sebastian Piwell
2016-03-10 15:04:44 -05:00
parent afc3883d4d
commit a53e289a20
6 changed files with 29 additions and 25 deletions

BIN
data/test2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

BIN
data/test3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

View File

@@ -28,6 +28,7 @@
#include <openspace/properties/propertyowner.h>
#include <openspace/properties/vectorproperty.h>
#include <openspace/properties/scalarproperty.h>
#include <openspace/properties/stringproperty.h>
namespace openspace {
@@ -49,8 +50,8 @@ protected:
properties::BoolProperty _enabled;
properties::BoolProperty _flatScreen;
properties::Vec3Property _position;
properties::Vec2Property _size;
properties::FloatProperty _scale;
properties::StringProperty _texturePath;
GLuint _quad;
GLuint _vertexPositionBuffer;

View File

@@ -34,16 +34,28 @@ namespace openspace {
:ScreenSpaceRenderable()
{
setName("ScreenSpaceImage");
OsEng.gui()._property.registerProperty(&_enabled);
OsEng.gui()._property.registerProperty(&_flatScreen);
OsEng.gui()._property.registerProperty(&_position);
OsEng.gui()._property.registerProperty(&_scale);
OsEng.gui()._property.registerProperty(&_texturePath);
_texturePath.onChange([this](){ loadTexture(); });
}
ScreenSpaceImage::~ScreenSpaceImage(){}
void ScreenSpaceImage::render(){
glm::mat4 transform = glm::translate(glm::mat4(1.f), _position.value());
transform = glm::scale(transform, glm::vec3(_scale.value()));
GLint m_viewport[4];
glGetIntegerv(GL_VIEWPORT, m_viewport);
float height = (float(m_viewport[2])/m_viewport[3])*
(float(_texture->height())/float(_texture->width()));
glm::mat4 transform = glm::translate(glm::mat4(1.f), _position.value());
transform = glm::scale(transform, glm::vec3(_scale.value(),_scale.value()*height,1));
// transform.translate(position.value());
_shader->activate();
_shader->setUniform("ModelTransform",transform);
@@ -60,15 +72,10 @@ void ScreenSpaceImage::render(){
}
bool ScreenSpaceImage::initialize(){
OsEng.gui()._property.registerProperty(&_enabled);
OsEng.gui()._property.registerProperty(&_flatScreen);
glGenVertexArrays(1, &_quad); // generate array
glGenBuffers(1, &_vertexPositionBuffer); // generate buffer
createPlane();
_texturePath = "/home/spiwell/OpenSpace-Development/data/test.png";
if(_shader == nullptr) {
RenderEngine& renderEngine = OsEng.renderEngine();
_shader = renderEngine.buildRenderProgram("ScreenSpaceProgram",
@@ -100,8 +107,8 @@ bool ScreenSpaceImage::isReady() const{
}
void ScreenSpaceImage::loadTexture() {
if (_texturePath != "") {
std::unique_ptr<ghoul::opengl::Texture> texture = ghoul::io::TextureReader::ref().loadTexture(_texturePath);
if (_texturePath.value() != "") {
std::unique_ptr<ghoul::opengl::Texture> texture = ghoul::io::TextureReader::ref().loadTexture(absPath(_texturePath.value()));
if (texture) {
// LDEBUG("Loaded texture from '" << absPath(_texturePath) << "'");
// std::cout<< std::endl << std::endl << "Loaded texture from '" << absPath(_texturePath) << "'" <<std::endl << std::endl;

View File

@@ -41,8 +41,6 @@ public:
bool isReady() const override;
private:
void loadTexture();
std::string _texturePath;
std::unique_ptr<ghoul::opengl::Texture> _texture; // The image to render
};

View File

@@ -28,17 +28,17 @@ namespace openspace {
ScreenSpaceRenderable::ScreenSpaceRenderable()
: _enabled("enabled", "Is Enabled", true)
, _flatScreen("flatScreen", "Flat Screen", true)
, _position("position", "Position", glm::vec3(0,0,0))
, _size("size", "Size" , glm::vec2(1.0,1.0))
, _scale("scale", "Scale" , 0.5)
, _position("position", "Position", glm::vec3(0),glm::vec3(-2),glm::vec3(2))
, _scale("scale", "Scale" , 0.5, 0, 1)
, _texturePath("texturePath", "Texture path", "${OPENSPACE_DATA}/test2.jpg")
, _quad(0)
, _vertexPositionBuffer(0)
{
addProperty(_enabled);
addProperty(_flatScreen);
addProperty(_position);
addProperty(_size);
addProperty(_scale);
addProperty(_texturePath);
}
ScreenSpaceRenderable::~ScreenSpaceRenderable(){}
@@ -51,16 +51,14 @@ namespace openspace {
// ============================
// GEOMETRY (quad)
// ============================
const GLfloat size = _size.value()[0];
const GLfloat w = _size.value()[1];
const GLfloat vertex_data[] = { // square of two triangles (sigh)
// x y z w s t
-size, -size, 0.0f, w, 0, 1,
size, size, 0.0f, w, 1, 0,
-size, size, 0.0f, w, 0, 0,
-size, -size, 0.0f, w, 0, 1,
size, -size, 0.0f, w, 1, 1,
size, size, 0.0f, w, 1, 0,
-1, -1, 0.0f, 1, 0, 1,
1, 1, 0.0f, 1, 1, 0,
-1, 1, 0.0f, 1, 0, 0,
-1, -1, 0.0f, 1, 0, 1,
1, -1, 0.0f, 1, 1, 1,
1, 1, 0.0f, 1, 1, 0,
};
glBindVertexArray(_quad); // bind array