亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sphereworld.c

?? OpeNGL超級寶典源代碼. OpeNGL超級寶典源代碼.
?? C
字號:
// SphereWorld.c
// OpenGL SuperBible
// Demonstrates an immersive 3D environment using actors
// and a camera. This version adds lights and material properties
// and shadows.
// Program by Richard S. Wright Jr.

#include "../../Common/OpenGLSB.h"	// System and OpenGL Stuff
#include "../../Common/GLTools.h"	// OpenGL toolkit
#include <math.h>

#define NUM_SPHERES      30
GLTFrame    spheres[NUM_SPHERES];
GLTFrame    frameCamera;

// Light and material Data
GLfloat fLightPos[4]   = { -100.0f, 100.0f, 50.0f, 1.0f };  // Point source
GLfloat fNoLight[] = { 0.0f, 0.0f, 0.0f, 0.0f };
GLfloat fLowLight[] = { 0.25f, 0.25f, 0.25f, 1.0f };
GLfloat fBrightLight[] = { 1.0f, 1.0f, 1.0f, 1.0f };

GLTMatrix mShadowMatrix;


        
//////////////////////////////////////////////////////////////////
// This function does any needed initialization on the rendering
// context. 
void SetupRC()
    {
    int iSphere;
    
	// Calculate shadow matrix
    GLTVector3 vPoints[3] = {{ 0.0f, -0.4f, 0.0f },
                             { 10.0f, -0.4f, 0.0f },
                             { 5.0f, -0.4f, -5.0f }};
    
    // Grayish background
    glClearColor(fLowLight[0], fLowLight[1], fLowLight[2], fLowLight[3]);
         
    // Cull backs of polygons
    glCullFace(GL_BACK);
    glFrontFace(GL_CCW);
    glEnable(GL_CULL_FACE);
    glEnable(GL_DEPTH_TEST);
    
    // Setup light parameters
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, fNoLight);
    glLightfv(GL_LIGHT0, GL_AMBIENT, fLowLight);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, fBrightLight);
    glLightfv(GL_LIGHT0, GL_SPECULAR, fBrightLight);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    

    
     gltMakeShadowMatrix(vPoints, fLightPos, mShadowMatrix);
    
    // Mostly use material tracking
    glEnable(GL_COLOR_MATERIAL);
    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
    glMateriali(GL_FRONT, GL_SHININESS, 128);
    
    gltInitFrame(&frameCamera);  // Initialize the camera
    
    // Randomly place the sphere inhabitants
    for(iSphere = 0; iSphere < NUM_SPHERES; iSphere++)
        {
        gltInitFrame(&spheres[iSphere]);    // Initialize the frame
        
        // Pick a random location between -20 and 20 at .1 increments
        spheres[iSphere].vLocation[0] = (float)((rand() % 400) - 200) * 0.1f;
        spheres[iSphere].vLocation[1] = 0.0f; 
        spheres[iSphere].vLocation[2] = (float)((rand() % 400) - 200) * 0.1f;
        }
    }


///////////////////////////////////////////////////////////
// Draw the ground as a series of triangle strips
void DrawGround(void)
    {
    GLfloat fExtent = 20.0f;
    GLfloat fStep = 1.0f;
    GLfloat y = -0.4f;
    GLint iStrip, iRun;
    
    for(iStrip = -fExtent; iStrip <= fExtent; iStrip += fStep)
        {
        glBegin(GL_TRIANGLE_STRIP);
            glNormal3f(0.0f, 1.0f, 0.0f);   // All Point up
            
            for(iRun = fExtent; iRun >= -fExtent; iRun -= fStep)
                {
                glVertex3f(iStrip, y, iRun);
                glVertex3f(iStrip + fStep, y, iRun);
                }
        glEnd();
        }
    }

///////////////////////////////////////////////////////////////////////
// Draw random inhabitants and the rotating torus/sphere duo
void DrawInhabitants(GLint nShadow)
    {
    static GLfloat yRot = 0.0f;         // Rotation angle for animation
    GLint i;

    if(nShadow == 0)
        yRot += 0.5f;
    else
        glColor3f(0.0f, 0.0f, 0.0f);
    
    // Draw the randomly located spheres
    if(nShadow == 0)
        glColor3f(0.0f, 1.0f, 0.0f);
        
    
    for(i = 0; i < NUM_SPHERES; i++)
        {
        glPushMatrix();
        gltApplyActorTransform(&spheres[i]);
        glutSolidSphere(0.3f, 17, 9);
        glPopMatrix();
        }

    glPushMatrix();
        glTranslatef(0.0f, 0.1f, -2.5f);
    
        if(nShadow == 0)
            glColor3f(0.0f, 0.0f, 1.0f);

        glPushMatrix();
            glRotatef(-yRot * 2.0f, 0.0f, 1.0f, 0.0f);
            glTranslatef(1.0f, 0.0f, 0.0f);
            glutSolidSphere(0.1f, 17, 9);
        glPopMatrix();
    
        if(nShadow == 0)
            {
            // Torus alone will be specular
            glColor3f(1.0f, 0.0f, 0.0f);
            glMaterialfv(GL_FRONT, GL_SPECULAR, fBrightLight);
            }
        
        glRotatef(yRot, 0.0f, 1.0f, 0.0f);
        gltDrawTorus(0.35, 0.15, 61, 37);
        glMaterialfv(GL_FRONT, GL_SPECULAR, fNoLight);
    glPopMatrix();
    }

        
// Called to draw scene
void RenderScene(void)
    {
    // Clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        
    glPushMatrix();
        gltApplyCameraTransform(&frameCamera);
        
        // Position light before any other transformations
        glLightfv(GL_LIGHT0, GL_POSITION, fLightPos);
        
        // Draw the ground
        glColor3f(0.60f, .40f, .10f);
        DrawGround();
        
        // Draw shadows first
        glDisable(GL_DEPTH_TEST);
        glDisable(GL_LIGHTING);
        glPushMatrix();
            glMultMatrixf(mShadowMatrix);
            DrawInhabitants(1);
        glPopMatrix();
        glEnable(GL_LIGHTING);
        glEnable(GL_DEPTH_TEST);
        
        // Draw inhabitants normally
        DrawInhabitants(0);

    glPopMatrix();
        
    // Do the buffer Swap
    glutSwapBuffers();
    glutPostRedisplay();
    }



// Respond to arrow keys by moving the camera frame of reference
void SpecialKeys(int key, int x, int y)
    {
    if(key == GLUT_KEY_UP)
        gltMoveFrameForward(&frameCamera, 0.1f);

    if(key == GLUT_KEY_DOWN)
        gltMoveFrameForward(&frameCamera, -0.1f);

    if(key == GLUT_KEY_LEFT)
        gltRotateFrameLocalY(&frameCamera, 0.1);
      
    if(key == GLUT_KEY_RIGHT)
        gltRotateFrameLocalY(&frameCamera, -0.1);
                        
    // Refresh the Window
    glutPostRedisplay();
    }


///////////////////////////////////////////////////////////
// Called by GLUT library when idle (window not being
// resized or moved)
void TimerFunction(int value)
    {
    // Redraw the scene with new coordinates
    glutPostRedisplay();
    glutTimerFunc(3,TimerFunction, 1);
    }

void ChangeSize(int w, int h)
    {
    GLfloat fAspect;

    // Prevent a divide by zero, when window is too short
    // (you cant make a window of zero width).
    if(h == 0)
        h = 1;

    glViewport(0, 0, w, h);
        
    fAspect = (GLfloat)w / (GLfloat)h;

    // Reset the coordinate system before modifying
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
	
    // Set the clipping volume
    gluPerspective(35.0f, fAspect, 1.0f, 50.0f);
        
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();    
    }

int main(int argc, char* argv[])
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(800,600);
    glutCreateWindow("OpenGL SphereWorld Demo + Lights and Shadow");
    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);
    glutSpecialFunc(SpecialKeys);

    SetupRC();
    glutTimerFunc(33, TimerFunction, 1);

    glutMainLoop();

    return 0;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本美女一区二区三区视频| 在线免费av一区| 91传媒视频在线播放| 日韩一区二区三区免费观看| 国产精品你懂的| 免费看日韩a级影片| 91天堂素人约啪| 欧美精品一区二区在线播放| 国产精品传媒在线| 国模少妇一区二区三区| 欧美午夜一区二区三区| 久久欧美一区二区| 午夜日韩在线电影| 色婷婷久久99综合精品jk白丝| 精品福利一区二区三区| 午夜视频一区在线观看| 91免费国产在线| 国产农村妇女精品| 国产麻豆精品一区二区| 欧美成人精品二区三区99精品| 亚洲午夜av在线| 日本精品一区二区三区高清| 国产欧美一区二区精品久导航| 久久99精品国产.久久久久久| 欧美日韩一卡二卡三卡 | 亚洲午夜三级在线| 成人av在线影院| 国产三级一区二区| 国精品**一区二区三区在线蜜桃| 91精品国产一区二区三区| 亚洲一区二区av电影| 日本大香伊一区二区三区| 国产精品福利影院| 91久久国产综合久久| 中文字幕一区视频| 9久草视频在线视频精品| 久久久99精品久久| 看电视剧不卡顿的网站| 欧美一级二级三级蜜桃| 亚洲一区中文日韩| 欧美性猛交一区二区三区精品 | 91原创在线视频| xf在线a精品一区二区视频网站| 欧美久久免费观看| 日韩经典一区二区| 欧美日韩dvd在线观看| 亚洲人成7777| 91蜜桃免费观看视频| 国产亚洲成aⅴ人片在线观看| 蜜臀va亚洲va欧美va天堂| 欧美在线一二三四区| 亚洲超碰精品一区二区| 久久99久久99精品免视看婷婷 | 欧美色精品在线视频| 亚洲综合精品久久| 色噜噜狠狠一区二区三区果冻| 亚洲一区在线免费观看| 欧美亚洲国产一区在线观看网站| 亚洲va中文字幕| 欧美日韩一区二区欧美激情| 麻豆久久一区二区| 精品国产伦一区二区三区观看方式| 亚洲国产成人私人影院tom| 91蜜桃视频在线| 亚洲精品中文在线影院| 3d动漫精品啪啪1区2区免费| 日本美女视频一区二区| 国产欧美久久久精品影院| 成人高清视频在线观看| 天天操天天综合网| 日韩免费看网站| 北岛玲一区二区三区四区| 亚洲三级电影全部在线观看高清| 欧美日韩成人高清| 亚洲成人自拍偷拍| 国产亲近乱来精品视频| 国产成人精品影视| 一区二区三区免费观看| 日韩精品一区二区三区老鸭窝 | 久久精品视频一区| 91丨porny丨户外露出| 免费av成人在线| 国产亚洲欧美在线| 69av一区二区三区| 国产另类ts人妖一区二区| 午夜视频在线观看一区| 久久久久久综合| 欧美日韩成人在线一区| 麻豆精品国产传媒mv男同| 中文字幕一区二区三中文字幕 | 国产成人午夜99999| 亚洲国产精品一区二区尤物区| www一区二区| 欧美日本国产视频| 懂色中文一区二区在线播放| 国产激情精品久久久第一区二区| 亚洲色图都市小说| 国产女人aaa级久久久级| 色综合天天综合在线视频| 日本一区中文字幕| 亚洲一区二区三区在线| 久久久精品2019中文字幕之3| 欧美妇女性影城| 成人av在线播放网站| 国产精品资源在线看| 亚洲国产中文字幕在线视频综合| 国产精品电影院| 日韩视频在线永久播放| 欧美老肥妇做.爰bbww视频| 91在线免费看| 国产成人日日夜夜| 国产精品一区二区免费不卡| 亚洲gay无套男同| 亚洲制服丝袜av| 中文字幕中文在线不卡住| 国产精品美女www爽爽爽| 久久精品人人做人人综合| 91精品国产一区二区三区| 欧美绝品在线观看成人午夜影视| 丁香六月综合激情| 国产成人在线观看| 激情丁香综合五月| 国产老肥熟一区二区三区| 日韩vs国产vs欧美| 琪琪久久久久日韩精品| 亚洲国产精品久久不卡毛片| 亚洲欧洲中文日韩久久av乱码| 亚洲日本在线看| 国产精品久久毛片| 国产免费观看久久| 精品久久久久久久久久久久久久久| 日韩欧美一区在线| 日韩欧美在线综合网| 91精品国产综合久久婷婷香蕉 | 国产成人av影院| 精品一区二区三区免费| 一区二区免费在线| 日本网站在线观看一区二区三区| 五月激情综合婷婷| 午夜欧美2019年伦理| 亚洲超碰97人人做人人爱| 亚洲另类在线视频| 亚洲免费伊人电影| 亚洲一区二区三区四区五区中文| 尤物视频一区二区| 国产精品污网站| 亚洲成人1区2区| 秋霞成人午夜伦在线观看| 青青草91视频| 不卡的av在线播放| 在线免费观看不卡av| 精品理论电影在线观看| 精品国产伦一区二区三区免费 | 亚洲精品伦理在线| 夜夜嗨av一区二区三区网页| 捆绑调教一区二区三区| 成人黄色电影在线| 欧美中文字幕一区二区三区亚洲| 欧美成va人片在线观看| 国产午夜亚洲精品理论片色戒| 一区二区三区中文字幕在线观看| 亚洲va国产天堂va久久en| 欧美三日本三级三级在线播放| 韩国精品主播一区二区在线观看 | 国产一区二区三区在线观看精品| 国产成人午夜视频| 欧美一区二区精品久久911| 精品国产精品网麻豆系列| 亚洲精品国产a久久久久久| 亚洲欧洲在线观看av| 麻豆免费看一区二区三区| 国产99精品国产| 欧美三区在线观看| 国产精品久久久久四虎| 日韩电影在线观看网站| 国产一区二区三区日韩| 91久久国产最好的精华液| 国产日韩欧美在线一区| 亚洲成人中文在线| 国产成人鲁色资源国产91色综| 色狠狠一区二区| 中文字幕一区三区| 蜜臀精品久久久久久蜜臀 | 亚洲精品在线网站| 亚洲欧美日韩国产综合| 国产福利一区在线| 欧美一区国产二区| 亚洲乱码日产精品bd| 激情综合色播五月| 日韩精品影音先锋| 亚洲精品国产一区二区精华液 | 理论片日本一区| 99精品视频一区二区三区| 欧美va亚洲va香蕉在线| 一区二区不卡在线播放 | 欧美福利一区二区| 综合电影一区二区三区| 成人午夜精品在线| 久久婷婷久久一区二区三区| 性做久久久久久久久|