OPENGL中的glutinit函数在win32中怎么使用?(大家来帮帮忙呀)

sadrime 2010-08-19 06:12:00
好多opengl书上的例子给出的都有这样的代码:
int main( int argc, char** argv )
{
glutInit(&argc, argv);
..............
}
可是在编win32项目时,主函数是这样的
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
我如何想使用OpenGL,应该怎么办呢?这个glutInit函数的参数应该是什么呢?
本人初学者,请各位大侠不吝赐教,先行谢过啦~~
...全文
488 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xu_fpf 2011-09-24
  • 打赏
  • 举报
回复
同求!……
yang401726943 2011-09-19
  • 打赏
  • 举报
回复
如果在MFC中呢,如何初始化glutInit(&argc,argv),MFC中没有main()函数的。。。。怎么弄,大侠帮帮忙
sadrime 2010-08-26
  • 打赏
  • 举报
回复
谢谢楼上各位了,我再去研究一下,NENE的书确实不错~~~
lizelglglg 2010-08-25
  • 打赏
  • 举报
回复
3楼好像我把有些全局变量删了
HGLRC hrc;
HDC hdc;
int pixformat;
PIXELFORMATDESCRIPTOR pfd;
这一段加在#include后面
lizelglglg 2010-08-25
  • 打赏
  • 举报
回复
再给你一个win32的例子,其中什么都不做,仅仅是初始化opengl环境,很久没用opengl,应该没问题吧,初始化完成后就在消息循环里画


#include <windows.h>
#include <gl.h>
#include <glu.h>
#include <glaux.h>
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment(lib,"glaux.lib")
#pragma warning( disable : 4305)
#pragma warning( disable : 4244)






LRESULT CALLBACK wndproc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam)
{
switch (umsg)
{
case WM_DESTROY:
wglMakeCurrent(0,0);
wglDeleteContext(hrc);
ReleaseDC(hwnd,hdc);
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd,umsg,wparam,lparam);
}
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
HWND hwnd;MSG msg;WNDCLASS wc;
ZeroMemory(&wc,sizeof wc);
wc.hCursor=LoadCursor(0,IDC_ARROW);
wc.hInstance=hInstance;
wc.lpfnWndProc=wndproc;
wc.lpszClassName="classname";
RegisterClass(&wc);
hwnd=CreateWindow("classname","windowname",WS_OVERLAPPED|WS_SYSMENU|WS_MINIMIZEBOX,GetSystemMetrics(0)/2-400,GetSystemMetrics(1)/2-300,800,600,0,0,hInstance,0);
ZeroMemory(&pfd,sizeof pfd);
pfd.nVersion=1;
pfd.nSize=sizeof pfd;
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.dwFlags=PFD_DOUBLEBUFFER|PFD_SUPPORT_OPENGL|PFD_DRAW_TO_WINDOW;
pfd.cDepthBits=16;
pfd.cColorBits=24;
hdc=GetDC(hwnd);
pixformat=ChoosePixelFormat(hdc,&pfd);
SetPixelFormat(hdc,pixformat,&pfd);
hrc=wglCreateContext(hdc);
wglMakeCurrent(hdc,hrc);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,(float)4/3,1,100);
glMatrixMode(GL_MODELVIEW);

ShowWindow(hwnd,SW_SHOW);

while (1)
{
if (PeekMessage(&msg,0,0,0,PM_REMOVE))
{
if(msg.message==WM_QUIT)break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
SwapBuffers(hdc);
}
return msg.wParam;
}
lizelglglg 2010-08-25
  • 打赏
  • 举报
回复
直接新建控制台应用程序,我给你一个例子

#include <windows.h>
#include <glew.h>
#include <glut.h>
#pragma comment(lib,"glew32.lib")


float buffer[]=
{
-1,1,-1,0,0,1,
-1,1,1,0,1,0,
1,1,1,1,0,0,
1,1,-1,0.5,0.5,0.5,
-1,-1,-1,1,0,1,
-1,-1,1,1,1,0,
1,-1,1,0,1,1,
1,-1,-1,1,1,1
};

byte index[]=
{
0,1,2,3, 7,6,5,4, 0,4,5,1, 2,6,7,3, 0,3,7,4, 1,5,6,2
};


void display()
{
static float xx=0;
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glTranslatef(0,0,-5);
glRotatef(xx,1,0,0);
glRotatef(xx,0,1,0);
glDrawElements(7,sizeof index,GL_UNSIGNED_BYTE,&index);
glCopyPixels(100,100,200,200,GL_COLOR);
glutSwapBuffers();
glutPostRedisplay();
xx++;
}



void main(int main_a,char **main_b)
{
glutInit(&main_a,main_b);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH|GLUT_RGBA);
glutInitWindowPosition(0,0);
glutInitWindowSize(400,400);
glutCreateWindow("fds");
glewInit();

glMatrixMode(GL_PROJECTION);
gluPerspective(45,1,1,1000);
glMatrixMode(GL_MODELVIEW);
glClearColor(0,0,0,0);
glClearDepth(1);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(3,GL_FLOAT,sizeof(float)*6,&buffer[3]);
glVertexPointer(3,GL_FLOAT,sizeof (float)*6,&buffer[0]);

glWindowPos2f(0,0);

glutDisplayFunc(display);
glutMainLoop();
}
thinboyxp 2010-08-23
  • 打赏
  • 举报
回复
glut这个其实是封装了一些win32下创建窗口消息循环等相对底层的东西,封装的越多开发起来越快但能自己控制的东西也就越少,走win32路线对于理解windows下gl的底层处理机制还是有好处的,推荐你看看nehe的教程:http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=01,这个就是直接win32的gl版本,有了这个框架你再套用书上的例子就不难了。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧