我想繪製一個簡單的水晶,它的軸上旋轉。我可以通過繪製一個金字塔然後再次繪製它來輕鬆地獲得該形狀,但是我遇到了兩個問題。如何在OpenGL中繪製旋轉棱鏡?
首先,即使我畫出所有顏色相同的顏色,其中兩個面的顏色與其他顏色不同。第二,它在每個金字塔上放置一個「底部」,通過晶體的半透明牆壁可以看到,這會破壞效果。有什麼辦法擺脫它嗎?
下面是我用來設置和繪製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;
任何人都知道我在做什麼錯,如何解決它?
我認爲你必須定義棱鏡上的每個面。這樣做時,將面的顏色設置爲適當的。請參閱本教程,該教程首先繪製2D形狀,然後在下一頁繪製3D形狀。 http://www.euclideanspace.com/software/games/setup/openglcpp/shapes/index.htm –