为什么 我在vs2010运行一个opengl的程序怎么全部是错呢

为什么 我在vs2010运行一个opengl的程序怎么全部是错呢,第1张

我也遇到过这样的问题,后来上网查了才知道VS本身没有glut安装包,在网上下一个windows环境下的安装包,将下载的压缩包解开,你将得到5个文件(glutdll, glut32dll, glutlib, glut32lib,gluth),按一下步骤 *** 作

1)把gluth复制到x:\Program Files\Microsoft\Visual Studio 100\VC\include\GL文件夹中,如果没有GL这个文件夹则可以自己新建一个。(x是你安装VS的盘符号)

2)把解压得到的glutlib和glut32lib放到静态函数库所在文件夹(即与include并排的lib文件夹下)。

3)把解压得到的glutdll和glut32dll放到 *** 作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32)

这样应该就不会出现不被识别的问题了,希望能够帮到你

点“工程”->“设置” 有个“连接”选项卡,在下面“对象/模块库”里面加上 opengl32lib和glu32lib

试试行不行

这些错误肯定是又有没有链接库造成的,但有没有别的问题就不知道了

这可能是由于您的摄像机配置或着色器配置不正确导致的。可以尝试检查您的摄像机位置,确保它在正确的位置。另外,您也可以检查您的着色器设置,确保它们能够正确控制车轮的转动。如果以上都无法解决,您可以尝试更新您的OpenGL驱动程序,以确保您的系统可以正确运行OpenGL程序。

你既可以建立Win32项目使用API,也可以建立MFC工程

(一般不用MFC框架直接用API)

我给你一个例子吧,建立Win32空项目,添加一个cpp文件,编译执行就行了

(这是一个经典的opengl框架了)代码如下:

#pragma comment(lib,"opengl32lib")

#pragma comment(lib,"glu32lib")

#pragma comment(lib,"glauxlib")

#include <windowsh>

#include <gl/glh>

#include <gl/gluh>

#include <gl/glauxh>

HDC hDC=NULL;

HGLRC hRC=NULL;

HWND hWnd=NULL;

HINSTANCE hInstance;

BOOL keys[256];

BOOL active=TRUE;

BOOL fullscreen=TRUE;

GLfloat rtri;

GLfloat rquad;

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

GLvoid ResizeGLScene(GLsizei width,GLsizei height)

{

if(height==0)

height=1;

glViewport(0,0,width,height);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(450f,(GLfloat)width/(GLfloat)height,01f,1000f);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

int InitGL(GLvoid)

{

glShadeModel(GL_SMOOTH);

glClearColor(00f,00f,00f,05f);

glClearDepth(10f);

glEnable(GL_DEPTH_TEST);

glDepthFunc(GL_LEQUAL);

glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);

return TRUE;

}

int DrawGLScene(GLvoid)

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

glTranslatef(-15f,00f,-60f);

glRotatef(rtri,00f,10f,00f);

glBegin(GL_TRIANGLES);

glColor3f(10f,00f,00f);

glVertex3f(00f,10f,00f);

glColor3f(00f,10f,00f);

glVertex3f(-10f,-10f,10f);

glColor3f(00f,00f,10f);

glVertex3f(10f,-10f,10f);

glColor3f(10f,00f,00f);

glVertex3f(00f,10f,00f);

glColor3f(00f,00f,10f);

glVertex3f(10f,-10f,10f);

glColor3f(00f,10f,00f);

glVertex3f(10f,-10f,-10f);

glColor3f(10f,00f,00f);

glVertex3f(00f,10f,00f);

glColor3f(00f,10f,00f);

glVertex3f(10f,-10f,-10f);

glColor3f(00f,00f,10f);

glVertex3f(-10f,-10f,-10f);

glColor3f(10f,00f,00f);

glVertex3f(00f,10f,00f);

glColor3f(00f,00f,10f);

glVertex3f(-10f,-10f,-10f);

glColor3f(00f,10f,00f);

glVertex3f(-10f,-10f,10f);

glEnd();

glLoadIdentity();

glTranslatef(15f,00f,-70f);

glRotatef(rquad,10f,10f,10f);

glBegin(GL_QUADS);

glColor3f(00f,10f,00f);

glVertex3f(10f,10f,-10f);

glVertex3f(-10f,10f,-10f);

glVertex3f(-10f,10f,10f);

glVertex3f(10f,10f,10f);

glColor3f(10f,05f,00f);

glVertex3f(10f,-10f,10f);

glVertex3f(-10f,-10f,10f);

glVertex3f(-10f,-10f,-10f);

glVertex3f(10f,-10f,-10f);

glColor3f(10f,00f,00f);

glVertex3f(10f,10f,10f);

glVertex3f(-10f,10f,10f);

glVertex3f(-10f,-10f,10f);

glVertex3f(10f,-10f,10f);

glColor3f(10f,10f,00f);

//glVertex3f(10f,-10f,-10f);

//glVertex3f(-10f,-10f,-10f);

//glVertex3f(-10f,10f,-10f);

//glVertex3f(10f,10f,-10f);

glVertex3f(-10f,10f,-10f);

glVertex3f(10f,10f,-10f);

glVertex3f(10f,-10f,-10f);

glVertex3f(-10f,-10f,-10f);

glColor3f(00f,00f,10f);

glVertex3f(-10f,10f,10f);

glVertex3f(-10f,10f,-10f);

glVertex3f(-10f,-10f,-10f);

glVertex3f(-10f,-10f,10f);

glColor3f(10f,00f,10f);

glVertex3f(10f,10f,-10f);

glVertex3f(10f,10f,10f);

glVertex3f(10f,-10f,10f);

glVertex3f(10f,-10f,-10f);

glEnd();

rtri+=02f;

rquad-=015f;

return TRUE;

}

GLvoid KillGLWindow(GLvoid)

{

if(fullscreen)

{

ChangeDisplaySettings(NULL,0);

ShowCursor(TRUE);

}

if(hRC)

{

if(!wglMakeCurrent(NULL,NULL))

MessageBox(NULL,"释放DC或RC失败","关闭错误",MB_OK|MB_ICONINFORMATION);

if(!wglDeleteContext(hRC))

MessageBox(NULL,"释放RC失败","关闭错误",MB_OK|MB_ICONINFORMATION);

hRC=NULL;

}

if(hDC && !ReleaseDC(hWnd,hDC))

{

MessageBox(NULL,"释放DC失败","关闭错误",MB_OK|MB_ICONINFORMATION);

hDC=NULL;

}

if(hWnd && !DestroyWindow(hWnd))

{

MessageBox(NULL,"释放窗口句柄失败","关闭错误",MB_OK|MB_ICONINFORMATION);

hWnd=NULL;

}

if(!UnregisterClass("OpenG",hInstance))

{

MessageBox(NULL,"不能注销窗口类","关闭错误",MB_OK|MB_ICONINFORMATION);

hInstance=NULL;

}

}

BOOL CreateGLWindow(char title,int width,int height,int bits,BOOL fullscreenflag)

{

GLuint PixelFormat;

WNDCLASS wc;

DWORD dwExStyle;

DWORD dwStyle;

RECT WindowRect;

WindowRectleft=(long)0;

WindowRectright=(long)width;

WindowRecttop=(long)0;

WindowRectbottom=(long)height;

fullscreen=fullscreenflag;

hInstance=GetModuleHandle(NULL);

wcstyle=CS_HREDRAW|CS_VREDRAW|CS_OWNDC;

wclpfnWndProc=(WNDPROC)WndProc;

wccbClsExtra=0;

wccbWndExtra=0;

wchInstance=hInstance;

wchIcon=LoadIcon(NULL,IDI_WINLOGO);

wchCursor=LoadCursor(NULL,IDC_ARROW);

wchbrBackground=NULL;

wclpszMenuName=NULL;

wclpszClassName="OpenG";

if(!RegisterClass(&wc))

{

MessageBox(NULL,"注册窗口失败","错误",MB_OK|MB_ICONINFORMATION);

return FALSE;

}

if(fullscreen)

{

DEVMODE dmScreenSettings;

memset(&dmScreenSettings,0,sizeof(dmScreenSettings));

dmScreenSettingsdmSize=sizeof(dmScreenSettings);

dmScreenSettingsdmPelsWidth=width;

dmScreenSettingsdmPelsHeight=height;

dmScreenSettingsdmBitsPerPel=bits;

dmScreenSettingsdmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

if(ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)

{

if(MessageBox(NULL,"全屏模式设置失败!\n使用窗口模式?","OpenGL 3D游戏编程",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)

{

fullscreen=FALSE;

}

else

{

MessageBox(NULL,"程序将被关闭","错误",MB_OK|MB_ICONINFORMATION);

return FALSE;

}

}

}

if(fullscreen)

{

dwExStyle=WS_EX_APPWINDOW;

dwStyle=WS_POPUP;

ShowCursor(FALSE);

}

else

{

dwExStyle=WS_EX_APPWINDOW|WS_EX_WINDOWEDGE;

dwStyle=WS_OVERLAPPEDWINDOW;

}

AdjustWindowRectEx(&WindowRect,dwStyle,FALSE,dwExStyle);

if(!(hWnd=CreateWindowEx(dwExStyle,"OpenG",title,

dwStyle|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,0,0,

WindowRectright-WindowRectleft,WindowRectbottom-WindowRecttop,

NULL,NULL,hInstance,NULL)))

{

KillGLWindow();

MessageBox(NULL,"窗口创建失败","错误",MB_OK|MB_ICONINFORMATION);

return FALSE;

}

static PIXELFORMATDESCRIPTOR pfd=

{

sizeof(PIXELFORMATDESCRIPTOR),1,

PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,

PFD_TYPE_RGBA,bits,

0,0,0,0,0,0,

0,

0,

0,

0,0,0,0,

16,

0,

0,

PFD_MAIN_PLANE,

0,

0,0,0

};

if(!(hDC=GetDC(hWnd)))

{

KillGLWindow();

MessageBox(NULL,"不能创建一个窗口设备描述表","错误",MB_OK|MB_ICONINFORMATION);

return FALSE;

}

if(!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))

{

KillGLWindow();

MessageBox(NULL,"不能创建一个匹配的像素格式","错误",MB_OK|MB_ICONINFORMATION);

return FALSE;

}

if(!SetPixelFormat(hDC,PixelFormat,&pfd))

{

KillGLWindow();

MessageBox(NULL,"不能设置像素格式","错误",MB_OK|MB_ICONINFORMATION);

return FALSE;

}

if(!(hRC=wglCreateContext(hDC)))

{

KillGLWindow();

MessageBox(NULL,"不能创建OpenGL渲染描述表","错误",MB_OK|MB_ICONINFORMATION);

return FALSE;

}

if(!wglMakeCurrent(hDC,hRC))

{

KillGLWindow();

MessageBox(NULL,"不能激活当前的OpenGL渲染描述表","错误",MB_OK|MB_ICONINFORMATION);

return FALSE;

}

ShowWindow(hWnd,SW_SHOW);

SetForegroundWindow(hWnd);

SetFocus(hWnd);

ResizeGLScene(width,height);

if(!InitGL())

{

KillGLWindow();

MessageBox(NULL,"初始化失败","错误",MB_OK|MB_ICONINFORMATION);

return FALSE;

}

return TRUE;

}

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)

{

switch(uMsg)

{

case WM_ACTIVATE:

{

if(!HIWORD(wParam))

active=TRUE;

else

active=FALSE;

return 0;

}

case WM_SYSCOMMAND:

{

switch(wParam)

{

case SC_SCREENSAVE:

case SC_MONITORPOWER:

return 0;

}

break;

}

case WM_CLOSE:

{

PostQuitMessage(0);

return 0;

}

case WM_KEYDOWN:

{

keys[wParam]=TRUE;

return 0;

}

case WM_KEYUP:

{

keys[wParam]=FALSE;

return 0;

}

case WM_SIZE:

{

ResizeGLScene(LOWORD(lParam),HIWORD(lParam));

return 0;

}

}

return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

{

MSG msg;

BOOL done=FALSE;

if(MessageBox(NULL,"你想在全屏模式下运行吗?","设置全屏模式",MB_YESNO|MB_ICONQUESTION)==IDNO)

{

fullscreen=FALSE;

}

if(!CreateGLWindow("Win32 SDK风格 OpenGL程序框架",640,480,16,fullscreen))

return 0;

while(!done)

{

if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))

{

if(msgmessage==WM_QUIT)

done=TRUE;

else

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

else

{

if(active)

{

if(keys[VK_ESCAPE])

done=TRUE;

else

{

DrawGLScene();

SwapBuffers(hDC);

}

}

if(keys[VK_F1])

{

keys[VK_F1]=FALSE;

KillGLWindow();

fullscreen=!fullscreen;

if(!CreateGLWindow("Win32 SDK风格 OpenGL程序框架",640,480,16,fullscreen))

return 0;

}

}

}

KillGLWindow();

return msgwParam;

}

用右键点击魔兽的运行程序,然后选择发送到桌面快捷方式

然后找到桌面上新建的快捷方式,右键点击,选择属性,在打开的属性里面,选择快捷方式一页,然后在目标一栏的后面,打一个空格,然后打入-opengl

即可

也就是下面这样

"E:\Warcraft

III

117\Frozen

Throneexe"

-opengl

你这个问题应该通过第一步就解决了啊。。

(1)“d:\Program Files\Microsoft Visual Studio\VC98\include\GL文件夹”。把解压得到的gluth放到这个GL文件夹里。没有GL文件夹可以自己建一个,一般都有的。

还是同样的错误吗?

1 将main函数改为WinMain

2 将预定义宏_CONSOLE改为_WINDOWS

3

Project->Settings-Link最下边的编辑框里边,去掉/SUBSYSTEM:CONSOLE这个参数,或者将其改成

/SUBSYSTEM:WINDOWS。以上是VC6的配置,在VC7、8、9中,它对应的就是Windows子系统选项,修改之即可。

以上就是关于为什么 我在vs2010运行一个opengl的程序怎么全部是错呢全部的内容,包括:为什么 我在vs2010运行一个opengl的程序怎么全部是错呢、求助一个简单的OpenGL程序运行不了的问题,请高手帮忙啊、opengl车身不动,车轮转动等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9742561.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存