首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在openGL +SDL2.0中绘制四面体

在openGL +SDL2.0中绘制四面体
EN

Stack Overflow用户
提问于 2014-02-02 02:49:17
回答 1查看 2.6K关注 0票数 0

因此,我对openGL编程非常陌生,现在只是简单介绍一下基础知识。我知道我应该使用VBO之类的东西,但我想先得到一点基础。我不会给你所有的代码,仅仅是画和设置场景的东西。

这里有一个设置我的相机的代码:

代码语言:javascript
运行
复制
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);

我试着像这样围绕着原点创建它(而且我从来没有画过底部的脸):

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-02 12:53:41

我不知道这是不是你认为的线状形状,但你的形状似乎不是一个普通的四面体:底部的3个角与上角的距离并不相同(两个前角到上角的距离是sqrt(6),而后角的距离是sqrt(5))。基座上的距离也是分开的:前角的距离是sqrt(2),而前角到后角的距离是sqrt(3)。

正四面体的一个例子是:

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

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

您的代码本身看起来很好。(除了转换投影矩阵) I,我更喜欢在push/popmatrix和glbegin/end (这些东西{. })之后创建代码块,但这只是为了保持代码易于阅读。

另外,作为一个普遍的经验法则,在opengl中你不移动相机:你移动其他的一切。(这就是为什么翻译负z使对象远离您,转换正x使它们正确移动等等)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21506444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档