में कक्षाओं में नवीनतम ओपनजीएल कार्यों का उपयोग करके मैंने क्यूटी पर ओपनजीएल काम करने के तरीके के बारे में पहले एक प्रश्न पोस्ट किया था, लेकिन अब मैं ओपनजीएल के नवीनतम कार्यों का उपयोग करने में सक्षम होना चाहता हूं। क्यूटी से पहले, मैं glew का उपयोग कर रहा था; लेकिन क्यूटी कह रहा है कि glew अपनी QtOpenGL शीर्षलेख फ़ाइल के साथ विरोधाभासी है। मैंने QGLWidget और QGLFunctions में देखा, लेकिन स्पष्ट होने के लिए मैं उलझन में हूं कि ओपनजीएल के कार्यों तक पहुंचने के लिए मुझे वास्तव में क्या करना चाहिए।क्यूटी 5.4
अब, मुझे Qt निर्माता 3.3.0 का उपयोग कर Qt 5.4 मिला है और मैं नया QOpenGLWidget का उपयोग कर रहा हूं; हालांकि इसका उपयोग करने के तरीके में मार्गदर्शन की कमी मुझे थोड़ी दूर फेंक देती है: क्यूटी दस्तावेज वहां है और मदद करता है, लेकिन यह केवल कार्यक्रम के अन्य स्थानों में इसका उपयोग करने के बजाय इसे तुरंत चालू करने का तरीका दिखाता है। मैं समझता हूं कि यह QOpenGLWidget QGLWidget के समान कार्य करता है। क्यूटी का विवरण है कि मुझे इससे विरासत मिलनी चाहिए; हालांकि मैं कक्षा के भीतर ओपनजीएल संदर्भ को तत्काल नहीं कर रहा हूं, यह ओपनजीएल कार्यों का उपयोग करना चाहता है; यह कक्षा 'glwidget' में होता है, जो QOpenGLWidget से विरासत में मिलता है।
उदाहरण के लिए, मेरी कक्षाओं ओपन कोड का उपयोग करता है में से एक से इस अंश ले:
void Mesh::init()
{
pNumIndices = pIndices.size();
glGenVertexArrays(1, &pVAO);
glGenBuffers(1, &pVertexBuffer);
glGenBuffers(1, &pIndexBuffer);
glBindVertexArray(pVAO);
glBindBuffer(GL_ARRAY_BUFFER, pVertexBuffer);
glBufferData(GL_ARRAY_BUFFER, pVertices.size() * sizeof(Vertex),
&pVertices[0], GL_STATIC_DRAW);
// etc..
}
मेष एक वर्ग है कि कुछ भी से विरासत नहीं करता है। मूल रूप से, यह केवल glew का उपयोग किया जाता है ताकि यह ओपनजीएल कार्यों की घोषणा प्राप्त कर सके; यह जानने की जरूरत नहीं थी कि वे वैध थे या नहीं, क्योंकि यह गले का काम है। फिर मेनएप क्लास में, मैं तुरंत झुकाव करूँगा। मैं यह भी समझता हूं कि एक QOpenGLFunctions क्लास भी है जो कुछ हद तक काम करता है, लेकिन इन सभी जीएल वर्गों के साथ यह जानना बेहद उलझन में है कि इसका उपयोग कैसे किया जाए। और भी यह है कि मैंने glGenVertexArrays (..) की तलाश करने की कोशिश की लेकिन यह QOpenGLBuffer, QOpenGLFunctions या QOpenGLWidget में नहीं मिला है; और जहां तक मुझे पता है, ओपनजीएल 4.5 के रूप में यह अभी भी spec का हिस्सा है; लेकिन मेरे ग्राफिक्स ड्राइवर ओपनजीएल 4.5 का उपयोग नहीं करते हैं, इसलिए मैं इसके बजाय ओपनजीएल 4.3 का उपयोग करता हूं। यह कहने के लिए पर्याप्त है कि मैं ओपनजीएल कार्यों को कॉल करने के लिए क्यूटी के अपने दृष्टिकोण को अपनाने के लिए तैयार हूं।
ऐसे कार्यक्रम में जहां विभिन्न कक्षाएं OpenGL फ़ंक्शंस का उपयोग कर रही हैं, मैं क्यूटी का उपयोग बिना उन्हें ग्लू के उपयोग के कॉल करने में सक्षम कैसे कर सकता हूं? मेष उन वर्गों में से एक है जो ओपनजीएल को तत्काल नहीं करता है, लेकिन केवल इसके कार्यों का उपयोग करता है।
बस इतना लोगों को पता है, मैं कुछ समय के लिए क्यूटी का उपयोग कर रहा हूं (हालांकि पर्याप्त नहीं!) और क्यूटी का आनंद लें; लेकिन मुझे यह जानने की जरूरत है कि मैं विकास जारी रखने के लिए ओपनजीएल के साथ क्यूटी का उपयोग कैसे कर सकता हूं। वहां के अधिकांश ट्यूटोरियल अभी भी प्री-5.4 सामान का उपयोग करते हैं।
struct sLGLAPI
{
sLGLAPI() { memset(this, 0, sizeof(*this)); };
PFNGLACTIVETEXTUREPROC glActiveTexture;
PFNGLATTACHSHADERPROC glAttachShader;
PFNGLBEGINQUERYPROC glBeginQuery;
PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
...
संकेत dlsym
ओपन साझा लाइब्रेरी का एड के साथ इसे भरें::
'glGenVertexArrays' शिखर सरणी वस्तुओं के लिए है, इसलिए जरूरत है कक्षा का नाम क्या है जिसे आप ढूंढना चाहिए? यह सही है, ['QOpenGLVertexArrayObject'] (http://doc.qt.io/qt-5/qopenglvertexarrayobject.html)! – peppe
मुझे व्यक्तिगत रूप से क्यू सामान पसंद नहीं है जहां यह ओपनजीएल सामग्री को केंद्रीय रूप से समाहित करता है। मैं अपने स्वयं के वर्गों के साथ खुद को इस तरह की चीजें करना पसंद करता हूं। – Poriferous