⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guidevideoopengl.html

📁 VC5.6.7的一个扩展库。跟DirectX的功能差不多。
💻 HTML
📖 第 1 页 / 共 2 页
字号:
     */    static GLfloat v0[] = { -1.0f, -1.0f,  1.0f };    static GLfloat v1[] = {  1.0f, -1.0f,  1.0f };    static GLfloat v2[] = {  1.0f,  1.0f,  1.0f };    static GLfloat v3[] = { -1.0f,  1.0f,  1.0f };    static GLfloat v4[] = { -1.0f, -1.0f, -1.0f };    static GLfloat v5[] = {  1.0f, -1.0f, -1.0f };    static GLfloat v6[] = {  1.0f,  1.0f, -1.0f };    static GLfloat v7[] = { -1.0f,  1.0f, -1.0f };    static GLubyte red[]    = { 255,   0,   0, 255 };    static GLubyte green[]  = {   0, 255,   0, 255 };    static GLubyte blue[]   = {   0,   0, 255, 255 };    static GLubyte white[]  = { 255, 255, 255, 255 };    static GLubyte yellow[] = {   0, 255, 255, 255 };    static GLubyte black[]  = {   0,   0,   0, 255 };    static GLubyte orange[] = { 255, 255,   0, 255 };    static GLubyte purple[] = { 255,   0, 255,   0 };    /* Clear the color and depth buffers. */    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );    /* We don't want to modify the projection matrix. */    glMatrixMode( GL_MODELVIEW );    glLoadIdentity( );    /* Move down the z-axis. */    glTranslatef( 0.0, 0.0, -5.0 );    /* Rotate. */    glRotatef( angle, 0.0, 1.0, 0.0 );    if( should_rotate ) {        if( ++angle &#62; 360.0f ) {            angle = 0.0f;        }    }    /* Send our triangle data to the pipeline. */    glBegin( GL_TRIANGLES );    glColor4ubv( red );    glVertex3fv( v0 );    glColor4ubv( green );    glVertex3fv( v1 );    glColor4ubv( blue );    glVertex3fv( v2 );    glColor4ubv( red );    glVertex3fv( v0 );    glColor4ubv( blue );    glVertex3fv( v2 );    glColor4ubv( white );    glVertex3fv( v3 );    glColor4ubv( green );    glVertex3fv( v1 );    glColor4ubv( black );    glVertex3fv( v5 );    glColor4ubv( orange );    glVertex3fv( v6 );    glColor4ubv( green );    glVertex3fv( v1 );    glColor4ubv( orange );    glVertex3fv( v6 );    glColor4ubv( blue );    glVertex3fv( v2 );    glColor4ubv( black );    glVertex3fv( v5 );    glColor4ubv( yellow );    glVertex3fv( v4 );    glColor4ubv( purple );    glVertex3fv( v7 );    glColor4ubv( black );    glVertex3fv( v5 );    glColor4ubv( purple );    glVertex3fv( v7 );    glColor4ubv( orange );    glVertex3fv( v6 );    glColor4ubv( yellow );    glVertex3fv( v4 );    glColor4ubv( red );    glVertex3fv( v0 );    glColor4ubv( white );    glVertex3fv( v3 );    glColor4ubv( yellow );    glVertex3fv( v4 );    glColor4ubv( white );    glVertex3fv( v3 );    glColor4ubv( purple );    glVertex3fv( v7 );    glColor4ubv( white );    glVertex3fv( v3 );    glColor4ubv( blue );    glVertex3fv( v2 );    glColor4ubv( orange );    glVertex3fv( v6 );    glColor4ubv( white );    glVertex3fv( v3 );    glColor4ubv( orange );    glVertex3fv( v6 );    glColor4ubv( purple );    glVertex3fv( v7 );    glColor4ubv( green );    glVertex3fv( v1 );    glColor4ubv( red );    glVertex3fv( v0 );    glColor4ubv( yellow );    glVertex3fv( v4 );    glColor4ubv( green );    glVertex3fv( v1 );    glColor4ubv( yellow );    glVertex3fv( v4 );    glColor4ubv( black );    glVertex3fv( v5 );    glEnd( );    /*     * EXERCISE:     * Draw text telling the user that 'Spc'     * pauses the rotation and 'Esc' quits.     * Do it using vetors and textured quads.     */    /*     * Swap the buffers. This this tells the driver to     * render the next frame from the contents of the     * back-buffer, and to set all rendering operations     * to occur on what was the front-buffer.     *     * Double buffering prevents nasty visual tearing     * from the application drawing on areas of the     * screen that are being updated at the same time.     */    SDL_GL_SwapBuffers( );}static void setup_opengl( int width, int height ){    float ratio = (float) width / (float) height;    /* Our shading model--Gouraud (smooth). */    glShadeModel( GL_SMOOTH );    /* Culling. */    glCullFace( GL_BACK );    glFrontFace( GL_CCW );    glEnable( GL_CULL_FACE );    /* Set the clear color. */    glClearColor( 0, 0, 0, 0 );    /* Setup our viewport. */    glViewport( 0, 0, width, height );    /*     * Change to the projection matrix and set     * our viewing volume.     */    glMatrixMode( GL_PROJECTION );    glLoadIdentity( );    /*     * EXERCISE:     * Replace this with a call to glFrustum.     */    gluPerspective( 60.0, ratio, 1.0, 1024.0 );}int main( int argc, char* argv[] ){    /* Information about the current video settings. */    const SDL_VideoInfo* info = NULL;    /* Dimensions of our window. */    int width = 0;    int height = 0;    /* Color depth in bits of our window. */    int bpp = 0;    /* Flags we will pass into SDL_SetVideoMode. */    int flags = 0;    /* First, initialize SDL's video subsystem. */    if( SDL_Init( SDL_INIT_VIDEO ) &#60; 0 ) {        /* Failed, exit. */        fprintf( stderr, "Video initialization failed: %s\n",             SDL_GetError( ) );        quit_tutorial( 1 );    }    /* Let's get some video information. */    info = SDL_GetVideoInfo( );    if( !info ) {        /* This should probably never happen. */        fprintf( stderr, "Video query failed: %s\n",             SDL_GetError( ) );        quit_tutorial( 1 );    }    /*     * Set our width/height to 640/480 (you would     * of course let the user decide this in a normal     * app). We get the bpp we will request from     * the display. On X11, VidMode can't change     * resolution, so this is probably being overly     * safe. Under Win32, ChangeDisplaySettings     * can change the bpp.     */    width = 640;    height = 480;    bpp = info-&#62;vfmt-&#62;BitsPerPixel;    /*     * Now, we want to setup our requested     * window attributes for our OpenGL window.     * We want *at least* 5 bits of red, green     * and blue. We also want at least a 16-bit     * depth buffer.     *     * The last thing we do is request a double     * buffered window. '1' turns on double     * buffering, '0' turns it off.     *     * Note that we do not use SDL_DOUBLEBUF in     * the flags to SDL_SetVideoMode. That does     * not affect the GL attribute state, only     * the standard 2D blitting setup.     */    SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 );    SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 );    SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 );    SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );    SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );    /*     * We want to request that SDL provide us     * with an OpenGL window, in a fullscreen     * video mode.     *     * EXERCISE:     * Make starting windowed an option, and     * handle the resize events properly with     * glViewport.     */    flags = SDL_OPENGL | SDL_FULLSCREEN;    /*     * Set the video mode     */    if( SDL_SetVideoMode( width, height, bpp, flags ) == 0 ) {        /*          * This could happen for a variety of reasons,         * including DISPLAY not being set, the specified         * resolution not being available, etc.         */        fprintf( stderr, "Video mode set failed: %s\n",             SDL_GetError( ) );        quit_tutorial( 1 );    }    /*     * At this point, we should have a properly setup     * double-buffered window for use with OpenGL.     */    setup_opengl( width, height );    /*     * Now we want to begin our normal app process--     * an event loop with a lot of redrawing.     */    while( 1 ) {        /* Process incoming events. */        process_events( );        /* Draw the screen. */        draw_screen( );    }    /*     * EXERCISE:     * Record timings using SDL_GetTicks() and     * and print out frames per second at program     * end.     */    /* Never reached. */    return 0;}</PRE></DIV></DIV></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="guidevideo.html"ACCESSKEY="P">Prev</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="index.html"ACCESSKEY="H">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="guideinput.html"ACCESSKEY="N">Next</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">Graphics and Video</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="guidevideo.html"ACCESSKEY="U">Up</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">Input handling</TD></TR></TABLE></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -