所以我在玩OpenGL並試圖弄清楚如何繪製一些有趣的形狀。沿着路徑的OpenGL管道
現在,我正在試管。我可以得出一個直管只是罰款:
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 –