Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121658
  • 博文数量: 46
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 480
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-13 09:26
文章分类

全部博文(46)

文章存档

2011年(1)

2010年(5)

2009年(40)

我的朋友

分类:

2009-11-16 21:52:35

闲着无聊,今天安装了vs2010 express版,顺便把Glut库安装上了
 
惊讶的发现OpenGL的库已经修改到C:\Program Files\Microsoft SDKs\Windows\v7.0A
所以要在vs2010的文件夹中要加上这个额外的directory,包括lib和include
 
由于本人实验过几次编译glut的库文件都失败,所以在网上下载了一份bin文件,测试通过,可以运行
安装方法就省略啦
 
1)创建一个Win32 Console Application
2)链接OpenGL libraries。单击Project属性,最前面加上opengl32.lib glu32.lib
代码如下:
 


/* Copyright (c) Mark J. Kilgard, 1997. */

/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */


/* This program was requested by Patrick Earl; hopefully someone else
will write the equivalent Direct3D immediate mode program. */


#include <GL/glut.h>

GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0}; /* Red diffuse light. */
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; /* Infinite light location. */

GLfloat n[6][3] = { /* Normals for the 6 faces of a cube. */
    {-1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {1.0, 0.0, 0.0},
    {0.0, -1.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}
};

GLint faces[6][4] = { /* Vertex indices for the 6 faces of a cube. */
    {0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4},
    {4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3}
};

GLfloat v[8][3]; /* Will be filled in with X,Y,Z vertexes. */


void drawBox(void)
{
    int i;

    for (i = 0; i <6 ; i++) {
        glBegin(GL_QUADS);
        glNormal3fv(&n[i][0]);
        glVertex3fv(v[faces[i][0]]);
        glVertex3fv(v[faces[i][1]]);
        glVertex3fv(v[faces[i][2]]);
        glVertex3fv(&v[faces[i][3]][0]);
        glEnd();
    }
}


void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawBox();
    glutSwapBuffers();
}


void init(void)
{
    /* Setup cube vertex data. */
    v[0][0] = v[1][0] = v[2][0] = v[3][0] = -1;
    v[4][0] = v[5][0] = v[6][0] = v[7][0] = 1;
    v[0][1] = v[1][1] = v[4][1] = v[5][1] = -1;
    v[2][1] = v[3][1] = v[6][1] = v[7][1] = 1;
    v[0][2] = v[3][2] = v[4][2] = v[7][2] = 1;
    v[1][2] = v[2][2] = v[5][2] = v[6][2] = -1;

    /* Enable a single OpenGL light. */
    glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHTING);

    /* Use depth buffering for hidden surface elimination. */
    glEnable(GL_DEPTH_TEST);

    /* Setup the view of the cube. */
    glMatrixMode(GL_PROJECTION);
    gluPerspective( /* field of view in degree */ 40.0,
        /* aspect ratio */ 1.0,
        /* Z near */ 1.0, /* Z far */ 10.0);
    glMatrixMode(GL_MODELVIEW);
    gluLookAt(0.0, 0.0, 5.0, /* eye is at (0,0,5) */
        0.0, 0.0, 0.0, /* center is at (0,0,0) */
        0.0, 1.0, 0.); /* up is in positive Y direction */

    /* Adjust cube position to be asthetic angle. */
    glTranslatef(0.0, 0.0, -1.0);
    glRotatef(60, 1.0, 0.0, 0.0);
    glRotatef(-20, 0.0, 0.0, 1.0);
}


int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutCreateWindow("red 3D lighted cube");
    glutDisplayFunc(display);
    init();
    glutMainLoop();
    return 0; /* ANSI C requires main to return int. */
}


阅读(1760) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~