所以我对 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
最佳答案
我不知道这是否是您认为的奇怪形状,但您的形状似乎不是规则的四面体: 底座的 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 会使它们向右移动等等......)
关于c++ - 在 openGL + SDL 2.0 中绘制四面体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506444/