在 openGL + SDL 2.0 中绘制四面体
Posted
技术标签:
【中文标题】在 openGL + SDL 2.0 中绘制四面体【英文标题】:Drawing tetrahedron in openGL + SDL 2.0 【发布时间】:2014-02-02 02:49:17 【问题描述】:所以我对 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
【问题讨论】:
不平移投影矩阵。 ModelView 矩阵定义了您的查看转换。 谢谢你的小费好先生:) 【参考方案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 会使它们向右移动等等......)
【讨论】:
你说得对...我想我需要回到简单的几何形状哈哈...将前面事实的 z 坐标更改为 0.5 有帮助..还根据您提供的顶点制作了一个一个也不错!感谢您的帮助:)以上是关于在 openGL + SDL 2.0 中绘制四面体的主要内容,如果未能解决你的问题,请参考以下文章
使用 openGL ES 2.0 结合其他线条绘制功能的字体渲染(Freetype)不起作用