feat: connect geometry position to GLMesh

This commit is contained in:
parker
2025-07-02 13:37:40 +01:00
parent f1d825d513
commit d614c1998c
6 changed files with 68 additions and 15 deletions

View File

@@ -15,6 +15,17 @@ void GLMesh::init()
initBuffers();
vertexPosData = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f,
0.5f, 0.5f, 0.0f
};
// store data in the buffer
glBufferData(GL_ARRAY_BUFFER, vertexPosData.size()*sizeof(GLfloat), vertexPosData.data(), GL_STATIC_DRAW);
// unbind vertex array
glBindVertexArray(0);
}
@@ -22,12 +33,6 @@ void GLMesh::init()
void GLMesh::initBuffers()
{
vertexPosData = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f,
0.5f, 0.5f, 0.0f
};
indexData =
{
@@ -38,8 +43,6 @@ void GLMesh::initBuffers()
glGenBuffers(1, &vertexBuffer);
// set purpose
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
// store data in the buffer
glBufferData(GL_ARRAY_BUFFER, vertexPosData.size()*sizeof(GLfloat), vertexPosData.data(), GL_STATIC_DRAW);
// gives the shader a way to read buffer data
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GLfloat), (void*)0);
@@ -52,6 +55,20 @@ void GLMesh::initBuffers()
}
void GLMesh::setPosBuffer(std::vector<enzo::bt::Vector3> data)
{
vertexPosData.clear();
for(auto vector : data)
{
vertexPosData.push_back(vector.x());
vertexPosData.push_back(vector.y());
vertexPosData.push_back(vector.z());
}
glBufferData(GL_ARRAY_BUFFER, vertexPosData.size()*sizeof(GLfloat), vertexPosData.data(), GL_STATIC_DRAW);
}
void GLMesh::bind()
{
glBindVertexArray(vao);

View File

@@ -1,4 +1,5 @@
#pragma once
#include "Engine/Types.h"
#include <GL/gl.h>
#include <QOpenGLFunctions_3_2_Core>
@@ -16,6 +17,7 @@ public:
void init();
void initBuffers();
void setPosBuffer(std::vector<enzo::bt::Vector3> data);
void bind();
void unbind();
void draw();

View File

@@ -1,4 +1,6 @@
#include "gui/viewport/ViewportGLWidget.h"
#include "Engine/Operator/AttributeHandle.h"
#include "Engine/Types.h"
#include "gui/viewport/GLMesh.h"
#include <glm/mat4x4.hpp>
#include <glm/ext/matrix_clip_space.hpp>
@@ -141,7 +143,25 @@ void ViewportGLWidget::paintGL()
std::unique_ptr<GLMesh> ViewportGLWidget::meshFromGeo(std::unique_ptr<enzo::geo::Geometry>& geometry)
{
using namespace enzo;
auto mesh = std::make_unique<GLMesh>();
std::shared_ptr<ga::Attribute> PAttr = geometry->getAttribByName(ga::AttrOwner::POINT, "P");
ga::AttributeHandleVector3 PAttrHandle = ga::AttributeHandleVector3(PAttr);
PAttrHandle.addValue(bt::Vector3(-0.5f, -0.5f, 0.0f));
PAttrHandle.addValue(bt::Vector3(0.5f, -0.5f, 0.0f));
PAttrHandle.addValue(bt::Vector3(0.0f, 0.5f, 0.0f));
PAttrHandle.addValue(bt::Vector3(0.5f, 0.5f, 0.0f));
mesh->setPosBuffer(PAttrHandle.getData());
// mesh->setPosBuffer(std::vector<bt::Vector3>{
// bt::Vector3(-0.5f, -0.5f, 0.0f),
// bt::Vector3(0.5f, -0.5f, 0.0f),
// bt::Vector3(0.0f, 0.5f, 0.0f),
// bt::Vector3(0.5f, 0.5f, 0.0f),
// });
return mesh;
}