从老师那拷的一段程序,在同学的vs 2008中就能顺利运行,他的系统是xp。
在我的vs2008中就会报错,我的系统是vista home basic.下面是代码//Triangle.c
#include <windows.h>
#include <gl/gl.h>
#include <gl/glut.h>// 旋转参数
static GLfloat xRot = 0.0f;
static GLfloat yRot = 0.0f;//确定多边形绕法的方向
BOOL bWinding = TRUE; //初始化窗口
void SetupRC(void)
{
    // 设置窗口背景颜色为黑色
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
}void ChangeSize(int w, int h)
{
if(h == 0)  h = 1;    glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION);
glLoadIdentity();    if (w <= h) 
glOrtho (-100.0f, 100.0f, -100.0f*h/w, 100.0f*h/w, -100.0f, 100.0f);
    else 
glOrtho (-100.0f*w/h, 100.0f*w/h, -100.0f, 100.0f, -100.0f, 100.0f); glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}// 在窗口中绘制图形
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT); // 旋转图形
glPushMatrix();
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f); //设置点的大小以及线宽
glPointSize(5);
glLineWidth(5);

//设置多边形绕法的方向是顺时针还是逆时针
if (bWinding) 
glFrontFace(GL_CW);//顺时针
else
glFrontFace(GL_CCW);//逆时针 //绘制三角形
glBegin(GL_TRIANGLES);  
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(0, 60, 0);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(-60, -60, 0);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(60, -60, 0);
glEnd(); glPopMatrix(); glutSwapBuffers();  // 刷新命令缓冲区
}
void SpecialKeys(int key, int x, int y)
{
if(key == GLUT_KEY_UP) xRot-= 5.0f;
if(key == GLUT_KEY_DOWN) xRot += 5.0f;
if(key == GLUT_KEY_LEFT) yRot -= 5.0f;
if(key == GLUT_KEY_RIGHT) yRot += 5.0f; if(xRot > 356.0f) xRot = 0.0f;
if(xRot < -1.0f) xRot = 355.0f;
if(yRot > 356.0f) yRot = 0.0f;
if(yRot < -1.0f) yRot = 355.0f; // 刷新窗口
glutPostRedisplay();
}void ProcessMenu(int value)
{
switch(value)
{
case 1:
//修改多边形正面为填充模式
glPolygonMode(GL_FRONT,GL_FILL); 
break;
case 2:
//修改多边形正面为线模式
glPolygonMode(GL_FRONT,GL_LINE); 
break;
case 3:
//修改多边形正面为点充模式
glPolygonMode(GL_FRONT,GL_POINT); 
break;
case 4:
//修改多边形反面为填充模式
glPolygonMode(GL_BACK,GL_FILL); 
break;
case 5:
//修改多边形反面为线模式
glPolygonMode(GL_BACK,GL_LINE); 
break;
case 6:
//修改多边形反面为点模式
glPolygonMode(GL_BACK,GL_POINT); 
break;
case 7:
//设置多边形的阴影模式为平面明暗模式
glShadeModel(GL_FLAT); 
break;
case 8:
//设置多边形的阴影模式为光滑明暗模式
glShadeModel(GL_SMOOTH); 
break;
case 9:
bWinding = !bWinding;
break;
default:
break;
}
glutPostRedisplay();
}int main(int argc, char* argv[])
{
int nModeMenu;
int nMainMenu;
int nColorMenu; glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB );
glutCreateWindow("多边形演示");
glutReshapeFunc(ChangeSize);
glutSpecialFunc(SpecialKeys);  //设置特殊键响应回调函数
glutDisplayFunc(RenderScene);

// 创建一个子菜单并定义菜单回调函数
nModeMenu = glutCreateMenu(ProcessMenu); 
//添加菜单项,1表示选择菜单条目时传递的参数值
glutAddMenuEntry("正面多边形填充模式",1);
glutAddMenuEntry("正面线框模型",2);
glutAddMenuEntry("正面点模式",3);
glutAddMenuEntry("反面多边形填充模式",4);
glutAddMenuEntry("反面线框模型",5);
glutAddMenuEntry("反面点模式",6);

//增加一个子菜单
nColorMenu = glutCreateMenu(ProcessMenu);
glutAddMenuEntry("平面明暗模式",7);
glutAddMenuEntry("光滑明暗模式",8);
//创建主菜单
nMainMenu = glutCreateMenu(ProcessMenu);
glutAddSubMenu("多边形模式", nModeMenu);
glutAddSubMenu("颜色模式", nColorMenu);
glutAddMenuEntry("改变绕法",9);

//将创建的菜单与右键关联,即把菜单设置为右键弹出式菜单
glutAttachMenu(GLUT_RIGHT_BUTTON);  SetupRC();
glutMainLoop();
return 0;
}运行时候,生成的窗口只是闪一下,就会弹出错误提示
xxxx.exe 中的 0x7c92100b 处未处理的异常: 0xC0000005: 读取位置 0x00000034 时发生访问冲突.然后只能中断了。但是我直接运行生成的.exe文件就没有这个问题。请问这是为什么?那些opengl相关的头文件和库文件我已经考进了相关的文件夹里,还能什么原因呢?同学说可能是vista 系统的问题。可能吗?我是个新手,希望大家多多指教。谢谢!

解决方案 »

  1.   

    这段代码我拷贝到vc6系统里面运行,发现没有问题!出来的是一个三角形,还是彩色变色的!
    估计是你系统的原因了!
    vista本身运行的时候,就有许多权限设置!
      

  2.   

    我单步运行了一下。问题出在glutSwapBuffers();  // 刷新命令缓冲区。这句上,运行到这,就会弹出那个窗口。哪出了问题?
      

  3.   

    你在vista中首先要是管理员账户运行!
      

  4.   

    我试了,以管理员身份运行还是有这个问题。我用的是电脑自带的home basic 版的vista,如果是系统的问题,我把补丁打全了,能不能解决这个问题?不想重装xp,因为还要重新下很多驱动,很麻烦。
      

  5.   

    编程还是用XP吧,VISTA兼容性很不好
    我们同学有些用VISTA ,但最后都改装XP了
      

  6.   

    自己重新新建一个.cpp的文件把代码拷进去试下,重新生成下