में घन बनाने के लिए सबसे अच्छा तरीका एक घन बनाने के लिए सबसे अच्छा तरीका (सबसे कम स्मृति, सबसे तेज़ गति) कौन सा है?ओपनजीएल
डेटा struct:
GLfloat Cube::vertices[] =
{-0.5f, 0.0f, 0.5f, 0.5f, 0.0f, 0.5f, 0.5f, 1.0f, 0.5f, -0.5f, 1.0f, 0.5f,
-0.5f, 1.0f, -0.5f, 0.5f, 1.0f, -0.5f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, -0.5f,
0.5f, 0.0f, 0.5f, 0.5f, 0.0f, -0.5f, 0.5f, 1.0f, -0.5f, 0.5f, 1.0f, 0.5f,
-0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 1.0f, 0.5f, -0.5f, 1.0f, -0.5f
};
GLfloat Cube::texcoords[] = { 0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0
};
GLubyte Cube::cubeIndices[24] = {0,1,2,3, 4,5,6,7, 3,2,5,4, 7,6,1,0,
8,9,10,11, 12,13,14,15};
ड्रॉ समारोह:
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, cubeIndices);
glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_COLOR_ARRAY);
glDisable(GL_TEXTURE_2D);
आप परिणाम देख सकते हैं सही है:
लेकिन करने के लिए कुछ समय के बाद मैं इस समाधान खोजने के लिए है इस परिणाम को दोबारा शुरू करें मुझे कुछ कशेरुकाओं को फिर से परिभाषित करना है (vertices
सरणी में 16 3 डी अंक हैं) अन्यथा बनावट वें मानचित्र में विफल हो जाती है ई DrawElement समारोह।
किसी को कशेरुक सरणी में घन बनाने के लिए एक बेहतर तरीका पता है?
आपको "सबसे तेज़/सबसे कम स्मृति" की आवश्यकता क्यों है, क्या आप स्क्रीन पर अरबों cubes रखने की योजना बना रहे हैं? इसके अलावा, "कुछ कशेरुक को फिर से परिभाषित करने" के साथ आपका क्या मतलब है? –
क्यूब बनावट सेट करने के बाद, एफपीएस कम हो गया है (60 से 40 तक)। मैंने "वर्टिसेस" सरणी में कुछ वर्टेक्स को फिर से परिभाषित किया है, यदि आप बारीकी से देखते हैं तो उस सरणी में 16 अंक (3 डी) हैं, लेकिन एक घन 8 को परिभाषित करने के लिए पर्याप्त हैं। – Luca
आप कुछ गलत कर रहे हैं और शायद यह घन नहीं है, 8 या 16 शिखर कोई फर्क नहीं पड़ता है। यह भी मान लें कि प्रत्येक कशेरुक 3 चेहरों को जोड़ता है और उनमें सभी के पास एक अलग यूवी समन्वय होता है, आपको उन "अतिरिक्त" कोष्ठकों की आवश्यकता होती है। मुझे यकीन नहीं है, लेकिन जब आप बनावट बनाते हैं, तो आपको केवल glTexParameteri को कॉल करना होगा, अगर यह आपके लूप पर है तो यह मंदी के कारण हो सकता है। –