Vì vậy, tôi đang chơi xung quanh với OpenGL và cố gắng tìm ra cách vẽ một số hình dạng thú vị.OpenGL Tube Dọc theo đường dẫn
Ngay bây giờ, tôi đang làm việc trên một ống. Tôi có thể rút ra một ống thẳng chỉ tốt với:
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();
}
Tuy nhiên, tôi đã không tìm ra cách để làm cho ống theo bất kỳ con đường được xác định trước như một vòng xoáy, hoặc thậm chí một dòng đơn giản. Nếu bạn thay đổi y_change thành một cái gì đó như 0,01, nó sẽ vẽ từng phân đoạn ống bù thêm 0,01 theo hướng y. Điều đó thật tuyệt, nhưng làm thế nào tôi có thể làm cho mỗi phân đoạn theo hướng đó? Nói cách khác, ngay bây giờ, mỗi đoạn được vẽ sao cho tất cả chúng đều hướng về cùng một hướng, và hướng không phải là hướng của ống (vì với y_change = 0,01, hướng hơi "lên").
Tôi không chắc chắn cách tiếp tục. Tôi đã chơi với vectơ bằng cách lấy véc-tơ giữa đoạn trước và đoạn hiện tại, nhưng tôi không thực sự chắc chắn phải làm gì với nó.
bạn đã xem xét (đối với một ví dụ) Sách của Red dụ xuyến? http://www.opengl.org/resources/code/samples/redbook/torus.c –