Starting an OpenGL project in VS 2015 is really easy, thanks to the NupenGL.Core nuget package.
Here are really quick steps to start your first OpenGL project using the FreeGlut library to provide a Window toolkit.
Open Visual Studio 2015 Community Edition and create a new Visual Studio C++ Windows Console Application.
Keep it simple. Choose an empty project template.
Install the NupenGL.Core nuget package. From Visual Studio, Go to Tools \ NuGet Package Manager \ Manage Nuget Packages for this solution. Search for “NupenGL” and install the package.
測試代碼:
// source: http://jingyan.baidu.com/article/d5c4b52bca5005da560dc5d6.html #include <GL/glut.h> #include <stdlib.h> #include <math.h> #include <stdio.h> static int year = 0, spin = 0, day = 0; static GLint fogMode; const int n = 100; const GLfloat R = 1.0f; const GLfloat Pi = 3.1415926536f; void DrawCircle() { int i; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINE_LOOP); for (i = 0; i < n; ++i) { glColor3f(1.0, 0.0, 0.0); glVertex2f(R*cos(2 * Pi / n*i), R*sin(2 * Pi / n*i)); } glEnd(); glFlush(); } void init(void) { GLfloat position[] = { 0.5, 0.5, 3.0, 0.0 }; glEnable(GL_DEPTH_TEST); //防止遮擋 glLightfv(GL_LIGHT0, GL_POSITION, position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); { GLfloat mat[3] = { 0.1745, 0.01175, 0.01175 }; glMaterialfv(GL_FRONT, GL_AMBIENT, mat); mat[0] = 0.61424; mat[1] = 0.04136; mat[2] = 0.04136; glMaterialfv(GL_FRONT, GL_DIFFUSE, mat); mat[0] = 0.727811; mat[1] = 0.626959; mat[2] = 0.626959; glMaterialfv(GL_FRONT, GL_SPECULAR, mat); glMaterialf(GL_FRONT, GL_SHININESS, 0.6*128.0); } glEnable(GL_FOG); { GLfloat fogColor[4] = { 0.5, 0.5, 0.5, 1.0 }; fogMode = GL_EXP; glFogi(GL_FOG_MODE, fogMode); glFogfv(GL_FOG_COLOR, fogColor); glFogf(GL_FOG_DENSITY, 0.35); glHint(GL_FOG_HINT, GL_DONT_CARE); glFogf(GL_FOG_START, 1.0); glFogf(GL_FOG_END, 5.0); } glClearColor(0.5, 0.9, 0.9, 1.0); /* fog color */ } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(0.0, 1.0, 1.0); glPushMatrix(); //記住自己的位置 glutSolidSphere(1.0, 20, 16); /* 畫太陽半徑、 20經度、16緯度*/ glRotatef(spin, 0.0, 1.0, 0.0); //自轉,繞着一個向量以給定角度旋轉(正的為逆時針) glTranslatef(2.0, 1.0, 0.0); glRotatef(spin, 1.0, 0.0, 0.0); //公轉 glRectf(0.1, 0.1, 0.5, 0.5); glColor3f(0.0, 0.0, 1.0); glutWireSphere(0.2, 8, 8); /* 畫第一顆小行星 */ glColor3f(1.0, 0.0, 0.0); glTranslatef(2.0, 1.0, 0.0); glRotatef(2 * spin, 0.0, 1.0, 0.0); glutSolidSphere(0.5, 16, 8); glPopMatrix();//回到原來的位置 glutSwapBuffers(); } void spinDisplay(void) { spin = spin + 2; if (spin > 360) spin = spin - 360; glutPostRedisplay(); } void mouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) glutIdleFunc(spinDisplay); break; case GLUT_MIDDLE_BUTTON: if (state == GLUT_DOWN) glutIdleFunc(NULL); break; default: break; } } void reshape(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 0.5, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 10.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 'd': day = (day + 10) % 360; glutPostRedisplay(); break; case 'D': day = (day - 10) % 360; glutPostRedisplay(); break; case 'y': year = (year + 5) % 360; glutPostRedisplay(); break; case 'Y': year = (year - 5) % 360; glutPostRedisplay(); break; case 27: exit(0); break; default: break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(400, 400); glutInitWindowPosition(100, 100); glutCreateWindow("OpengGL 程序設計--這段代碼是我抄的"); init(); //glutDisplayFunc(DrawCircle); glutDisplayFunc(display); glutReshapeFunc(reshape); //glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutMainLoop(); return 0; }