gpt4 book ai didi

c - 绘制一个立方体并旋转它: a part of the cube disappears

转载 作者:行者123 更新时间:2023-11-30 15:54:02 24 4
gpt4 key购买 nike

在这段代码中,我尝试绘制一个立方体。我尝试逆时针绘制所有面顶点。
问题是,如果我不旋转立方体,则只会绘制红色面,如果我将其旋转 5 度,我只会看到立方体的一部分。

#import <OpenGL/OpenGL.h>
#import <GLUT/GLUT.h>

int width=500, height=500, depth=500;

void init()
{
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(200, 200,-200, 200, 200, 0, 0, 1, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,width,0,height);
gluPerspective(90, 1, -100, 100);
glViewport(0, 0, width, height);
}

void drawCube()
{
int vertices[8][3]= { {100,100,0} , {300,100,0}, {300,300,0}, {100,300,0}, {100,100,300} , {300,100,300}, {300,300,300}, {100,300,300} };
glBegin(GL_QUADS);

glColor4f(1, 0, 0, 0);
glVertex3iv(vertices[0]);
glVertex3iv(vertices[1]);
glVertex3iv(vertices[2]);
glVertex3iv(vertices[3]);

glVertex3iv(vertices[4]);
glVertex3iv(vertices[5]);
glVertex3iv(vertices[6]);
glVertex3iv(vertices[7]);

glColor4f(0, 1, 0, 0);
glVertex3iv(vertices[1]);
glVertex3iv(vertices[5]);
glVertex3iv(vertices[6]);
glVertex3iv(vertices[4]);

glVertex3iv(vertices[0]);
glVertex3iv(vertices[4]);
glVertex3iv(vertices[7]);
glVertex3iv(vertices[3]);

glColor4f(0, 0, 1, 0);
glVertex3iv(vertices[3]);
glVertex3iv(vertices[2]);
glVertex3iv(vertices[6]);
glVertex3iv(vertices[7]);

glVertex3iv(vertices[0]);
glVertex3iv(vertices[1]);
glVertex3iv(vertices[5]);
glVertex3iv(vertices[4]);

glEnd();
}


void display()
{
glClearColor(0.0, 0.0, 0.0, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(200,200,150);
glRotatef(5, 0, 1, 0);
glTranslatef(-200,-200,-150);
drawCube();
glutSwapBuffers();
}

void idle(void)
{
}

int main(int argc, char * argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100, 100);
glutInitWindowSize(width, height);
glutCreateWindow("Test");
glutDisplayFunc(display);
glutIdleFunc(idle);
init();
glutMainLoop();
return 0;
}

这是我所看到的:

Window

但是我应该看到一个旋转的立方体,所以我应该看到右侧另一面的部分。我怀疑我以逆时针顺序绘制顶点或其他方式出错了。

PS:代码已经过时了,因为在我的大学我没有机会学习最新版本的OpenGL,我必须使用GLUT。

最佳答案

几个问题:

  1. 您的投影矩阵设置不合理。

    首先,您应该决定是否需要正交投影或透视投影。

    如果您想要正交,请使用 gluOrtho2d。如果您想要透视投影,请使用 gluPerspective。两者同时使用会产生奇怪的转变,这肯定不是您想要的。

  2. gluPerspective 不能有负近平面。近平面应该大于零,也许是像 1 这样的小值,远平面定义您希望后剪辑平面距相机有多远。由于您似乎使用了数百个单位,因此我可能会推荐 1000 左右的背板。

  3. 您正在调用 gluLookAt,但通过在 display() 中调用 glLoadIdentity 来删除 View 矩阵。如果您想要一个 View 矩阵,请不要在编程后删除它。

关于c - 绘制一个立方体并旋转它: a part of the cube disappears,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com