我想在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 –