【发布时间】:2011-09-25 20:46:08
【问题描述】:
我正在尝试绘制一个绕其轴旋转的简单晶体。我可以很容易地通过绘制一个金字塔然后再将它倒置来绘制正确的形状,但是我有两个问题。
首先,即使我用相同的颜色绘制所有内容,但其中两张脸的颜色与另外两张不同。
其次,它会在每个金字塔上放置一个“底部”,通过水晶的半透明壁可见,这会破坏效果。有什么办法可以摆脱吗?
这是我用来设置和绘制 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 形状。 euclideanspace.com/software/games/setup/openglcpp/shapes/…