在Visual Studio 2015中運行OPENGL


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.

OpenGLConsole

Keep it simple. Choose an empty project template.

EmptyProject

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.

NupenGL-0.1.0.1

 

測試代碼:

 

// 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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM