从老师那拷的一段程序,在同学的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 系统的问题。可能吗?我是个新手,希望大家多多指教。谢谢!
在我的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 系统的问题。可能吗?我是个新手,希望大家多多指教。谢谢!
估计是你系统的原因了!
vista本身运行的时候,就有许多权限设置!
我们同学有些用VISTA ,但最后都改装XP了