मैं कच्चे ओपनजीएल कॉल का उपयोग कर QtQuick दृश्य में एक आइटम खींचना चाहता हूं। मैंने this question में सुझाए गए दृष्टिकोण को लेने का निर्णय लिया है।कच्चे ओपनजीएल कॉल के साथ एक क्यूएमएल आइटम ड्राइंग के साथ समस्या
मैं QQuickFramebufferObject
से पाने के लिए एक क्यूटी त्वरित आइटम बनाया और QML करने के लिए इसे Renderer
के रूप में सामने आ रहा है:
class FboInSGRenderer : public QQuickFramebufferObject {
Q_OBJECT
public:
Renderer *createRenderer() const;
};
स्रोत फ़ाइल:
class LogoInFboRenderer : public QQuickFramebufferObject::Renderer {
public:
LogoInFboRenderer() { }
void render() {
int width = 1, height = 1;
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(0.0, 1.0, 0.0, 0.8);
glBegin(GL_QUADS);
glVertex2f(0, 0);
glVertex2f(width, 0);
glVertex2f(width, height);
glVertex2f(0, height);
glEnd();
glLineWidth(2.5);
glColor4f(0.0, 0.0, 0.0, 1.0);
glBegin(GL_LINES);
glVertex2f(0, 0);
glVertex2f(width, height);
glVertex2f(width, 0);
glVertex2f(0, height);
glEnd();
update();
}
QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) {
QOpenGLFramebufferObjectFormat format;
format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
format.setSamples(4);
return new QOpenGLFramebufferObject(size, format);
}
};
QQuickFramebufferObject::Renderer *FboInSGRenderer::createRenderer() const {
return new LogoInFboRenderer();
}
में: (Scene Graph - Rendering FBOs कोड क्यूटी उदाहरण पर आधारित है) क्यूएमएल मैं इसे निम्नानुसार उपयोग करता हूं:
import QtQuick 2.4
import SceneGraphRendering 1.0
Rectangle {
width: 400
height: 400
color: "purple"
Renderer {
id: renderer
anchors.fill: parent
}
}
मैं वा देखने के लिए कि गाया "एक्स" पूरे दृश्य को भरने जाएगा उम्मीद है, लेकिन इसके बजाय मैं परिणाम नीचे प्रस्तुत हो:
अन्य प्रयोगों पुष्टि करते हैं कि आकर्षित किया आकार हमेशा यह आकार (चौड़ाई/ऊंचाई) विभाजित है लगते हैं 2.
मैंने यह भी देखा कि createFramebufferObject
में size
पैरामीटर सही मान है।
दस्तावेज़ों में देखकर मुझे textureFollowsItemSize
QQuickFramebufferObject
कक्षा में संपत्ति का नेतृत्व किया, लेकिन यह डिफ़ॉल्ट रूप से true
पर सेट किया गया है।
क्या मैं कुछ गलत कर रहा हूं या क्या मुझे इस व्यवहार को क्यूटी बग के रूप में माना जाना चाहिए?
मैं QQuick पता नहीं है, लेकिन ओपन और मैं नहीं दिख रहा है या तो आप एक कैमरा स्थापित किया है कि (प्रक्षेपण या मॉडलव्यू) या एक व्यूपोर्ट। यदि आप डिफ़ॉल्ट opengl कैमरा का उपयोग करते हैं तो यह नकारात्मक z-axis को देखता है। इस प्रकार, जब सकारात्मक एक्स- और वाई-क्वाड्रंट में चित्रण करते हैं तो मैं आपके द्वारा दिखाए जाने वाले परिणाम की अपेक्षा करता हूं (याद रखें, ओपनजी वाई में उल्टा है)। फ्रेमबफर में कुछ 2 डी आइटम प्रस्तुत करने के लिए मैं ज़ेड-दिशा में ऑर्थो कैमरा सेट करता हूं और उदाहरण के लिए सीमाओं [0,0] से [pixels_width, pixels_height] के साथ एक glViewport सेट करेगा। – Thomas
मैंने आपके कोड का उपयोग किया है - मेरे मामले में हरी चीज़ केवल एक बार प्रस्तुत की जाती है। ऐसा क्यों है? – Pietrko