OpenGL中的光线和深度问题 glClear(GL\u颜色\u缓冲\u位); glMatrixMode(GLU模型视图); ifstream myFile(“Coordinates.txt”); 如果(!myFile.is_open()) { cout>绘图[0]; myFile>>绘图[1]; myFile>>绘图[2]; myFile>>绘图[3];//将不使用此数据 GL3F(0.60f/1.5,0.80f/1.5,0.90f/1.5); glTranslatef((图[0]-1.15)*26,(图[2]-0.51)*45,(图[1]-1)*30); 实心球(2,12,12); glLoadIdentity(); glPopMatrix(); 轴+=0.00005f; } glRotatef(轴,0.0f,1.0f,0.0f); myFile.close(); glFlush(); glutSwapBuffers();

OpenGL中的光线和深度问题 glClear(GL\u颜色\u缓冲\u位); glMatrixMode(GLU模型视图); ifstream myFile(“Coordinates.txt”); 如果(!myFile.is_open()) { cout>绘图[0]; myFile>>绘图[1]; myFile>>绘图[2]; myFile>>绘图[3];//将不使用此数据 GL3F(0.60f/1.5,0.80f/1.5,0.90f/1.5); glTranslatef((图[0]-1.15)*26,(图[2]-0.51)*45,(图[1]-1)*30); 实心球(2,12,12); glLoadIdentity(); glPopMatrix(); 轴+=0.00005f; } glRotatef(轴,0.0f,1.0f,0.0f); myFile.close(); glFlush(); glutSwapBuffers();,opengl,3d,camera,perspectives,Opengl,3d,Camera,Perspectives,这是我第一次玩灯光 我的问题是,在我放置了教程中的所有灯光效果代码之后,对象似乎只存在于一个平面中,即xy平面,虽然我的数据在所有xyz中协调,但反射似乎有点偏离 有人能告诉我为什么以及如何修复它吗?看一看,你没有提供足够的信息。文件中有哪些值?当绘图[3]未使用时,为什么要加载它?您的意思是glutSphere正在xy平面中渲染为平面2d对象吗 我建议您在使用内置照明之前先熟悉OpenGL的核心功能,这个问题可能与照明无关。我也不建议使用德国劳埃德船级社的内置照明设备进行测试和小型项目以外的任

这是我第一次玩灯光

我的问题是,在我放置了教程中的所有灯光效果代码之后,对象似乎只存在于一个平面中,即xy平面,虽然我的数据在所有xyz中协调,但反射似乎有点偏离


有人能告诉我为什么以及如何修复它吗?

看一看,你没有提供足够的信息。文件中有哪些值?当绘图[3]未使用时,为什么要加载它?您的意思是glutSphere正在xy平面中渲染为平面2d对象吗


我建议您在使用内置照明之前先熟悉OpenGL的核心功能,这个问题可能与照明无关。我也不建议使用德国劳埃德船级社的内置照明设备进行测试和小型项目以外的任何事情。。。它不是很灵活,也有很多限制。

我不知道如何设置投影矩阵。正如Jesse Beder在下面提到的,“视口”如何设置?在调用glMatrixMode(GL_投影)的地方,代码看起来是什么样子的?还是缺少了?然后,您将拥有一个默认的投影矩阵xit,它在主函数中的调用方式与您编写它的方式相同。。有没有我不知道的方法来改变它?图[3]是取第四维数据,这里不使用,仅此而已。
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);

ifstream myFile("Coordinates.txt");

if (!myFile.is_open())
{
    cout << "Unable to open file";
    exit(1); // terminate with error
}

// Light values and coordinates
float ambientLight[] = { 0.3f, 0.3f, 0.3f, 1.0f };
float diffuseLight[] = { 0.7f, 0.7f, 0.7f, 1.0f };
float specular[] = { 1.0f, 1.0f, 1.0f, 1.0f};
float lightPos[] = { 0.0f, -150.0f, -150.0f, 1.0f };

glEnable(GL_CULL_FACE);  // Do not calculate inside of jet
glFrontFace(GL_CCW);     // Co unter clock-wise polygons face

// Enable lighting
glEnable(GL_LIGHTING);
// Setup and enable light 0
glLightfv(GL_LIGHT0,GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight);
glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
glEnable(GL_LIGHT0);

// Light values and coordinates

float specref[] = { 1.0f, 1.0f, 1.0f, 1.0f };

// Enable color tracking
glEnable(GL_COLOR_MATERIAL);
// Set Material properties to follow glColor values
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
// All materials hereafter have full specular reflectivity
// with a high shine 
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR,specref);
glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,128);


while (! myFile.eof()) 
{
    glPushMatrix();
    myFile>>plot[0];
    myFile>>plot[1];
    myFile>>plot[2];
    myFile>>plot[3];  //this data will not be used

    glColor3f(0.60f/1.5,0.80f/1.5,0.90f/1.5);

    glTranslatef((plot[0]-1.15)*26, (plot[2]-0.51)*45, (plot[1]-1)*30);
    glutSolidSphere(2, 12, 12);
    glLoadIdentity();
    glPopMatrix();

    axes += 0.00005f;

}

glRotatef(axes, 0.0f, 1.0f, 0.0f);      

myFile.close();
glFlush();
glutSwapBuffers();