2011-04-29 58 views
2

嘿 這是我第一篇關於stackflow如此裸露的帖子。 我一直在嘗試最近使用OpenGL和C++,當我嘗試渲染一個帶有光照的多維數據集時,我遇到了一個問題...但它並沒有出現,我相信這是由於某種裁剪錯誤,但我有沒有線索:(任何幫助,將不勝感激。C++ OpenGL Cube沒有出現在屏幕上

這裏是我的代碼...

初始化函數...

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glEnable(GL_DEPTH_TEST); 
glEnable(GL_COLOR_MATERIAL); 
glEnable(GL_LIGHTING); //Enable lighting 
glEnable(GL_LIGHT0); //Enable light #0 
glEnable(GL_LIGHT1); //Enable light #1 
glEnable(GL_NORMALIZE); //Automatically normalize normals 

這裏是抽獎代碼

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glTranslatef(0.0f, 0.0f, -8.0f); 

//Add ambient light 
GLfloat ambientColor[] = {0.2f, 0.2f, 0.2f, 1.0f}; //Color (0.2, 0.2, 0.2) 
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientColor); 

//Add positioned light 
GLfloat lightColor0[] = {0.5f, 0.5f, 0.5f, 1.0f}; //Color (0.5, 0.5, 0.5) 
GLfloat lightPos0[] = {4.0f, 0.0f, 8.0f, 1.0f}; //Positioned at (4, 0, 8) 
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor0); 
glLightfv(GL_LIGHT0, GL_POSITION, lightPos0); 

//Add directed light 
GLfloat lightColor1[] = {0.5f, 0.2f, 0.2f, 1.0f}; //Color (0.5, 0.2, 0.2) 
//Coming from the direction (-1, 0.5, 0.5) 
GLfloat lightPos1[] = {-1.0f, 0.5f, 0.5f, 0.0f}; 
glLightfv(GL_LIGHT1, GL_DIFFUSE, lightColor1); 
glLightfv(GL_LIGHT1, GL_POSITION, lightPos1); 

glRotatef(Rotation, 0.0f, 1.0f, 0.0f); 
glColor3f(1.0f, 1.0f, 0.0f); 
glBegin(GL_QUADS); 

//Front 
glNormal3f(0.0f, 0.0f, 1.0f); 
//glNormal3f(-1.0f, 0.0f, 1.0f); 
glVertex3f(-1.5f, -1.0f, 1.5f); 
//glNormal3f(1.0f, 0.0f, 1.0f); 
glVertex3f(1.5f, -1.0f, 1.5f); 
//glNormal3f(1.0f, 0.0f, 1.0f); 
glVertex3f(1.5f, 1.0f, 1.5f); 
//glNormal3f(-1.0f, 0.0f, 1.0f); 
glVertex3f(-1.5f, 1.0f, 1.5f); 

//Right 
glNormal3f(1.0f, 0.0f, 0.0f); 
//glNormal3f(1.0f, 0.0f, -1.0f); 
glVertex3f(1.5f, -1.0f, -1.5f); 
//glNormal3f(1.0f, 0.0f, -1.0f); 
glVertex3f(1.5f, 1.0f, -1.5f); 
//glNormal3f(1.0f, 0.0f, 1.0f); 
glVertex3f(1.5f, 1.0f, 1.5f); 
//glNormal3f(1.0f, 0.0f, 1.0f); 
glVertex3f(1.5f, -1.0f, 1.5f); 

//Back 
glNormal3f(0.0f, 0.0f, -1.0f); 
//glNormal3f(-1.0f, 0.0f, -1.0f); 
glVertex3f(-1.5f, -1.0f, -1.5f); 
//glNormal3f(-1.0f, 0.0f, -1.0f); 
glVertex3f(-1.5f, 1.0f, -1.5f); 
//glNormal3f(1.0f, 0.0f, -1.0f); 
glVertex3f(1.5f, 1.0f, -1.5f); 
//glNormal3f(1.0f, 0.0f, -1.0f); 
glVertex3f(1.5f, -1.0f, -1.5f); 

//Left 
glNormal3f(-1.0f, 0.0f, 0.0f); 
//glNormal3f(-1.0f, 0.0f, -1.0f); 
glVertex3f(-1.5f, -1.0f, -1.5f); 
//glNormal3f(-1.0f, 0.0f, 1.0f); 
glVertex3f(-1.5f, -1.0f, 1.5f); 
//glNormal3f(-1.0f, 0.0f, 1.0f); 
glVertex3f(-1.5f, 1.0f, 1.5f); 
//glNormal3f(-1.0f, 0.0f, -1.0f); 
glVertex3f(-1.5f, 1.0f, -1.5f); 

glEnd(); 

     SwapBuffers(hDC); 

     Sleep (1); 

任何幫助將不勝感激

編輯一個
繼基思的意見,我試圖使用gluLookAt這樣的...

void gluLookAt ( 10.0 , 10.0 , 10.0 , 1.5, -1.0, 1.5, 0.0, 0.0, 1.0); 

,但我得到一個錯誤

| 74 |錯誤:變量或字段`gluLookAt'聲明爲void |

Final編輯
感謝您的幫助大家......原來我失敗:(我沒有宣佈翻譯......或與其他關鍵組件的感知..along ......但我明白了所有的工作:d和感謝基思我沒怎麼控制攝像機

+0

NeHe有一個很好的初學者教程:http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=02 – LumpN 2011-04-29 23:45:18

+0

...我沒有與我的渲染代碼的問題......再加上教程是2d .... – 2011-04-30 11:54:48

回答

0

後您的。編輯:gluLookAt是功能就像glVertex3f等。因此只需調用它:

gluLookAt(10.0 , 10.0 , 10.0 , 1.5, -1.0, 1.5, 0.0, 0.0, 1.0); 

請注意,在這行代碼中沒有涉及void

如果在該行前面有void,編譯器會看到一個名爲gluLookAt的變量聲明void,其類型爲void,這個變量聲明用一堆雙精度來初始化(構造)。

+0

大聲笑是啊...我看着的例子是在C ...我忘了更新這個線程,但我發現我的錯誤..感謝您的幫助無論如何:D – 2011-05-04 09:25:15

1

您可能需要定義投影矩陣

這是可以做到的,例如,gluLookAt()

+1

是的,但應該使用'glFrustum()'或'gluPerspective()'來定義投影矩陣。應該在模型視圖矩陣上使用'gluLookAt()'! – 2011-04-29 06:30:37