gpt4 book ai didi

c - 无法旋转半立方体

转载 作者:行者123 更新时间:2023-11-30 14:22:56 24 4
gpt4 key购买 nike

我在这里使用“半立方体”这个词,它不是真正的立方体,它只有 3 个面。我执行以下操作:

1.用蓝色画出正方体的三个面,第一个面是蓝色,另外两个面是红色; 2.将半立方体旋转 45 度,这样我就可以看到一半的红脸。

但是然后我只显示立方体的蓝色面,我应该看到一半蓝色和一半红色。
也许我未能启用深度(我使用 glEnable()),我的印象是深度尺寸在我的绘图中被忽略。

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

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

void init()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);
glViewport(0, 0, width, height);
glOrtho(0, width, height, 0, 0, 1);
}

void display()
{
glClearColor(0.9, 0.9, 0.9, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor4f(0, 0, 1, 0);
glBegin(GL_QUADS);


// First face
glVertex3i(100, 100,0);
glVertex3i(300, 100,0);
glVertex3i(300, 300,0);
glVertex3i(100, 300,0);

glColor4f(1, 0, 0, 0);
// Second face
glVertex3i(300,100,0);
glVertex3i(300,300,0);
glVertex3i(300,100,300);
glVertex3i(300,100,300);

// Third face
glVertex3i(100, 100,300);
glVertex3i(300, 100,300);
glVertex3i(300, 300,300);
glVertex3i(100, 300,300);

glEnd();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(45, 1, 0, 0);

glFlush();
}

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

这是我得到的图像:

Image

编辑:我有点解决了更改视口(viewport)的问题:

glOrtho(0, width, height, 0, -depth, depth);

但我仍然缺少基础知识,现在我会继续。

最佳答案

旋转仅影响旋转后绘制的对象。当您调用 glBegin 时,无论您绘制什么,都会立即使用堆栈上的当前模型 View 矩阵进行绘制。

绘制后修改矩阵没有效果。您应该在绘制调用之前移动旋转。

关于c - 无法旋转半立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352701/

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