mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-02-23 05:19:18 -06:00
Position, scale and texturepath properties
This commit is contained in:
BIN
data/test2.jpg
Normal file
BIN
data/test2.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 133 KiB |
BIN
data/test3.jpg
Normal file
BIN
data/test3.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 186 KiB |
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user