Я прошу изучать OpenGL как часть проекта молекулярного моделирования, и в настоящее время я пытаюсь визуализировать 7 спиралей, которые будут размещены пространственно близко друг к другу и будут определенным образом перемещаться, наклоняться и взаимодействовать друг с другом.Мой вопрос заключается в том, как придать 2D-сцене трехмерную глубину, чтобы геометрические структуры выглядели как настоящие спирали в трех измерениях?
Я попытался поиграться с матрицами проекций (gulPerspective, glFrustum) без особой удачи, а также с помощью функции glDepthRange.
Я включил свой код для рендеринга спиралей, но для простоты явставьте код для рендеринга одной спирали (остальные 6 спиралей точно такие же, за исключением их матрицы преобразования и параметров цветовой функции) и для изменения формы при отображении из координат объекта в координаты клипа:
Любая помощь будет многооценили.
void init() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Black background
glLineWidth(8.0);
}
/* CALLED TO DRAW THE HELICES */
void RenderHelix() {
GLfloat x,y,z;
GLfloat c = 2.5f; //helical pitch
GLfloat theta; //constant angle between tangent and x-axis
GLfloat r = 4.5f; //radius
//GLint i = 1; //loop through code to render 7 helices
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* GREEN HELIX */
glBegin(GL_LINE_STRIP);
glColor3f(0.0, 1.0, 0.0);
for(theta = 0; theta <= 360; ++theta) {
x = r*(cos(theta));
y = r*(sin(theta));
z = c*theta;
glVertex3f(x,y,z);
}
glEnd();
glLoadIdentity();
glScalef(1.0,1.0,12.0);
glTranslatef(50.0, 100.0, 0.0); //Move Position
glRotatef(90.0, 0.0, 0.0, 0.0);
/* Other 6 helices .... */
glFlush();
glutSwapBuffers();
}
void Reshape(GLint w, GLint h) {
if(h==0)
h=1;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
GLfloat aspectratio = (GLfloat)w/(GLfloat)h;
if(w<=h)
glOrtho(-100,100,-100/aspectratio,100/aspectratio, -100,310);
else
glOrtho(-100*aspectratio,100*aspectratio,-100,100,-100,310);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}