2012-01-26 17 views
5

में मैट 4 सेट करना मैं शेडर्स के बारे में कुछ (मूल) ट्यूटोरियल पढ़ रहा हूं। अब तक उन्होंने आपके शेडर में चर सेट करने के तरीके को कवर किया है। लेकिन यह केवल स्याही, फ्लोट या वैक्टर के बारे में था। मुझे mat4 चर सेट करने के तरीके के बारे में कुछ भी नहीं मिला। मेरा शेडर निम्न की अपेक्षा करता है:ओपनजीएल

uniform vec3 CameraPos; 
uniform mat4 ModelWorld4x4; 

तो मॉडल की स्थिति और मॉडल का विश्व मैट्रिक्स। मुझे लगता है कि मेरे पास कैमरापॉस सही है, लेकिन मैं पृथ्वी पर कैसे वर्डवर्ल्ड 4x4 चर सेट करता हूं ??


यह मैं कैसे vector3

campos = glGetUniformLocation(shader.id(), "CameraPos"); 
glUniform3f(campos, 0.0f, 0.0f, 3.0f); 

यह वह जगह है (तरीकों में से एक) की स्थापना की मैं कैसे mat4

glGetFloatv(GL_MODELVIEW_MATRIX, modelworld); 
modelw = glGetUniformLocation(shader.id(), "ModelWorld4x4"); 
glUniformMatrix4fv(g_modelworld4x4, modelworld); // Not working 

मैं उपयोग कर रहा हूँ सेट करने की कोशिश की है एक मॉडल लोड करने के लिए असिंप लाइब्रेरी, इसलिए वर्तमान में विश्व मैट्रिक्स AiMatrix4x4 संरचना में संग्रहीत है।

// world matrix of the model 
aiMatrix4x4 m = nd->mTransformation; 

// Save in a global variable 
g_modelworld4x4 = m; 

उत्तर

10

सुनिश्चित करें कि आप अपने शेडर में ModelWorld4x4 का उपयोग कर रहे हैं ताकि यह आसानी से संकलित न हो। मान लिया जाये कि g_modelworld4x4 एक नाव * है, यह मेरे लिए काम करता है:

int location = glGetUniformLocationARB(program, "ModelWorld4x4"); 
glUniformMatrix4fvARB(location, 1 /*only setting 1 matrix*/, false /*transpose?*/, g_modelworld4x4; 

आप कैसे अपने फ़ंक्शन कॉल की घोषणा की जाती के आधार पर समारोह के नाम से एआरबी छोड़ने की आवश्यकता हो सकती है।

5

आप जिस तरह से इसे लिखते हैं glUniformMatrix4fv पर कॉल नहीं कर सकते हैं। समारोह के रूप में

void glUniformMatrix4fv( GLint location, 
GLsizei  count, 
GLboolean transpose, 
const GLfloat *  value); 

आपके मामले में परिभाषित किया गया है, तो आप इसे glUniformMatrix4fv (modelw, 1, GL_FALSE, modelworld) साथ कॉल करना होगा जो काम करना चाहिए (मैट्रिक्स संभालने स्तंभ-प्रमुख मेजबान पर संग्रहीत किया जाता है।) अन्यथा, GL_TRUE पारित ऑन-मिलने वाली यह स्थानांतरित करने के लिए उड़ना।