mirror of
https://github.com/overte-org/overte.git
synced 2025-08-12 02:14:07 +02:00
Working on renderer attribute.
This commit is contained in:
parent
0da46a5bc5
commit
5bd3d1fe20
6 changed files with 105 additions and 1 deletions
|
@ -25,6 +25,7 @@
|
|||
#include "MetavoxelSystem.h"
|
||||
#include "renderer/Model.h"
|
||||
|
||||
REGISTER_META_OBJECT(PointMetavoxelRendererImplementation)
|
||||
REGISTER_META_OBJECT(SphereRenderer)
|
||||
REGISTER_META_OBJECT(StaticModelRenderer)
|
||||
|
||||
|
@ -476,6 +477,9 @@ AttributeValue PointBufferAttribute::inherit(const AttributeValue& parentValue)
|
|||
return AttributeValue(parentValue.getAttribute());
|
||||
}
|
||||
|
||||
PointMetavoxelRendererImplementation::PointMetavoxelRendererImplementation() {
|
||||
}
|
||||
|
||||
static void enableClipPlane(GLenum plane, float x, float y, float z, float w) {
|
||||
GLdouble coefficients[] = { x, y, z, w };
|
||||
glClipPlane(plane, coefficients);
|
||||
|
|
|
@ -126,6 +126,15 @@ public:
|
|||
virtual AttributeValue inherit(const AttributeValue& parentValue) const;
|
||||
};
|
||||
|
||||
/// Renders metavoxels as points.
|
||||
class PointMetavoxelRendererImplementation : public MetavoxelRendererImplementation {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
Q_INVOKABLE PointMetavoxelRendererImplementation();
|
||||
};
|
||||
|
||||
/// Base class for spanner renderers; provides clipping.
|
||||
class ClippedRenderer : public SpannerRenderer {
|
||||
Q_OBJECT
|
||||
|
|
|
@ -35,7 +35,9 @@ AttributeRegistry* AttributeRegistry::getInstance() {
|
|||
|
||||
AttributeRegistry::AttributeRegistry() :
|
||||
_guideAttribute(registerAttribute(new SharedObjectAttribute("guide", &MetavoxelGuide::staticMetaObject,
|
||||
SharedObjectPointer(new DefaultMetavoxelGuide())))),
|
||||
new DefaultMetavoxelGuide()))),
|
||||
_rendererAttribute(registerAttribute(new SharedObjectAttribute("renderer", &MetavoxelRenderer::staticMetaObject,
|
||||
new PointMetavoxelRenderer()))),
|
||||
_spannersAttribute(registerAttribute(new SpannerSetAttribute("spanners", &Spanner::staticMetaObject))),
|
||||
_colorAttribute(registerAttribute(new QRgbAttribute("color"))),
|
||||
_normalAttribute(registerAttribute(new PackedNormalAttribute("normal"))),
|
||||
|
|
|
@ -73,6 +73,9 @@ public:
|
|||
/// Returns a reference to the standard SharedObjectPointer "guide" attribute.
|
||||
const AttributePointer& getGuideAttribute() const { return _guideAttribute; }
|
||||
|
||||
/// Returns a reference to the standard SharedObjectPointer "renderer" attribute.
|
||||
const AttributePointer& getRendererAttribute() const { return _rendererAttribute; }
|
||||
|
||||
/// Returns a reference to the standard SharedObjectSet "spanners" attribute.
|
||||
const AttributePointer& getSpannersAttribute() const { return _spannersAttribute; }
|
||||
|
||||
|
@ -99,6 +102,7 @@ private:
|
|||
QReadWriteLock _attributesLock;
|
||||
|
||||
AttributePointer _guideAttribute;
|
||||
AttributePointer _rendererAttribute;
|
||||
AttributePointer _spannersAttribute;
|
||||
AttributePointer _colorAttribute;
|
||||
AttributePointer _normalAttribute;
|
||||
|
|
|
@ -24,6 +24,8 @@ REGISTER_META_OBJECT(MetavoxelGuide)
|
|||
REGISTER_META_OBJECT(DefaultMetavoxelGuide)
|
||||
REGISTER_META_OBJECT(ScriptedMetavoxelGuide)
|
||||
REGISTER_META_OBJECT(ThrobbingMetavoxelGuide)
|
||||
REGISTER_META_OBJECT(MetavoxelRenderer)
|
||||
REGISTER_META_OBJECT(PointMetavoxelRenderer)
|
||||
REGISTER_META_OBJECT(Spanner)
|
||||
REGISTER_META_OBJECT(Sphere)
|
||||
REGISTER_META_OBJECT(StaticModel)
|
||||
|
@ -1845,6 +1847,43 @@ AttributeValue MetavoxelVisitation::getInheritedOutputValue(int index) const {
|
|||
return AttributeValue(visitor->getOutputs().at(index));
|
||||
}
|
||||
|
||||
MetavoxelRenderer::MetavoxelRenderer() :
|
||||
_implementation(NULL) {
|
||||
}
|
||||
|
||||
MetavoxelRendererImplementation* MetavoxelRenderer::getImplementation() {
|
||||
if (!_implementation) {
|
||||
QByteArray className = getImplementationClassName();
|
||||
const QMetaObject* metaObject = Bitstream::getMetaObject(className);
|
||||
if (!metaObject) {
|
||||
qDebug() << "Unknown class name:" << className;
|
||||
metaObject = &MetavoxelRendererImplementation::staticMetaObject;
|
||||
}
|
||||
_implementation = static_cast<MetavoxelRendererImplementation*>(metaObject->newInstance());
|
||||
connect(this, &QObject::destroyed, _implementation, &QObject::deleteLater);
|
||||
_implementation->init(this);
|
||||
}
|
||||
return _implementation;
|
||||
}
|
||||
|
||||
MetavoxelRendererImplementation::MetavoxelRendererImplementation() {
|
||||
}
|
||||
|
||||
void MetavoxelRendererImplementation::init(MetavoxelRenderer* renderer) {
|
||||
_renderer = renderer;
|
||||
}
|
||||
|
||||
QByteArray MetavoxelRenderer::getImplementationClassName() const {
|
||||
return "MetavoxelRendererImplementation";
|
||||
}
|
||||
|
||||
PointMetavoxelRenderer::PointMetavoxelRenderer() {
|
||||
}
|
||||
|
||||
QByteArray PointMetavoxelRenderer::getImplementationClassName() const {
|
||||
return "PointMetavoxelRendererImplementation";
|
||||
}
|
||||
|
||||
const float DEFAULT_PLACEMENT_GRANULARITY = 0.01f;
|
||||
const float DEFAULT_VOXELIZATION_GRANULARITY = powf(2.0f, -3.0f);
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
class QScriptContext;
|
||||
|
||||
class MetavoxelNode;
|
||||
class MetavoxelRendererImplementation;
|
||||
class MetavoxelVisitation;
|
||||
class MetavoxelVisitor;
|
||||
class NetworkValue;
|
||||
|
@ -507,6 +508,51 @@ public:
|
|||
AttributeValue getInheritedOutputValue(int index) const;
|
||||
};
|
||||
|
||||
/// Base class for objects that render metavoxels.
|
||||
class MetavoxelRenderer : public SharedObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
MetavoxelRenderer();
|
||||
|
||||
/// Returns a pointer to the implementation, creating it if necessary.
|
||||
MetavoxelRendererImplementation* getImplementation();
|
||||
|
||||
protected:
|
||||
|
||||
MetavoxelRendererImplementation* _implementation;
|
||||
|
||||
/// Returns the name of the class to instantiate for the implementation.
|
||||
virtual QByteArray getImplementationClassName() const;
|
||||
};
|
||||
|
||||
/// Base class for renderer implementations.
|
||||
class MetavoxelRendererImplementation : public SharedObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
Q_INVOKABLE MetavoxelRendererImplementation();
|
||||
|
||||
virtual void init(MetavoxelRenderer* renderer);
|
||||
|
||||
protected:
|
||||
|
||||
MetavoxelRenderer* _renderer;
|
||||
};
|
||||
|
||||
/// Renders metavoxels as points.
|
||||
class PointMetavoxelRenderer : public MetavoxelRenderer {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
Q_INVOKABLE PointMetavoxelRenderer();
|
||||
|
||||
virtual QByteArray getImplementationClassName() const;
|
||||
};
|
||||
|
||||
/// An object that spans multiple octree cells.
|
||||
class Spanner : public SharedObject {
|
||||
Q_OBJECT
|
||||
|
|
Loading…
Reference in a new issue