在openGL + SDL 2.0中绘制四面体

时间:2014-02-02 02:49:18

标签: c++ opengl geometry sdl

所以我对openGL编程很陌生,现在只是讨论基础知识。我知道我应该使用VBO和东西但是想先得到一点基础。我不会向你展示绘制和设置场景的所有代码。

下面是设置相机的一些代码:

glClearColor(0.0f, 0.0f, 0.0f, 0.5f);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70, width / height, 1, 1000);
glEnable(GL_DEPTH_TEST);

// Move the camera back to view the scene
glTranslatef(0.0f, 0.0f, -5.0f);

我试图在原点附近创建它(我也从不画底面):

void drawtetrahedron(GLfloat angle)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glRotatef(angle, 0.0f, 1.0f, 0.0f);

glBegin(GL_TRIANGLES);

glColor3f(1.0f, 0.0f, 0.0f); //FRONT
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);

glColor3f(0.0f, 1.0f, 0.0f); //RIGHT
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.0f, -1.0f, -1.0f);
glVertex3f(1.0f, -1.0f, 1.0f);

glColor3f(0.0f, 0.0f, 1.0f); //LEFT
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(0.0f, -1.0f, -1.0f);

glEnd();

}

当我的窗口第一次出现时,红色三角形看起来很好,但是当我旋转它时,形状看起来有点扭曲。如果我一直转动(我根本看不到红脸)它看起来很正常......我在这里缺少什么?

继承人开始看起来很奇怪

对于我正在做错误(或一般)的openGL内容的任何指针都非常感谢! :D

1 个答案:

答案 0 :(得分:1)

我不知道这是否是你认为看起来很奇怪的形状,但你的形状似乎不是常规的四面体: 底座的3个角与顶角的距离不同(两个前角与顶角的距离为sqrt(6),而后角的距离为sqrt(5))。  底座上的距离也是关闭的:前角的距离为sqrt(2),而前角和后角之间的距离为sqrt(3)。

正四面体的一个例子是:

(请注意,这些坐标没有与xz平面平行的基础)

(1,1,1)(1,-1,-1)( - 1,1,-1)( - 1,-1,1)

您的代码本身看起来没问题。 (除了翻译投影矩阵)我自己更喜欢在push / popmatrix和glbegin / end之后创建代码块(这些东西{...}),但这只是为了让我的代码易于阅读。

另外,作为一般的经验法则,在opengl中你不会移动相机:你移动其他所有东西。 (这就是为什么翻译负z会使物体远离你,翻译正x使它们向右移动等等......)