तो मैं ओपनजीएल के साथ खेल रहा हूं और कुछ मज़ेदार आकृतियों को आकर्षित करने का तरीका जानने का प्रयास कर रहा हूं।ओपनजीएल ट्यूब पथ के साथ
अभी, मैं एक ट्यूब पर काम कर रहा हूं।
void tube(GLfloat radius, GLfloat segment_length) {
glPolygonMode(GL_BACK, GL_NONE);
glPolygonMode(GL_FRONT, GL_FILL);
glPushMatrix(); {
GLfloat z1 = 0.0;
GLfloat z2 = segment_length;
GLfloat y_offset = 0.0;
GLfloat y_change = 0.00;
int i = 0;
int j = 0;
for (j = 0; j < 20; j++) {
glPushMatrix(); {
glBegin(GL_TRIANGLE_STRIP); {
for (i = 360; i >= 0; i--) {
GLfloat theta = i * pi/180;
GLfloat x = radius * cos(theta);
GLfloat y = radius * sin(theta) + y_offset;
glVertex3f(x, y, z1);
glVertex3f(x, y, z2);
}
} glEnd();
} glPopMatrix();
// attach the front of the next segment to the back of the previous
z1 = z2;
z2 += segment_length;
// make some other adjustments
y_offset += y_change;
}
} glPopMatrix();
}
हालांकि, मैं पता लगा नहीं है कि कैसे ट्यूब एक सर्पिल, या यहाँ तक कि एक साधारण लाइन की तरह किसी भी पूर्वनिर्धारित मार्ग का अनुसरण करने के लिए: मैं एक सीधे ट्यूब के साथ ठीक आकर्षित कर सकते हैं। यदि आप y_change को 0.01 जैसे कुछ में बदलते हैं, तो यह प्रत्येक ट्यूब सेगमेंट को y दिशा में अतिरिक्त 0.01 ऑफ़सेट करेगा। वह महान है, लेकिन मैं उस दिशा में प्रत्येक खंड बिंदु कैसे बना सकता हूं? दूसरे शब्दों में, अभी, प्रत्येक खंड खींचा गया है ताकि वे सभी एक ही दिशा का सामना कर सकें, और दिशा ट्यूब की दिशा नहीं है (चूंकि y_change = 0.01 के साथ, दिशा थोड़ा "ऊपर" है)।
मुझे यकीन नहीं है कि कैसे आगे बढ़ना है। मैंने पिछले सेगमेंट और वर्तमान के बीच वेक्टर प्राप्त करके वैक्टर के साथ खेला है, लेकिन मुझे सच में यकीन नहीं है कि इसके साथ क्या करना है।
आप लाल किताब के फूल की कुर्सी उदाहरण (एक उदाहरण के लिए) को देखा है? http://www.opengl.org/resources/code/samples/redbook/torus.c –