在 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)不起作用

在现有 sdl_opengl 上下文上绘制小部件

C++ OpenGL/SDL 2.0 无法加载纹理

SDL2+OpenGL 绘制多边形

用 SDL_Renderer 绘制 2D 东西,用 SDL_GLContext 绘制 OpenGL 东西

使用 openGL/SDL 绘制点