2011-04-29 31 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