好多opengl书上的例子给出的都有这样的代码:
int main( int argc, char** argv )
{
glutInit(&argc, argv);
..............
}
可是在编win32项目时,主函数是这样的
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
我如何想使用OpenGL,应该怎么办呢?这个glutInit函数的参数应该是什么呢?
本人初学者,请各位大侠不吝赐教,先行谢过啦~~
------解决方案--------------------------------------------------------
glut这个其实是封装了一些win32下创建窗口消息循环等相对底层的东西,封装的越多开发起来越快但能自己控制的东西也就越少,走win32路线对于理解windows下gl的底层处理机制还是有好处的,推荐你看看nehe的教程:http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=01,这个就是直接win32的gl版本,有了这个框架你再套用书上的例子就不难了。
------解决方案--------------------------------------------------------
直接新建控制台应用程序,我给你一个例子
#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();
}