Я пытаюсь нарисовать простой кристалл, который вращается вокруг своей оси.Я могу достаточно легко получить правильную форму, нарисовав пирамиду, а затем снова нарисовав ее вверх ногами, но у меня есть две проблемы.
Во-первых, хотя я рисую все в одном цвете, два изграни имеют другой цвет, как и у двух других.
Во-вторых, он помещает «дно» на каждую пирамиду, которая видна сквозь полупрозрачные стены кристалла, что разрушает эффект.Есть ли способ избавиться от этого?
Вот код, который я использую для настройки и отрисовки сцены GL.Конечно, кода OpenGL намного больше, чем этот, но это важная часть.
procedure Initialize;
begin
glShadeModel(GL_SMOOTH);
glClearColor(0.0, 0.0, 0.0, 0.5);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
end;
procedure Draw; //gets called in a loop
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-1.5,-0.5,-6.0);
glRotatef(rotation,0.0,1.0,0.0);
glBegin(GL_TRIANGLE_FAN);
glColor4f(0, 0, 1, 0.2);
glVertex3f(0, 3.4, 0);
glVertex3f(-1, 0, -1);
glVertex3f(-1, 0, 1);
glVertex3f(1, 0, 1);
glVertex3f(1, 0, -1);
glVertex3f(-1, 0, -1);
glEnd;
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0, -3.4, 0);
glVertex3f(-1, 0, -1);
glVertex3f(-1, 0, 1);
glVertex3f(1, 0, 1);
glVertex3f(1, 0, -1);
glVertex3f(-1, 0, -1);
glEnd;
rotation := rotation + 0.02;
end;
Кто-нибудь знает, что я делаю неправильно и как это исправить?