2011-09-08 16 views
32

मैं ओपनजीएल गणित पुस्तकालय (glm.g-truc.net) का उपयोग कर रहा हूं और एक फ्लोट-सरणी के साथ glm::mat4 प्रारंभ करना चाहता हूं।एक सरणी के साथ एक glm :: mat4 कैसे प्रारंभ करें?

float aaa[16]; 
glm::mat4 bbb(aaa); 

यह काम नहीं करता है।

मुझे लगता है कि समाधान छोटा है, लेकिन मुझे नहीं पता कि यह कैसे करना है। मुझे glm के बारे में एक अच्छा प्रलेखन नहीं मिला। मैं कुछ सहायक लिंक की सराहना करता हूं।

उत्तर

56

, GLM glm/gtc/type_ptr.hpp में make_ * कार्य शामिल हैं:

#include <glm/gtc/type_ptr.hpp> 
float aaa[16]; 
glm::mat4 bbb = glm::make_mat4(aaa); 
+7

यह भी सुनिश्चित करना न भूलें कि स्रोत सरणी ** कॉलम-वार ** संग्रहीत है, अन्यथा आपको आवश्यकता होगी 'glm :: mat4 bbbT = glm :: make_mat4 (aaa) जोड़ने के लिए; glm :: mat4 bbb = glm :: transpose (bbbT); ' –

3

आप एक एडाप्टर समारोह लिख सकते हैं: यद्यपि एक निर्माता नहीं है

template<typename T> 
tvec4<T> tvec4_from_t(const T *arr) { 
    return tvec4<T>(arr[0], arr[1], arr[2], arr[3]); 
} 

template<typename T> 
tmat4<T> tmat4_from_t(const T *arr) { 
    return tmat4<T>(tvec4_from_t(arr), tvec4_from_t(arr + 4), tvec4_from_t(arr + 8), tvec4_from_t(arr + 12)); 
} 


// later 
float aaa[16]; 
glm::mat4 bbb = tmac4_from_t(aaa); 
6

तुम भी सीधे स्मृति कॉपी कर सकते हैं:

float aaa[16] = { 
    1, 2, 3, 4, 
    5, 6, 7, 8, 
    9, 10, 11, 12, 
    13, 14, 15, 16 
}; 
glm::mat4 bbb; 

memcpy(glm::value_ptr(bbb), aaa, sizeof(aaa)); 
संबंधित मुद्दे