计算机图形学课程设计报告

时间:2024.3.19

 

《计算机图形学》

     

      课程设计

系    专:                                

班    级:                                

姓    名:                                

学    号:                                

题    目:       1、画直线  2、贴纹理    

指导老师:                                

       Bresenham算法画直线

目录

一、实验目的 ----------------------3

二、设计思路 ----------------------3

三、程序代码 ----------------------3

四、运行结果 ---------------------19

一、实验目的

   运用Bresenham算法画出斜率各不同的直线,包括大于-1小于1、等于1,大于1,小于-1,无穷大。

二、设计思路

   假定直线的起点、终点分别为:(x1,y1), (x2,y2),且都为整数。

则直线方程为y=mx+b,其中b=y1-mx1,m=dy/dx,当x每递增1,y递增k(即直线斜率)

取yi+1,yi由d1,d2的大小决定y=m(xi+1)+b,

      d1=y- yi,    d2= yi+1–y,

当d1- d2>0 ,  ;

当d1- d2<0 ,    ;

d1-d2=2y-2yi-1=2dy/dx(xi+1)+2b-2yi-1,

     dx(d1- d2)= 2dy(xi+1)+2bdx-2yidx-dx,

设pi =dx(d1- d2) ,则pi = 2xidy-2yidx +2dy+2bdx-dx  (1)

则pi+1 = 2(xi+1)dy-2yi+1dx +2dy+2bdx-dx

   pi+1 =2dy-2(yi+1-yi)dx+ pi;

当pi >0时 yi+1= yi+1 ,   pi+1 =2dy-2dx+ pi

当pi <0时 yi+1= yi   ,    pi+1 =2dy+ pi

初值p1 = 2x1dy-2y1dx +2dy+2bdx-dx

因为y1dx=x1dy+bdx ;

所以p1 = 2x1dy-2(x1dy+bdx) +2dy+2bdx-dx =2dy-dx

总结: p1 =2dy-dx   dx=x2-x1,  dy=y2-y1

当p1 >0时 p2= p1 + 2dy-2dx

当p1 <0时 p2= p1 + 2dy,由此得出算法。

三、程序代码

#include <windows.h>     // Header File For Windows

#include <gl\gl.h>           // Header File For The OpenGL32 Library

#include <gl\glu.h>          // Header File For The GLu32 Library

#include <gl\glaux.h>        // Header File For The Glaux Library

#include <stdio.h>

#include <math.h>

HDC         hDC=NULL;      // Private GDI Device Context

HGLRC      hRC=NULL;      // Permanent Rendering Context

HWND       hWnd=NULL;     // Holds Our Window Handle

HINSTANCE  hInstance;     // Holds The Instance Of The Application

bool   keys[256];         // Array Used For The Keyboard Routine

bool   active=TRUE;      // Window Active Flag Set To TRUE By Default

bool   fullscreen=TRUE;  // Fullscreen Flag Set To Fullscreen Mode By Default

bool pt=true;

bool fc=true;

float x=0.0,y=0.0;

LRESULT    CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Declaration For WndProc

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)      // Resize And Initialize The GL Window

{

    if (height==0)                                        // Prevent A Divide By Zero By

    {

        height=1;                                      // Making Height Equal One

    }

    glViewport(0,0,width,height);                       // Reset The Current Viewport

    glMatrixMode(GL_PROJECTION);                        // Select The Projection Matrix

    glLoadIdentity();                                 // Reset The Projection Matrix

    // Calculate The Aspect Ratio Of The Window

    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

    glMatrixMode(GL_MODELVIEW);                         // Select The Modelview Matrix

    glLoadIdentity();                                 // Reset The Modelview Matrix

}

void DrawLine()

{

    int x1=30,y1=-60,x2=0,y2=0;

    int dx = x2 - x1, dy = y2 - y1,y=y1,  eps = 0;

    float m=(float)dy/dx;

    if (m>=0)

    {

        if(m<=1)

        {

            for ( int x = x1; x <= x2; x++ )

            { 

               glBegin(GL_POINTS);

               glColor3f(1.0f,1.0f,1.0f);

                glVertex3f((float)x,(float)y,0.0f);

                glEnd();

                if(pt==true)

                {

                    printf("%d,%d,\n",x,y);

                }

                   eps += dy;

                if ( (eps << 1) >= dx )

                {      

                   y++;

                    eps -= dx;

                }

            }

        }

        else

        {

            int dx = x2 - x1, dy = y2 - y1,x=x1,  eps = 0;

            for ( int y = y1; y <= y2; y++ )

            { 

               glBegin(GL_POINTS);

               glColor3f(1.0f,1.0f,1.0f);

               glVertex3f((float)x,(float)y,0.0f);

                glEnd();

                if(pt==true)

                {

                    printf("%d,%d,\n",x,y);

                }

               eps += dx;

               if ( (eps << 1) >= dy )

                {      

                   x++;

                   eps -= dy;

                }

            }

        }

    }

    else

    {

        if(m>=(-1))

        {

            int dx = x2 - x1, dy = y2 - y1, y=y1, eps = 0;

            for ( int x = x1; x >= x2; x-- )

            { 

               glBegin(GL_POINTS);

               glColor3f(1.0f,1.0f,1.0f);

              glVertex3f((float)x,(float)y,0.0f);

              glEnd();

                if(pt==true)

                {

                    printf("%d,%d,\n",x,y);

                }

               eps += dy;

               if ( (eps << 1) >= abs(dx) )

                {      

                   y++;

                   eps -= abs(dx);

                }

            }

        }

        else

        {

            int dx = x2 - x1, dy = y2 - y1,x=x1,  eps = 0;

            for ( int y = y1; y <= y2; y++ )

            { 

               glBegin(GL_POINTS);

               glColor3f(1.0f,1.0f,1.0f);

               glVertex3f((float)x,(float)y,0.0f);

                glEnd();

                if(pt==true)

                {

                    printf("%d,%d,\n",x,y);

                }

                eps += dx;

               if ( (eps << 1) <= -dy )

                {      

                   x--;

                   eps += dy;

                }

            }

        }

    }

    pt=false;

}

int InitGL(GLvoid)                                       // All Setup For OpenGL Goes Here

{

   

    glShadeModel(GL_SMOOTH);                         // Enable Smooth Shading

    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);              // Black Background

    glClearDepth(1.0f);                                  // Depth Buffer Setup

//  glEnable(GL_DEPTH_TEST);                         // Enables Depth Testing

//  glDepthFunc(GL_LEQUAL);                              // The Type Of Depth Testing To Do

    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);   // Really Nice Perspective Calculations

    glEnable(GL_POINT_SMOOTH);

    AllocConsole();

    freopen("CONOUT$", "w", stdout);

   

    return TRUE;                                      // Initialization Went OK

}

   

int DrawGLScene(GLvoid)                                  // Here's Where We Do All The Drawing

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  // Clear Screen And Depth Buffer

    glLoadIdentity();// Reset The Current Modelview Matrix

    glTranslatef(0.0f,0.0f,-100.0f);

    DrawLine();

    return TRUE;                                          // Everything Went OK

}

GLvoid KillGLWindow(GLvoid)                             // Properly Kill The Window

{

    if (fullscreen)                                       // Are We In Fullscreen Mode?

    {

        ChangeDisplaySettings(NULL,0);                  // If So Switch Back To The Desktop

        ShowCursor(TRUE);                             // Show Mouse Pointer

    }

    if (hRC)                                           // Do We Have A Rendering Context?

    {

        if (!wglMakeCurrent(NULL,NULL))                 // Are We Able To Release The DC And RC Contexts?

        {

            MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

        }

        if (!wglDeleteContext(hRC))                     // Are We Able To Delete The RC?

        {

            MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

        }

        hRC=NULL;                                      // Set RC To NULL

    }

    if (hDC && !ReleaseDC(hWnd,hDC))                   // Are We Able To Release The DC

    {

        MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

        hDC=NULL;                                      // Set DC To NULL

    }

    if (hWnd && !DestroyWindow(hWnd))                  // Are We Able To Destroy The Window?

    {

        MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

        hWnd=NULL;                                     // Set hWnd To NULL

    }

    if (!UnregisterClass("OpenGL",hInstance))         // Are We Able To Unregister Class

    {

        MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

        hInstance=NULL;                                   // Set hInstance To NULL

    }

}

/*  This Code Creates Our OpenGL Window.  Parameters Are:                   *

 *  title          - Title To Appear At The Top Of The Window                *

 *  width          - Width Of The GL Window Or Fullscreen Mode               *

 *  height         - Height Of The GL Window Or Fullscreen Mode          *

 *  bits           - Number Of Bits To Use For Color (8/16/24/32)           *

 *  fullscreenflag    - Use Fullscreen Mode (TRUE) Or Windowed Mode (FALSE)   */

BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)

{

    GLuint     PixelFormat;          // Holds The Results After Searching For A Match

    WNDCLASS   wc;                     // Windows Class Structure

    DWORD      dwExStyle;             // Window Extended Style

    DWORD      dwStyle;               // Window Style

    RECT       WindowRect;               // Grabs Rectangle Upper Left / Lower Right Values

    WindowRect.left=(long)0;         // Set Left Value To 0

    WindowRect.right=(long)width;       // Set Right Value To Requested Width

    WindowRect.top=(long)0;              // Set Top Value To 0

    WindowRect.bottom=(long)height;     // Set Bottom Value To Requested Height

    fullscreen=fullscreenflag;          // Set The Global Fullscreen Flag

    hInstance          = GetModuleHandle(NULL);             // Grab An Instance For Our Window

    wc.style           = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;  // Redraw On Size, And Own DC For Window.

    wc.lpfnWndProc        = (WNDPROC) WndProc;                 // WndProc Handles Messages

    wc.cbClsExtra     = 0;                                   // No Extra Window Data

    wc.cbWndExtra     = 0;                                   // No Extra Window Data

    wc.hInstance      = hInstance;                          // Set The Instance

    wc.hIcon           = LoadIcon(NULL, IDI_WINLOGO);          // Load The Default Icon

    wc.hCursor         = LoadCursor(NULL, IDC_ARROW);          // Load The Arrow Pointer

    wc.hbrBackground  = NULL;                                    // No Background Required For GL

    wc.lpszMenuName       = NULL;                                    // We Don't Want A Menu

    wc.lpszClassName  = "OpenGL";                               // Set The Class Name

    if (!RegisterClass(&wc))                                 // Attempt To Register The Window Class

    {

        MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);

        return FALSE;                                         // Return FALSE

    }

   

    if (fullscreen)                                               // Attempt Fullscreen Mode?

    {

        DEVMODE dmScreenSettings;                               // Device Mode

        memset(&dmScreenSettings,0,sizeof(dmScreenSettings));   // Makes Sure Memory's Cleared

        dmScreenSettings.dmSize=sizeof(dmScreenSettings);        // Size Of The Devmode Structure

        dmScreenSettings.dmPelsWidth    = width;               // Selected Screen Width

        dmScreenSettings.dmPelsHeight   = height;              // Selected Screen Height

        dmScreenSettings.dmBitsPerPel   = bits;                    // Selected Bits Per Pixel

        dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

        // Try To Set Selected Mode And Get Results.  NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.

        if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)

        {

            // If The Mode Fails, Offer Two Options.  Quit Or Use Windowed Mode.

            if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)

            {

                fullscreen=FALSE;     // Windowed Mode Selected.  Fullscreen = FALSE

            }

            else

            {

                // Pop Up A Message Box Letting User Know The Program Is Closing.

                MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);

                return FALSE;                                 // Return FALSE

            }

        }

    }

    if (fullscreen)                                               // Are We Still In Fullscreen Mode?

    {

        dwExStyle=WS_EX_APPWINDOW;                              // Window Extended Style

        dwStyle=WS_POPUP;                                     // Windows Style

        ShowCursor(FALSE);                                       // Hide Mouse Pointer

    }

    else

    {

        dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;         // Window Extended Style

        dwStyle=WS_OVERLAPPEDWINDOW;                            // Windows Style

    }

    AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);     // Adjust Window To True Requested Size

    // Create The Window

    if (!(hWnd=CreateWindowEx(  dwExStyle,                         // Extended Style For The Window

                                "OpenGL",                          // Class Name

                                title,                             // Window Title

                                dwStyle |                          // Defined Window Style

                                WS_CLIPSIBLINGS |                 // Required Window Style

                                WS_CLIPCHILDREN,                  // Required Window Style

                                0, 0,                              // Window Position

                                WindowRect.right-WindowRect.left,  // Calculate Window Width

                                WindowRect.bottom-WindowRect.top,  // Calculate Window Height

                                NULL,                              // No Parent Window

                                NULL,                              // No Menu

                                hInstance,                         // Instance

                                NULL)))                                // Dont Pass Anything To WM_CREATE

    {

        KillGLWindow();                               // Reset The Display

        MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);

        return FALSE;                             // Return FALSE

    }

    static PIXELFORMATDESCRIPTOR pfd=              // pfd Tells Windows How We Want Things To Be

    {

        sizeof(PIXELFORMATDESCRIPTOR),              // Size Of This Pixel Format Descriptor

        1,                                          // Version Number

        PFD_DRAW_TO_WINDOW |                     // Format Must Support Window

        PFD_SUPPORT_OPENGL |                     // Format Must Support OpenGL

        PFD_DOUBLEBUFFER,                         // Must Support Double Buffering

        PFD_TYPE_RGBA,                                // Request An RGBA Format

        bits,                                      // Select Our Color Depth

        0, 0, 0, 0, 0, 0,                         // Color Bits Ignored

        0,                                          // No Alpha Buffer

        0,                                          // Shift Bit Ignored

        0,                                          // No Accumulation Buffer

        0, 0, 0, 0,                                   // Accumulation Bits Ignored

        16,                                         // 16Bit Z-Buffer (Depth Buffer) 

        0,                                          // No Stencil Buffer

        0,                                          // No Auxiliary Buffer

        PFD_MAIN_PLANE,                               // Main Drawing Layer

        0,                                          // Reserved

        0, 0, 0                                        // Layer Masks Ignored

    };

   

    if (!(hDC=GetDC(hWnd)))                          // Did We Get A Device Context?

    {

        KillGLWindow();                               // Reset The Display

        MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);

        return FALSE;                             // Return FALSE

    }

    if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))  // Did Windows Find A Matching Pixel Format?

    {

        KillGLWindow();                               // Reset The Display

        MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);

        return FALSE;                             // Return FALSE

    }

    if(!SetPixelFormat(hDC,PixelFormat,&pfd))     // Are We Able To Set The Pixel Format?

    {

        KillGLWindow();                               // Reset The Display

        MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);

        return FALSE;                             // Return FALSE

    }

    if (!(hRC=wglCreateContext(hDC)))             // Are We Able To Get A Rendering Context?

    {

        KillGLWindow();                               // Reset The Display

        MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);

        return FALSE;                             // Return FALSE

    }

    if(!wglMakeCurrent(hDC,hRC))                    // Try To Activate The Rendering Context

    {

        KillGLWindow();                               // Reset The Display

        MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);

        return FALSE;                             // Return FALSE

    }

    ShowWindow(hWnd,SW_SHOW);                       // Show The Window

    SetForegroundWindow(hWnd);                      // Slightly Higher Priority

    SetFocus(hWnd);                                   // Sets Keyboard Focus To The Window

    ReSizeGLScene(width, height);                   // Set Up Our Perspective GL Screen

    if (!InitGL())                                    // Initialize Our Newly Created GL Window

    {

        KillGLWindow();                               // Reset The Display

        MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);

        return FALSE;                             // Return FALSE

    }

    return TRUE;                                  // Success

}

LRESULT CALLBACK WndProc(   HWND   hWnd,          // Handle For This Window

                            UINT   uMsg,          // Message For This Window

                            WPARAM wParam,            // Additional Message Information

                            LPARAM lParam)            // Additional Message Information

{

    switch (uMsg)                                 // Check For Windows Messages

    {

        case WM_ACTIVATE:                         // Watch For Window Activate Message

        {

            if (!HIWORD(wParam))                 // Check Minimization State

            {

                active=TRUE;                      // Program Is Active

            }

            else

            {

                active=FALSE;                     // Program Is No Longer Active

            }

            return 0;                              // Return To The Message Loop

        }

        case WM_SYSCOMMAND:                          // Intercept System Commands

        {

            switch (wParam)                           // Check System Calls

            {

                case SC_SCREENSAVE:                  // Screensaver Trying To Start?

                case SC_MONITORPOWER:                // Monitor Trying To Enter Powersave?

                return 0;                          // Prevent From Happening

            }

            break;                                 // Exit

        }

        case WM_CLOSE:                                // Did We Receive A Close Message?

        {

            PostQuitMessage(0);                      // Send A Quit Message

            return 0;                              // Jump Back

        }

        case WM_KEYDOWN:                          // Is A Key Being Held Down?

        {

            keys[wParam] = TRUE;                 // If So, Mark It As TRUE

            return 0;                              // Jump Back

        }

        case WM_KEYUP:                                // Has A Key Been Released?

        {

            keys[wParam] = FALSE;                    // If So, Mark It As FALSE

            return 0;                              // Jump Back

        }

        case WM_SIZE:                             // Resize The OpenGL Window

        {

            ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));  // LoWord=Width, HiWord=Height

            return 0;                              // Jump Back

        }

    }

    // Pass All Unhandled Messages To DefWindowProc

    return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

int WINAPI WinMain(  HINSTANCE  hInstance,         // Instance

                    HINSTANCE  hPrevInstance,        // Previous Instance

                    LPSTR      lpCmdLine,         // Command Line Parameters

                    int         nCmdShow)          // Window Show State

{

    MSG     msg;                                   // Windows Message Structure

    BOOL   done=FALSE;                               // Bool Variable To Exit Loop

    // Ask The User Which Screen Mode They Prefer

    if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)

    {

        fullscreen=FALSE;                         // Windowed Mode

    }

    // Create Our OpenGL Window

    if (!CreateGLWindow("OpenGL Framework",640,480,16,fullscreen))

    {

        return 0;                                  // Quit If Window Was Not Created

    }

    while(!done)                                  // Loop That Runs While done=FALSE

    {

        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?

        {

            if (msg.message==WM_QUIT)               // Have We Received A Quit Message?

            {

                done=TRUE;                         // If So done=TRUE

            }

            else                                   // If Not, Deal With Window Messages

            {

                TranslateMessage(&msg);              // Translate The Message

                DispatchMessage(&msg);               // Dispatch The Message

            }

        }

        else                                       // If There Are No Messages

        {

            // Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()

            if (active)                               // Program Active?

            {

                if (keys[VK_ESCAPE])             // Was ESC Pressed?

                {

                    done=TRUE;                     // ESC Signalled A Quit

                }

                else                               // Not Time To Quit, Update Screen

                {

                    DrawGLScene();                    // Draw The Scene

                    SwapBuffers(hDC);             // Swap Buffers (Double Buffering)

                }

            }

            if (keys[VK_F1])                      // Is F1 Being Pressed?

            {

                keys[VK_F1]=FALSE;                   // If So Make Key FALSE

                KillGLWindow();                       // Kill Our Current Window

                fullscreen=!fullscreen;              // Toggle Fullscreen / Windowed Mode

                // Recreate Our OpenGL Window

                if (!CreateGLWindow(" OpenGL Framework",640,480,16,fullscreen))

                {

                    return 0;                      // Quit If Window Was Not Created

                }

            }

        }

    }

    // Shutdown

    KillGLWindow();                                   // Kill The Window

    return (msg.wParam);                         // Exit The Program

}

四、运行结果

0<m<1:

m>1

0>m>-1

m<-1

贴纹理

目录

一、实验目的 ----------------------3

二、实验内容 ----------------------3

三、程序代码 ----------------------3

四、运行结果 ---------------------19

一、实验目的

  给一个正方体的表面贴上纹理图案。

二、实验内容

  运用open gl图形软件包给正方体添上图案。

三、程序代码

/*

 *           This Code Was Created By Jeff Molofee 2000

 *           A HUGE Thanks To Fredric Echols For Cleaning Up

 *           And Optimizing The Base Code, Making It More Flexible!

 *           If You've Found This Code Useful, Please Let Me Know.

 *           Visit My Site At nehe.gamedev.net

 */

#include <windows.h>          // Header File For Windows

#include <stdio.h>                // Header File For Standard Input/Output

#include <gl\gl.h>                // Header File For The OpenGL32 Library

#include <gl\glu.h>                     // Header File For The GLu32 Library

#include <gl\glaux.h>           // Header File For The Glaux Library

HDC                     hDC=NULL;          // Private GDI Device Context

HGLRC          hRC=NULL;          // Permanent Rendering Context

HWND          hWnd=NULL;        // Holds Our Window Handle

HINSTANCE  hInstance;              // Holds The Instance Of The Application

bool keys[256];                    // Array Used For The Keyboard Routine

bool active=TRUE;        // Window Active Flag Set To TRUE By Default

bool fullscreen=TRUE;  // Fullscreen Flag Set To Fullscreen Mode By Default

GLfloat   xrot;                      // X Rotation ( NEW )

GLfloat   yrot;                      // Y Rotation ( NEW )

GLfloat   zrot;                      // Z Rotation ( NEW )

GLuint    texture[1];                    // Storage For One Texture ( NEW )

LRESULT      CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Declaration For WndProc

AUX_RGBImageRec *LoadBMP(char *Filename)                           // Loads A Bitmap Image

{

       FILE *File=NULL;                                                         // File Handle

       if (!Filename)                                                                // Make Sure A Filename Was Given

       {

              return NULL;                                                          // If Not Return NULL

       }

       File=fopen(Filename,"r");                                               // Check To See If The File Exists

       if (File)                                                                         // Does The File Exist?

       {

              fclose(File);                                                            // Close The Handle

              return auxDIBImageLoad(Filename);                        // Load The Bitmap And Return A Pointer

       }

       return NULL;                                                                 // If Load Failed Return NULL

}

int LoadGLTextures()                                                             // Load Bitmaps And Convert To Textures

{

       int Status=FALSE;                                                         // Status Indicator

       AUX_RGBImageRec *TextureImage[1];                                  // Create Storage Space For The Texture

       memset(TextureImage,0,sizeof(void *)*1);               // Set The Pointer To NULL

       // Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit

       if (TextureImage[0]=LoadBMP("banma.bmp"))

       {

              Status=TRUE;                                                         // Set The Status To TRUE

              glGenTextures(1, &texture[0]);                                 // Create The Texture

              // Typical Texture Generation Using Data From The Bitmap

              glBindTexture(GL_TEXTURE_2D, texture[0]);

              glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

              glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

              glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

       }

       if (TextureImage[0])                                                              // If Texture Exists

       {

              if (TextureImage[0]->data)                                              // If Texture Image Exists

              {

                     free(TextureImage[0]->data);                             // Free The Texture Image Memory

              }

              free(TextureImage[0]);                                                    // Free The Image Structure

       }

       return Status;                                                                 // Return The Status

}

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)            // Resize And Initialize The GL Window

{

       if (height==0)                                                                // Prevent A Divide By Zero By

       {

              height=1;                                                                // Making Height Equal One

       }

       glViewport(0,0,width,height);                                          // Reset The Current Viewport

       glMatrixMode(GL_PROJECTION);                                        // Select The Projection Matrix

       glLoadIdentity();                                                            // Reset The Projection Matrix

       // Calculate The Aspect Ratio Of The Window

       gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

       glMatrixMode(GL_MODELVIEW);                                               // Select The Modelview Matrix

       glLoadIdentity();                                                            // Reset The Modelview Matrix

}

int InitGL(GLvoid)                                                                // All Setup For OpenGL Goes Here

{

       if (!LoadGLTextures())                                                    // Jump To Texture Loading Routine ( NEW )

       {

              return FALSE;                                                               // If Texture Didn't Load Return FALSE

       }

       glEnable(GL_TEXTURE_2D);                                               // Enable Texture Mapping ( NEW )

       glShadeModel(GL_SMOOTH);                                               // Enable Smooth Shading

       glClearColor(0.0f, 0.0f, 0.0f, 0.5f);                          // Black Background

       glClearDepth(1.0f);                                                               // Depth Buffer Setup

       glEnable(GL_DEPTH_TEST);                                                // Enables Depth Testing

       glDepthFunc(GL_LEQUAL);                                                  // The Type Of Depth Testing To Do

       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  // Really Nice Perspective Calculations

       return TRUE;                                                                 // Initialization Went OK

}

int DrawGLScene(GLvoid)                                                            // Here's Where We Do All The Drawing

{

       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  // Clear The Screen And The Depth Buffer

       glLoadIdentity();                                                            // Reset The View

       glTranslatef(0.0f,0.0f,-5.0f);

       glRotatef(xrot,1.0f,0.0f,0.0f);

       glRotatef(yrot,0.0f,1.0f,0.0f);

       glRotatef(zrot,0.0f,0.0f,1.0f);

       glBindTexture(GL_TEXTURE_2D, texture[0]);

       glBegin(GL_QUADS);

              // Front Face

              glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);

              glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);

              glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);

              glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);

              // Back Face

              glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);

              glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);

              glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);

              glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);

              // Top Face

              glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);

              glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);

              glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);

              glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);

              // Bottom Face

              glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);

              glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);

              glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);

              glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);

              // Right face

              glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);

              glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);

              glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);

              glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);

              // Left Face

              glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);

              glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);

              glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);

              glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);

       glEnd();

       xrot+=0.1f;

       yrot+=0.1f;

       zrot+=0.05f;

       return TRUE;                                                                 // Keep Going

}

GLvoid KillGLWindow(GLvoid)                                                    // Properly Kill The Window

{

       if (fullscreen)                                                                 // Are We In Fullscreen Mode?

       {

              ChangeDisplaySettings(NULL,0);                             // If So Switch Back To The Desktop

              ShowCursor(TRUE);                                                      // Show Mouse Pointer

       }

       if (hRC)                                                                        // Do We Have A Rendering Context?

       {

              if (!wglMakeCurrent(NULL,NULL))                                // Are We Able To Release The DC And RC Contexts?

              {

                     MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

              }

              if (!wglDeleteContext(hRC))                                    // Are We Able To Delete The RC?

              {

                     MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

              }

              hRC=NULL;                                                                  // Set RC To NULL

       }

       if (hDC && !ReleaseDC(hWnd,hDC))                             // Are We Able To Release The DC

       {

              MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

              hDC=NULL;                                                                  // Set DC To NULL

       }

       if (hWnd && !DestroyWindow(hWnd))                                  // Are We Able To Destroy The Window?

       {

              MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

              hWnd=NULL;                                                                // Set hWnd To NULL

       }

       if (!UnregisterClass("OpenGL",hInstance))                // Are We Able To Unregister Class

       {

              MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);

              hInstance=NULL;                                                           // Set hInstance To NULL

       }

}

/*    This Code Creates Our OpenGL Window.  Parameters Are:                                   *

 *    title                - Title To Appear At The Top Of The Window                          *

 *    width                    - Width Of The GL Window Or Fullscreen Mode                      *

 *    height                   - Height Of The GL Window Or Fullscreen Mode                     *

 *    bits                - Number Of Bits To Use For Color (8/16/24/32)               *

 *    fullscreenflag  - Use Fullscreen Mode (TRUE) Or Windowed Mode (FALSE)   */

BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)

{

       GLuint           PixelFormat;                 // Holds The Results After Searching For A Match

       WNDCLASS  wc;                                     // Windows Class Structure

       DWORD        dwExStyle;                          // Window Extended Style

       DWORD        dwStyle;                       // Window Style

       RECT            WindowRect;                       // Grabs Rectangle Upper Left / Lower Right Values

       WindowRect.left=(long)0;                   // Set Left Value To 0

       WindowRect.right=(long)width;           // Set Right Value To Requested Width

       WindowRect.top=(long)0;                          // Set Top Value To 0

       WindowRect.bottom=(long)height;              // Set Bottom Value To Requested Height

       fullscreen=fullscreenflag;                    // Set The Global Fullscreen Flag

       hInstance               = GetModuleHandle(NULL);                      // Grab An Instance For Our Window

       wc.style                 = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;  // Redraw On Size, And Own DC For Window.

       wc.lpfnWndProc           = (WNDPROC) WndProc;                                // WndProc Handles Messages

       wc.cbClsExtra        = 0;                                                         // No Extra Window Data

       wc.cbWndExtra            = 0;                                                         // No Extra Window Data

       wc.hInstance          = hInstance;                                              // Set The Instance

       wc.hIcon               = LoadIcon(NULL, IDI_WINLOGO);                // Load The Default Icon

       wc.hCursor                   = LoadCursor(NULL, IDC_ARROW);                // Load The Arrow Pointer

       wc.hbrBackground = NULL;                                                         // No Background Required For GL

       wc.lpszMenuName        = NULL;                                                         // We Don't Want A Menu

       wc.lpszClassName  = "OpenGL";                                                   // Set The Class Name

       if (!RegisterClass(&wc))                                                               // Attempt To Register The Window Class

       {

              MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);

              return FALSE;                                                                             // Return FALSE

       }

      

       if (fullscreen)                                                                               // Attempt Fullscreen Mode?

       {

              DEVMODE dmScreenSettings;                                                     // Device Mode

              memset(&dmScreenSettings,0,sizeof(dmScreenSettings));  // Makes Sure Memory's Cleared

              dmScreenSettings.dmSize=sizeof(dmScreenSettings);        // Size Of The Devmode Structure

              dmScreenSettings.dmPelsWidth    = width;                       // Selected Screen Width

              dmScreenSettings.dmPelsHeight   = height;                      // Selected Screen Height

              dmScreenSettings.dmBitsPerPel    = bits;                                 // Selected Bits Per Pixel

              dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

              // Try To Set Selected Mode And Get Results.  NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.

              if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)

              {

                     // If The Mode Fails, Offer Two Options.  Quit Or Use Windowed Mode.

                     if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)

                     {

                            fullscreen=FALSE;        // Windowed Mode Selected.  Fullscreen = FALSE

                     }

                     else

                     {

                            // Pop Up A Message Box Letting User Know The Program Is Closing.

                            MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);

                            return FALSE;                                                               // Return FALSE

                     }

              }

       }

       if (fullscreen)                                                                               // Are We Still In Fullscreen Mode?

       {

              dwExStyle=WS_EX_APPWINDOW;                                                    // Window Extended Style

              dwStyle=WS_POPUP;                                                                  // Windows Style

              ShowCursor(FALSE);                                                                   // Hide Mouse Pointer

       }

       else

       {

              dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;                 // Window Extended Style

              dwStyle=WS_OVERLAPPEDWINDOW;                                              // Windows Style

       }

       AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);             // Adjust Window To True Requested Size

       // Create The Window

       if (!(hWnd=CreateWindowEx(      dwExStyle,                                               // Extended Style For The Window

                                                        "OpenGL",                                               // Class Name

                                                        title,                                                  // Window Title

                                                        dwStyle |                                           // Defined Window Style

                                                        WS_CLIPSIBLINGS |                               // Required Window Style

                                                        WS_CLIPCHILDREN,                              // Required Window Style

                                                        0, 0,                                                  // Window Position

                                                        WindowRect.right-WindowRect.left,    // Calculate Window Width

                                                        WindowRect.bottom-WindowRect.top, // Calculate Window Height

                                                        NULL,                                                     // No Parent Window

                                                        NULL,                                                     // No Menu

                                                        hInstance,                                                 // Instance

                                                        NULL)))                                                  // Dont Pass Anything To WM_CREATE

       {

              KillGLWindow();                                                    // Reset The Display

              MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);

              return FALSE;                                                        // Return FALSE

       }

       static       PIXELFORMATDESCRIPTOR pfd=                        // pfd Tells Windows How We Want Things To Be

       {

              sizeof(PIXELFORMATDESCRIPTOR),                           // Size Of This Pixel Format Descriptor

              1,                                                                          // Version Number

              PFD_DRAW_TO_WINDOW |                                         // Format Must Support Window

              PFD_SUPPORT_OPENGL |                                     // Format Must Support OpenGL

              PFD_DOUBLEBUFFER,                                                // Must Support Double Buffering

              PFD_TYPE_RGBA,                                                       // Request An RGBA Format

              bits,                                                                // Select Our Color Depth

              0, 0, 0, 0, 0, 0,                                                 // Color Bits Ignored

              0,                                                                          // No Alpha Buffer

              0,                                                                          // Shift Bit Ignored

              0,                                                                          // No Accumulation Buffer

              0, 0, 0, 0,                                                               // Accumulation Bits Ignored

              16,                                                                         // 16Bit Z-Buffer (Depth Buffer) 

              0,                                                                          // No Stencil Buffer

              0,                                                                          // No Auxiliary Buffer

              PFD_MAIN_PLANE,                                                     // Main Drawing Layer

              0,                                                                          // Reserved

              0, 0, 0                                                                    // Layer Masks Ignored

       };

      

       if (!(hDC=GetDC(hWnd)))                                             // Did We Get A Device Context?

       {

              KillGLWindow();                                                    // Reset The Display

              MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);

              return FALSE;                                                        // Return FALSE

       }

       if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))   // Did Windows Find A Matching Pixel Format?

       {

              KillGLWindow();                                                    // Reset The Display

              MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);

              return FALSE;                                                        // Return FALSE

       }

       if(!SetPixelFormat(hDC,PixelFormat,&pfd))             // Are We Able To Set The Pixel Format?

       {

              KillGLWindow();                                                    // Reset The Display

              MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);

              return FALSE;                                                        // Return FALSE

       }

       if (!(hRC=wglCreateContext(hDC)))                         // Are We Able To Get A Rendering Context?

       {

              KillGLWindow();                                                    // Reset The Display

              MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);

              return FALSE;                                                        // Return FALSE

       }

       if(!wglMakeCurrent(hDC,hRC))                               // Try To Activate The Rendering Context

       {

              KillGLWindow();                                                    // Reset The Display

              MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);

              return FALSE;                                                        // Return FALSE

       }

       ShowWindow(hWnd,SW_SHOW);                                         // Show The Window

       SetForegroundWindow(hWnd);                                       // Slightly Higher Priority

       SetFocus(hWnd);                                                           // Sets Keyboard Focus To The Window

       ReSizeGLScene(width, height);                                // Set Up Our Perspective GL Screen

       if (!InitGL())                                                          // Initialize Our Newly Created GL Window

       {

              KillGLWindow();                                                    // Reset The Display

              MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);

              return FALSE;                                                        // Return FALSE

       }

       return TRUE;                                                          // Success

}

LRESULT CALLBACK WndProc(       HWND   hWnd,                   // Handle For This Window

                                                 UINT      uMsg,                   // Message For This Window

                                                 WPARAM      wParam,                // Additional Message Information

                                                 LPARAM       lParam)                 // Additional Message Information

{

       switch (uMsg)                                                         // Check For Windows Messages

       {

              case WM_ACTIVATE:                                             // Watch For Window Activate Message

              {

                     if (!HIWORD(wParam))                                   // Check Minimization State

                     {

                            active=TRUE;                                    // Program Is Active

                     }

                     else

                     {

                            active=FALSE;                                         // Program Is No Longer Active

                     }

                     return 0;                                                   // Return To The Message Loop

              }

              case WM_SYSCOMMAND:                                            // Intercept System Commands

              {

                     switch (wParam)                                              // Check System Calls

                     {

                            case SC_SCREENSAVE:                                  // Screensaver Trying To Start?

                            case SC_MONITORPOWER:                            // Monitor Trying To Enter Powersave?

                            return 0;                                            // Prevent From Happening

                     }

                     break;                                                             // Exit

              }

              case WM_CLOSE:                                                  // Did We Receive A Close Message?

              {

                     PostQuitMessage(0);                                         // Send A Quit Message

                     return 0;                                                   // Jump Back

              }

              case WM_KEYDOWN:                                           // Is A Key Being Held Down?

              {

                     keys[wParam] = TRUE;                             // If So, Mark It As TRUE

                     return 0;                                                   // Jump Back

              }

              case WM_KEYUP:                                                  // Has A Key Been Released?

              {

                     keys[wParam] = FALSE;                                  // If So, Mark It As FALSE

                     return 0;                                                   // Jump Back

              }

              case WM_SIZE:                                                      // Resize The OpenGL Window

              {

                     ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));  // LoWord=Width, HiWord=Height

                     return 0;                                                   // Jump Back

              }

       }

       // Pass All Unhandled Messages To DefWindowProc

       return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

int WINAPI WinMain(  HINSTANCE  hInstance,                     // Instance

                                   HINSTANCE  hPrevInstance,        // Previous Instance

                                   LPSTR           lpCmdLine,                  // Command Line Parameters

                                   int                 nCmdShow)                 // Window Show State

{

       MSG              msg;                                                         // Windows Message Structure

       BOOL     done=FALSE;                                                  // Bool Variable To Exit Loop

       // Ask The User Which Screen Mode They Prefer

       if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)

       {

              fullscreen=FALSE;                                           // Windowed Mode

       }

       // Create Our OpenGL Window

       if (!CreateGLWindow("NeHe's Texture Mapping Tutorial",640,480,16,fullscreen))

       {

              return 0;                                                          // Quit If Window Was Not Created

       }

       while(!done)                                                           // Loop That Runs While done=FALSE

       {

              if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))    // Is There A Message Waiting?

              {

                     if (msg.message==WM_QUIT)                          // Have We Received A Quit Message?

                     {

                            done=TRUE;                                            // If So done=TRUE

                     }

                     else                                                          // If Not, Deal With Window Messages

                     {

                            TranslateMessage(&msg);                           // Translate The Message

                            DispatchMessage(&msg);                           // Dispatch The Message

                     }

              }

              else                                                                 // If There Are No Messages

              {

                     // Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()

                     if ((active && !DrawGLScene()) || keys[VK_ESCAPE])    // Active?  Was There A Quit Received?

                     {

                            done=TRUE;                                            // ESC or DrawGLScene Signalled A Quit

                     }

                     else                                                          // Not Time To Quit, Update Screen

                     {

                            SwapBuffers(hDC);                                   // Swap Buffers (Double Buffering)

                     }

                     if (keys[VK_F1])                                      // Is F1 Being Pressed?

                     {

                            keys[VK_F1]=FALSE;                              // If So Make Key FALSE

                            KillGLWindow();                                      // Kill Our Current Window

                            fullscreen=!fullscreen;                        // Toggle Fullscreen / Windowed Mode

                            // Recreate Our OpenGL Window

                            if (!CreateGLWindow("NeHe's Texture Mapping Tutorial",640,480,16,fullscreen))

                            {

                                   return 0;                                     // Quit If Window Was Not Created

                            }

                     }

              }

       }

       // Shutdown

       KillGLWindow();                                                           // Kill The Window

       return (msg.wParam);                                              // Exit The Program

}

四、实验结果与分析

 

更多相关推荐:
计算机图形学课程设计报告1

目录1课程设计目的12系统功能介绍13程序代码和分析24总结45参考文献46源程序41计算机图形学课程设计报告1课程设计目的本课程主要内容包括计算机图形学的研究内容发展与应用图形输入输出设备图形显示原理图形软件...

计算机图形学课程设计报告

图形学课程设计多边形剪裁和填充图形软件设计1一题目内容说明1交互式地实现多边形的裁剪和填充2功能要求1窗口功能设计2实现鼠标画多边形与数据存储功能4实现鼠标剪裁窗口选择功能5实现多边形裁剪和填充功能二总体设计本...

计算机图形学课程设计报告

课程设计报告题目旋转四面体摘要本文主要描述了计算机图形学中,运用C++和OpenGL来实现的绘制一个实体四面体。其中简单的用glutTimerFunc,glutSpecialFunc等函数实现了用光标键控制其旋…

《计算机图形学》课程设计论文(参考)

攀枝花学院学生课程设计论文题目图书馆图书管理系统学生姓名学号所在院系计算机学院专业计算机科学与技术班级20xx级1班指导教师罗学刚20xx年6月13日攀枝花学院本科学生课程设计任务书注任务书由指导教师填写课程设...

计算机图形学课程设计

计算机图形学课程设计摘要巩固和实践计算机图形学课程中的理论和算法学习表现计算机图形学算法的技巧培养认真学习积极探索的精神总体要求策划设计并实现一个能够充分表现某个图形学算法的关键词计算机算法类别专题技术来源1本...

《计算机图形学》课程设计报告

计算机图形学课程设计报告课题名称SolarSystem大阳系课题负责人名学号曾睿0643111150同组成员名单角色曾睿0643111150指导教师李征评阅成绩评阅意见提交报告时间20xx年12月17日课题名称...

计算机图形学课程设计报告要求及模板

计算机图形学课程设计报告学院计算机工程学院班级姓名学号成绩指导老师王丰汪志华评语20xx年1月15日一设计任务本次课程设计为学生提供了一个软件系统开发的独立实践机会根据计算机图形学课程所学的理论知识设计实现一个...

计算机图形学课程设计

计算机图形学课程设计报告贝塞尔曲线屏保姓名学号专业班级设计时间西北民族大学数学与计算机科学学院一需求分析1设计的目的及作用贝塞尔曲线屏保是Windows早期通常自带的屏幕保护程序它主要是通过运行变幻着的多条贝塞...

图形学课程设计报告书-精品

课程设计报告学生姓名学院班级题目刘名凤学号0809290102理学院信计081奥运五环指导教师常志文职称教授邓冠男职称助教20xx年5月31日目录目录2一选题背景111奥运五环设计的问题112奥运五环设计指导思...

计算机图形学课程设计

皮球运动动画一设计方案圆皮球从某竖直高度以横向速度抛出落地弹起最终静止设弹起后所能上升的高度为上一次最大高度的45实现运动轨迹动画整个设计包括两个方面一是掌握动画的基本原理二是圆的绘制动画是将静止的画面变为动态...

计算机图形学 有效边表填充算法实验报告

实验题目实验二有效边表填充算法1实验目的设计有效边表结点和边表结点数据结构设计有效边表填充算法编程实现有效边表填充算法2实验描述下图1所示多边形覆盖了12条扫描线共有7个顶点和7条边7个顶点分别为P078P13...

计算机图形学实验报告3 - Bresenham画线

班级R数学111大连交通大学姓名实验报告同组人无课程名称计算机图形学成绩实验名称Bresenham画线指导老师任洪海

计算机图形学课程设计报告(41篇)