• 在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;
    }
  • 相关阅读:
    【算法】 冒泡排序
    【算法】 插入排序
    【算法】 斐波那契数列
    【C#】 RBAC 权限框架
    【jQuery】 实用 js
    【jQuery】 Ajax
    【jQuery】 常用函数
    【jQuery】 资料
    【jQuery】 效果
    Linaro/Yocto/Openwrt
  • 原文地址:https://www.cnblogs.com/hjlweilong/p/5603945.html
Copyright © 2020-2023  润新知