2015-06-30 9 views
6

मैं खिड़की बनाने के लिए क्यूटी 5.4 का उपयोग करना चाहता हूं और सामान्य ओपनजीएल कार्यों के साथ उस विंडो में कुछ सामान प्रस्तुत करना चाहता हूं। पिछले कुछ दिनों में, मैंने क्यूटी कक्षाओं और ओपनजीएल को शुरू करने के तरीके के बारे में बहुत कुछ पढ़ा। मुझे लगता है कि जिन मुख्य वर्गों से मुझे निपटना है वे QOpenGLWindow या QOpenGLWidget हैं, लेकिन QSurface और कुछ अन्य वर्ग भी हैं। अब मैं इस बारे में बहुत अनिश्चित हूं कि बाद में क्या करना है और बाद में सादे ओपनजीएल कार्यों का उपयोग करने के लिए मुझे किस वर्ग का उपयोग करना चाहिए। क्या कोई मुझे स्पष्ट रूप से समझा सकता है कि मुझे एक क्यूटी जीयूआई स्थापित करने के लिए क्या करना है जिसमें मैं सादा ओपनजीएल का उपयोग कर सकता हूं?Qt 5.4 के साथ देशी OpenGL का उपयोग कैसे करें?

मुझ से कुछ अन्य प्रश्न हैं:

  • जो बिंदु पर क्यूटी एक सादे ओपन संदर्भ बनाता है? क्या मुझे QOpenGLContext का उपयोग करना है?
  • QSurface और QOpenGLWindow के बीच वास्तव में क्या अंतर है? QOpenGLWindow उदाहरण में दोनों वर्गों का उपयोग किया जाता है।
  • क्या यह क्यूटी सामान के अलावा glew का उपयोग करना संभव है? यहां कुछ प्रश्न दिए गए हैं, जो क्यूटी के साथ glew स्थापित करने के साथ सौदा करते हैं, लेकिन मुझे लगता है कि मुझे वास्तविक बिंदु नहीं मिला है कि क्यों जरूरी है।

संपादित करें: मैंने इस प्रश्न पर एक सहयोगी के साथ चर्चा की और हमारा एकमात्र निष्कर्ष ऑफस्क्रीन-रेंडरिंग का उपयोग करना था। क्या कोई और समाधान जानता है?

+0

क्या आपने [ओपनजीएल विंडो उदाहरण] (http://doc.qt.io/qt-5/qtgui-openglwindow-example देखा है।एचटीएमएल) (हालांकि यह 'QOpenGLWindow' वर्ग का उपयोग नहीं करता है)? ['QSurface'] (http://doc.qt.io/qt-5/qsurface.html) 'QWindow' की शुद्ध वर्चुअल बेस क्लास है और' QOpenGLWindow' भी है। स्पष्ट रूप से 'QOpenGLWindow'' QOpenGLWidget' और 'QOpenGLWidget' जैसे काम करता है [अधिक पूर्ण दस्तावेज़ीकरण] है (http://doc.qt.io/qt-5/qopenglwidget.html#details)। – Leiaz

+0

क्यू के साथ भेजे गए एक QOpenGLWindow उदाहरण भी है। – peppe

उत्तर

1

किस बिंदु पर क्यूटी एक सादा OpenGL संदर्भ बनाते हैं? क्या मुझे QOpenGLContext का उपयोग करना है?

या तो जहां यह (उदाहरण के लिए, बनाने एक QOpenGLWidget या एक QOpenGLWindow स्वचालित रूप से एक संदर्भ पैदा करेगा) दस्तावेज़ीकरण किया गया है, या आप एक QOpenGLContext वस्तु बनाने के द्वारा किसी भी समय मैन्युअल रूप से एक संदर्भ बना सकते हैं।

QSurface और QOpenGLWindow के बीच वास्तव में क्या अंतर है? QOpenGLWindow उदाहरण में दोनों वर्गों का उपयोग किया जाता है।

QSurface एक "कोरबल सतह" (ऑनस्क्रीन या ऑफस्क्रीन) का प्रतिनिधित्व करने वाला बेस क्लास है। QWindow इसका ऑनस्क्रीन कार्यान्वयन है (एक शीर्ष स्तरीय विंडो का प्रतिनिधित्व करता है), इसलिए यह QSurface से प्राप्त होता है। आप ओपनजीएल का उपयोग करके या सीपीयू-आधारित रास्टरराइज़र का उपयोग कर QWindow पर आकर्षित कर सकते हैं।

अंत में, QOpenGLWindow एक QWindow उपवर्ग जो, कुछ अतिरिक्त कार्यक्षमता और सुविधा प्रदान करता है स्वचालित रूप से बनाने के लिए और एक ओपन संदर्भ प्रबंध (QOpenGLContext के माध्यम से), एक वैकल्पिक आंशिक अद्यतन रणनीति (एक FBO के उपयोग के माध्यम से) होने, आदि के द्वारा होता है

क्या यह क्यूटी सामान के अलावा glew का उपयोग करना संभव है? यहां कुछ प्रश्न दिए गए हैं, जो क्यूटी के साथ glew स्थापित करने के साथ सौदा करते हैं, लेकिन मुझे लगता है कि मुझे वास्तविक बिंदु नहीं मिला है कि क्यों जरूरी है।

क्यूटी आपके रास्ते में नहीं है। और यह किसी भी तरह से ओपनजीएल का उपयोग नहीं बदलता है। खिड़की और एक संदर्भ (पूरी तरह से क्रॉस प्लेटफॉर्म मार्ग में) बनाने के लिए बस क्यूटी का उपयोग करें, फिर आप GLEW (ओपनजीएल फ़ंक्शन पॉइंटर्स, एक्सटेंशन इत्यादि को हल करने के लिए) या किसी तीसरे पक्ष ओपनजीएल अबास्ट्रक्शन का उपयोग करने के लिए स्वतंत्र हैं।

+0

सिवाय इसके कि QT मेरे रास्ते में है क्योंकि मैं किसी भी QWidgets पर केवल मैन्युअल रूप से ओपनजीएल कॉन्टेक्स्ट चालू नहीं कर सकता, केवल QSurfaces, यदि मैं एक QWIdget में वर्तमान OpenGLContext चाहता हूं, तो मुझे केवल QT प्रबंधित संदर्भ का उपयोग करने का संकल्प करना होगा जो गारंटीकृत है प्रारंभिक जीएल(), पेंटजीएल(), और आकार बदलें जीएल() – ComradeJoecool

+0

एक क्यूविजेट ओपनजीएल सतह नहीं है, इसलिए "इस पर एक संदर्भ चालू करना" समझ में नहीं आता है। आप जो चाहते हैं उसे करने के लिए आपको एक वास्तविक सतह की आवश्यकता है - उदा। एक सादा QWindow का उपयोग करके और इसे 'QWidget :: createWindowContainer' के माध्यम से विजेट में लपेटकर। यह "आपके रास्ते में नहीं है", जो खेल के नियमों द्वारा खेल रहा है (जिस तरह से ओपनजीएल द्वारा निर्धारित किया जाता है, क्यूटी नहीं)। – peppe

+0

ठीक है, इसलिए मुझे यह उल्लेख करना चाहिए था कि यह QWidget नहीं है, बल्कि QOpenGlWidget है, मैं ओपनजीएल का उपयोग कर सकता हूं, लेकिन केवल अगर मैं इसे QT का तरीका करता हूं, तो यह "मेरे रास्ते में" – ComradeJoecool

संबंधित मुद्दे