我想在OpenGL C++中创建一个具有在运行时显示立方体三面的项目。没有旋转需要看到三面。我对OpenGL很陌生,现在我的攻击计划一直在改变x,y和z值。我很好的在2D工作,但添加Z混合是我认为让我绊倒。我知道使用负值会使图像更接近相机并且更远离正面,但在我的代码中,当我更改Z值时,它对该对象没有任何影响。创建一个3D立方体,在运行时显示三条边,不旋转看所有三条边
我只在前面和右侧显示(运行),试图在绘制整个多维数据集之前先将这2个窗口置于窗口的正确位置。最初我以0.5或-0.5的比例将它们画出来,但只在屏幕上产生一个矩形。
所以我的主要问题是,是否有更简单的方法来预测每个顶点的行为?是的,我知道我在图形空间工作,但为什么当价值改变时,我的一些观点甚至不动?
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include <stdlib.h> //For exit function
void exit(int); //To Exit Program
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 1.0, 1.0);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}
void cube()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0, 0.0, 0.0); glVertex3f( 0.2, -0.3, -0.5); // P1 is red lb
glColor3f(0.0, 1.0, 0.0); glVertex3f( 0.3, 0.2, -0.5); // P2 is green lt
glColor3f(0.0, 0.0, 1.0); glVertex3f(-0.2, 0.3, -0.5); // P3 is blue tt
glColor3f(1.0, 0.0, 1.0); glVertex3f(-0.3, -0.2, -0.5); // P4 is purple tb
glEnd();
// Green side - LEFT
glBegin(GL_QUADS);
glColor3f(0.0, 1.0, 0.0);
glVertex3f(-0.2, -0.3, 0.5);
glVertex3f(-0.3, 0.2, 0.5);
glVertex3f(-0.2, 0.3, -0.5);
glVertex3f(-0.3, -0.2, -0.5);
glEnd();
glFlush();
}
void myKeyboard(unsigned char theKey, int mouseX, int mouseY)
{
switch(theKey)
{
case 'Q':
case 'q':
exit(-1); //terminate the program
default:
break; // do nothing
}
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(640,480);
glutInitWindowPosition(100,150);
glutCreateWindow("Shapes: Q or q to quit");
glutDisplayFunc(cube);
glutKeyboardFunc(myKeyboard);
init();
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
这是很好的方式来说,这有力地帮助我更多地理解它。不幸的是,现在这是一个学校任务,我的教授只让我们使用glOrtho来完成作业。在寻找帮助的研究中,我发现大多数人使用数组来创建他们的立方体。我想这就是为什么我很难找到帮助,因为没有人使用过时的版本 – csm60
是的,即时模式被顶点数组取代,比如1995年左右。耻辱,大多数计算机图形学课程仍然会这样教。 –
如果这是只能通过glOrtho完成的任务,那么可能还有其他的东西丢失了。默认情况下,顶点的背面将被剔除。背面由顺时针或逆时针指定顶点的顺序决定。您可以禁用剔除,将前脸切换到另一个方向,或者确保所有四边形均按正确的顺序指定。更多详情:https://www.khronos.org/opengl/wiki/Face_Culling –