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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fog.c

?? OpenGL的大海量資料收集
?? C
字號(hào):
/*    fog.c    Nate Robins, 1997    Tool for teaching about OpenGL fog.    */#include <math.h>#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#include <GL/glut.h>#include "glm.h"
#pragma comment( linker, "/entry:\"mainCRTStartup\"" )  // set the entry point to be main()
typedef struct _cell {    int id;    int x, y;    float min, max;    float value;    float step;    char* info;    char* format;} cell;cell color[4] = {    { 1, 180, 40, 0.0, 1.0, 0.7, 0.005,        "Specifies red component of fog color.", "%.2f" },    { 2, 240, 40, 0.0, 1.0, 0.7, 0.005,     "Specifies green component of fog color.", "%.2f" },    { 3, 300, 40, 0.0, 1.0, 0.7, 0.005,     "Specifies blue component of fog color.", "%.2f" },    { 4, 360, 40, 0.0, 1.0, 1.0, 0.005,     "Specifies alpha component of fog color.", "%.2f" }};cell density = { 5, 260, 120,  0.0, 3.0, 1.0, 0.01, "Specifies the near distance.", "%.2f" };cell fstart  = { 6, 240, 120, -3.0, 3.0, 0.5, 0.01, "Specifies the far distance.", "%.2f" };cell fend    = { 7, 240, 160, -3.0, 3.0, 2.0, 0.01,"Specifies the fog density.", "%.2f" };GLenum mode = GL_LINEAR;GLboolean clear = GL_TRUE;GLMmodel* pmodel = NULL;GLfloat eye[3] = { 0.5, 0.25, 1.5 };GLfloat at[3]  = { 0.0, -0.25, 0.0 };GLfloat up[3]  = { 0.0, 1.0, 0.0 };void redisplay_all(void);GLuint window, world, screen, command;GLuint sub_width = 256, sub_height = 256;GLint selection = 0;GLvoid *font_style = GLUT_BITMAP_TIMES_ROMAN_10;voidsetfont(char* name, int size){    font_style = GLUT_BITMAP_HELVETICA_10;    if (strcmp(name, "helvetica") == 0) {        if (size == 12)             font_style = GLUT_BITMAP_HELVETICA_12;        else if (size == 18)            font_style = GLUT_BITMAP_HELVETICA_18;    } else if (strcmp(name, "times roman") == 0) {        font_style = GLUT_BITMAP_TIMES_ROMAN_10;        if (size == 24)            font_style = GLUT_BITMAP_TIMES_ROMAN_24;    } else if (strcmp(name, "8x13") == 0) {        font_style = GLUT_BITMAP_8_BY_13;    } else if (strcmp(name, "9x15") == 0) {        font_style = GLUT_BITMAP_9_BY_15;    }}void drawstr(GLuint x, GLuint y, char* format, ...){    va_list args;    char buffer[255], *s;        va_start(args, format);    vsprintf(buffer, format, args);    va_end(args);        glRasterPos2i(x, y);    for (s = buffer; *s; s++)        glutBitmapCharacter(font_style, *s);}voidcell_draw(cell* cell){    glColor3ub(0, 255, 128);    if (selection == cell->id) {        glColor3ub(255, 255, 0);        drawstr(10, 240, cell->info);        glColor3ub(255, 0, 0);    }        drawstr(cell->x, cell->y, cell->format, cell->value);}intcell_hit(cell* cell, int x, int y){    if (x > cell->x && x < cell->x + 60 &&        y > cell->y-30 && y < cell->y+10)        return cell->id;    return 0;}voidcell_update(cell* cell, int update){    if (selection != cell->id)        return;        cell->value += update * cell->step;        if (cell->value < cell->min)        cell->value = cell->min;    else if (cell->value > cell->max)         cell->value = cell->max;}voidcell_vector(float* dst, cell* cell, int num){    while (--num >= 0)        dst[num] = cell[num].value;}voiddrawmodel(void){    if (!pmodel) {        pmodel = glmReadOBJ("data/f-16.obj");        if (!pmodel) exit(0);        glmUnitize(pmodel);        glmFacetNormals(pmodel);        glmVertexNormals(pmodel, 90.0);    }        glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);}voidmain_reshape(int width,  int height) {    glViewport(0, 0, width, height);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluOrtho2D(0, width, height, 0);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();    #define GAP  25             /* gap between subwindows */    sub_width = (width-GAP*3)/2.0;    sub_height = (height-GAP*3)/2.0;        glutSetWindow(world);    glutPositionWindow(GAP, GAP);    glutReshapeWindow(sub_width, sub_height);    glutSetWindow(screen);    glutPositionWindow(GAP+sub_width+GAP, GAP);    glutReshapeWindow(sub_width, sub_height);    glutSetWindow(command);    glutPositionWindow(GAP, GAP+sub_height+GAP);    glutReshapeWindow(sub_width+GAP+sub_width, sub_height);}voidmain_display(void){    glClearColor(0.8, 0.8, 0.8, 0.0);    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glColor3ub(0, 0, 0);    setfont("helvetica", 12);    drawstr(GAP, GAP-5, "Fog equation");    drawstr(GAP+sub_width+GAP, GAP-5, "Screen-space view");    drawstr(GAP, GAP+sub_height+GAP-5, "Command manipulation window");    glutSwapBuffers();}voidmain_keyboard(unsigned char key, int x, int y){    switch (key) {    case 'l':        mode = GL_LINEAR;        break;    case 'e':        mode = GL_EXP;        break;    case 'x':        mode = GL_EXP2;        break;    case 'c':        clear = !clear;        break;    case 'r':        color[0].value = 0.7;        color[1].value = 0.7;        color[2].value = 0.7;        color[3].value = 1.0;        density.value = 1.0;        fstart.value = 0.5;        fend.value = 2.0;        break;    case 27:        exit(0);    }        redisplay_all();}voidworld_reshape(int width, int height){    glViewport(0, 0, width, height);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    glOrtho(0, width, height, 0, -1.0, 1.0);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();    glLineWidth(2.0);}voidworld_display(void){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);        glColor3ub(255, 255, 255);    setfont("helvetica", 18);        if (mode == GL_LINEAR) {        drawstr(100, 80, "end - z");        drawstr(30, 95, "f   = ");        drawstr(90, 110, "end - start");        glBegin(GL_LINE_STRIP);        glVertex2i(85, 90);        glVertex2i(185, 90);        glEnd();    } else {        drawstr(90, 80, "- (density * z)");        drawstr(30, 95, "f   =   e");        if (mode == GL_EXP2)            drawstr(208, 68, "2");    }        setfont("helvetica", 12);    drawstr(20, 180, "z is the distance in eye coordinates");    drawstr(20, 195, "from origin to fragment being fogged.");        glutSwapBuffers();}voidscreen_reshape(int width, int height){    float fog_color[4];        glViewport(0, 0, width, height);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluPerspective(60.0, (float)width/height, 0.5, 8.0);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();    gluLookAt(eye[0], eye[1], eye[2], at[0], at[1], at[2], up[0], up[1],up[2]);    if (clear)        glClearColor(color[0].value, color[1].value,         color[2].value, color[3].value);    else        glClearColor(0.2, 0.2, 0.2, 1.0);    glEnable(GL_DEPTH_TEST);    glEnable(GL_LIGHTING);    glEnable(GL_LIGHT0);    glEnable(GL_FOG);    glFogi(GL_FOG_MODE, mode);    glFogf(GL_FOG_START, fstart.value);    glFogf(GL_FOG_END, fend.value);    glFogf(GL_FOG_DENSITY, density.value);        cell_vector(fog_color, color, 4);    glFogfv(GL_FOG_COLOR, fog_color);}voidscreen_display(void){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    drawmodel();    glutSwapBuffers();}voidscreen_menu(int value){    char* name = 0;        switch (value) {    case 'a':        name = "data/al.obj";        break;    case 's':        name = "data/soccerball.obj";        break;    case 'd':        name = "data/dolphins.obj";        break;    case 'f':        name = "data/flowers.obj";        break;    case 'j':        name = "data/f-16.obj";        break;    case 'p':        name = "data/porsche.obj";        break;    case 'r':        name = "data/rose+vase.obj";        break;    }        if (name) {        pmodel = glmReadOBJ(name);        if (!pmodel) exit(0);        glmUnitize(pmodel);        glmFacetNormals(pmodel);        glmVertexNormals(pmodel, 90.0);    }        redisplay_all();}voidcommand_reshape(int width, int height){    glViewport(0, 0, width, height);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluOrtho2D(0, width, height, 0);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();    glClearColor(0.0, 0.0, 0.0, 0.0);}voidcommand_display(void){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);        glColor3ub(255, 255, 255);    setfont("helvetica", 18);    drawstr(20, color[0].y, "GLfloat color[4] = {");    drawstr(230, color[0].y, ",");    drawstr(290, color[0].y, ",");     drawstr(350, color[0].y, ",");    drawstr(410, color[0].y, "};");    drawstr(20, 80, "glFogfv(GL_FOG_COLOR, color);");    if (mode == GL_LINEAR) {        drawstr(20, fstart.y, "glFogf(GL_FOG_START, ");        drawstr(290, fstart.y, ");");        drawstr(20, fend.y, "glFogf(GL_FOG_END, ");        drawstr(290, fend.y, ");");    } else {        drawstr(20, density.y, "glFogf(GL_FOG_DENSITY, ");        drawstr(310, density.y, ");");    }    drawstr(20, 200, "glFogi(GL_FOG_MODE, %s);",         mode == GL_LINEAR ? "GL_LINEAR" :     mode == GL_EXP ? "GL_EXP" : "GL_EXP2");        cell_draw(&color[0]);    cell_draw(&color[1]);    cell_draw(&color[2]);    cell_draw(&color[3]);        if (mode == GL_LINEAR) {        cell_draw(&fstart);        cell_draw(&fend);    } else {        cell_draw(&density);    }        if (!selection) {        glColor3ub(255, 255, 0);        drawstr(10, 240,            "Click on the arguments and move the mouse to modify values.");    }           glutSwapBuffers();}int old_y;voidcommand_mouse(int button, int state, int x, int y){    selection = 0;        if (state == GLUT_DOWN) {    /* mouse should only hit _one_ of the cells, so adding up all        the hits just propagates a single hit. */        selection += cell_hit(&color[0], x, y);        selection += cell_hit(&color[1], x, y);        selection += cell_hit(&color[2], x, y);        selection += cell_hit(&color[3], x, y);        if (mode == GL_LINEAR) {            selection += cell_hit(&fstart, x, y);            selection += cell_hit(&fend, x, y);        } else {            selection += cell_hit(&density, x, y);        }    }        old_y = y;        redisplay_all();}voidcommand_motion(int x, int y){    cell_update(&color[0], old_y-y);    cell_update(&color[1], old_y-y);    cell_update(&color[2], old_y-y);    cell_update(&color[3], old_y-y);    cell_update(&fstart, old_y-y);    cell_update(&fend, old_y-y);    cell_update(&density, old_y-y);        old_y = y;        redisplay_all();}voidcommand_menu(int value){    main_keyboard((unsigned char)value, 0, 0);}voidredisplay_all(void){    glutSetWindow(command);    glutPostRedisplay();    glutSetWindow(world);    world_reshape(sub_width, sub_height);    glutPostRedisplay();    glutSetWindow(screen);    screen_reshape(sub_width, sub_height);    glutPostRedisplay();}intmain(int argc, char** argv){    glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);    glutInitWindowSize(512+GAP*3, 512+GAP*3);    glutInitWindowPosition(50, 50);    glutInit(&argc, argv);        window = glutCreateWindow("Fog");    glutReshapeFunc(main_reshape);    glutDisplayFunc(main_display);    glutKeyboardFunc(main_keyboard);        world = glutCreateSubWindow(window, GAP, GAP, 256, 256);    glutReshapeFunc(world_reshape);    glutDisplayFunc(world_display);    glutKeyboardFunc(main_keyboard);        screen = glutCreateSubWindow(window, GAP+256+GAP, GAP, 256, 256);    glutReshapeFunc(screen_reshape);    glutDisplayFunc(screen_display);    glutKeyboardFunc(main_keyboard);    glutCreateMenu(screen_menu);    glutAddMenuEntry("Models", 0);    glutAddMenuEntry("", 0);    glutAddMenuEntry("Soccerball", 's');    glutAddMenuEntry("Al Capone", 'a');    glutAddMenuEntry("F-16 Jet", 'j');    glutAddMenuEntry("Dolphins", 'd');    glutAddMenuEntry("Flowers", 'f');    glutAddMenuEntry("Porsche", 'p');    glutAddMenuEntry("Rose", 'r');    glutAttachMenu(GLUT_RIGHT_BUTTON);        command = glutCreateSubWindow(window, GAP+256+GAP, GAP+256+GAP, 256, 256);    glutReshapeFunc(command_reshape);    glutDisplayFunc(command_display);    glutMotionFunc(command_motion);    glutMouseFunc(command_mouse);    glutKeyboardFunc(main_keyboard);    glutCreateMenu(command_menu);    glutAddMenuEntry("Fog", 0);    glutAddMenuEntry("", 0);    glutAddMenuEntry("[l]  GL_LINEAR", 'l');    glutAddMenuEntry("[e]  GL_EXP", 'e');    glutAddMenuEntry("[x]  GL_EXP2", 'x');    glutAddMenuEntry("[c]  Clear color toggle", 'c');    glutAddMenuEntry("[r]  Reset parameters", 'r');    glutAddMenuEntry("", 0);    glutAddMenuEntry("Quit", 27);    glutAttachMenu(GLUT_RIGHT_BUTTON);        redisplay_all();        glutMainLoop();        return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国精品国产| 在线不卡中文字幕| 精品三级av在线| 亚洲一本大道在线| 国产一区二区h| 久久国产精品72免费观看| 成人99免费视频| 日韩欧美的一区| 亚洲自拍偷拍图区| jlzzjlzz亚洲日本少妇| 精品福利一区二区三区| 五月婷婷久久综合| 一本到三区不卡视频| 中文字幕免费不卡在线| 精品一区二区三区视频| 91精品国产色综合久久不卡蜜臀 | 狠狠色丁香久久婷婷综合丁香| 色综合天天综合色综合av| 国产午夜精品一区二区三区嫩草| 美女网站一区二区| 4438x成人网最大色成网站| 亚洲一区二区三区美女| 91污在线观看| 亚洲少妇最新在线视频| 成人一区二区三区在线观看| 久久精品视频免费| 国产伦理精品不卡| 欧美精品一区二区久久婷婷| 捆绑调教一区二区三区| 欧美一级理论性理论a| 天天影视网天天综合色在线播放| 在线观看免费成人| 精品一区二区三区在线观看国产 | 国产精品白丝jk白祙喷水网站| 日韩欧美国产综合在线一区二区三区| 亚洲最大成人网4388xx| 色天使色偷偷av一区二区| 亚洲激情校园春色| 欧美中文字幕不卡| 亚洲国产精品综合小说图片区| 91福利精品视频| 亚洲自拍欧美精品| 欧美日精品一区视频| 亚洲1区2区3区视频| 制服丝袜一区二区三区| 日本vs亚洲vs韩国一区三区| 日韩丝袜美女视频| 精品综合久久久久久8888| wwwwxxxxx欧美| 国产成人av在线影院| 国产精品三级在线观看| 99久久精品久久久久久清纯| 亚洲美女免费视频| 欧美日韩在线直播| 日本aⅴ免费视频一区二区三区| 日韩你懂的在线播放| 国产综合成人久久大片91| 日本一区二区三区久久久久久久久不 | 蜜桃一区二区三区在线观看| 欧美电视剧在线看免费| 国产精品一二三四五| 国产精品成人午夜| 日本道色综合久久| 日精品一区二区| 精品理论电影在线观看| 成人妖精视频yjsp地址| 亚洲欧美aⅴ...| 欧美高清视频一二三区| 久久精品99久久久| 国产精品你懂的在线欣赏| 91成人免费在线| 日韩高清欧美激情| 精品国产人成亚洲区| 国产一区二区在线免费观看| 国产日韩精品一区二区三区 | 日韩一区和二区| 国产欧美日本一区视频| 成人免费高清视频在线观看| 国产精品日韩成人| 欧美色网一区二区| 免费黄网站欧美| 国产精品久久久久四虎| 97久久精品人人做人人爽50路| 久久久久久免费毛片精品| 97精品视频在线观看自产线路二| 成人欧美一区二区三区视频网页| 久久www免费人成看片高清| 欧美在线你懂得| 蜜臀av在线播放一区二区三区| 久久久www成人免费毛片麻豆| 五月天视频一区| 精品奇米国产一区二区三区| 久久午夜羞羞影院免费观看| 国产精品一区一区三区| 国产日韩欧美精品综合| 麻豆91免费观看| 日韩一卡二卡三卡四卡| √…a在线天堂一区| 国产在线观看免费一区| 久久久久久久久久久久电影 | 最新不卡av在线| 一区二区不卡在线播放| 高清不卡一区二区在线| 在线观看免费视频综合| 欧美一区二区三区在线电影| 精品中文字幕一区二区小辣椒 | 欧美精品一区二区三区四区| 丁香五精品蜜臀久久久久99网站| 亚洲欧洲精品成人久久奇米网| 色94色欧美sute亚洲线路二| 欧美一区二区三区思思人| 欧美日韩亚洲不卡| 欧美日韩激情一区二区| 在线观看日韩国产| 久久久亚洲精品一区二区三区| 亚洲男同性恋视频| 欧美无人高清视频在线观看| 青青青爽久久午夜综合久久午夜| 91精品国产欧美一区二区成人 | 日韩国产欧美在线观看| 中文字幕第一区二区| 久久你懂得1024| 亚洲免费av高清| 色偷偷成人一区二区三区91| 一区二区三区中文字幕精品精品 | 日本一不卡视频| 成人午夜电影小说| 欧美三级资源在线| 91美女在线看| 97国产精品videossex| 欧美亚洲国产bt| 亚洲欧洲成人精品av97| 欧美午夜免费电影| 久久久久久久电影| 亚洲影视在线播放| 91蜜桃视频在线| 亚洲午夜成aⅴ人片| 欧美精品1区2区3区| 一个色妞综合视频在线观看| 91国产福利在线| 美女看a上一区| 韩日av一区二区| 国产日韩精品一区二区浪潮av| 91国产丝袜在线播放| 免费看欧美女人艹b| 99久久精品久久久久久清纯| 麻豆视频一区二区| 欧美成人vps| 欧美一区二区三区男人的天堂| 99精品久久只有精品| 在线播放中文字幕一区| 国产一区二区三区高清播放| 久久国产精品第一页| 亚洲午夜视频在线| 欧美剧情片在线观看| 一区二区在线观看视频| 欧美日韩免费在线视频| 91色porny在线视频| 成人免费看的视频| ww久久中文字幕| 麻豆精品一二三| 精品一区二区免费看| 一区二区三区日韩精品| 国产精品灌醉下药二区| 欧美三级乱人伦电影| 国产精品一区二区你懂的| 国产高清在线精品| 久久伊人中文字幕| 成人h动漫精品一区二区| 国产成人亚洲综合色影视| 亚洲成av人片一区二区三区 | 亚洲色图欧美偷拍| 欧美精品日韩综合在线| aaa国产一区| 一区二区中文视频| 久久久三级国产网站| 国产馆精品极品| 亚洲777理论| 91电影在线观看| 久久久久久久性| 丰满亚洲少妇av| 国产欧美一区二区三区网站| 色美美综合视频| 色婷婷精品大视频在线蜜桃视频| 日韩成人免费电影| 一区二区三区四区精品在线视频 | 精品一区二区三区免费| 久久99国产精品成人| 亚洲永久精品国产| 日韩精品在线网站| 久久午夜老司机| 亚洲日本成人在线观看| 午夜激情一区二区三区| 欧美大片在线观看| 免费观看日韩电影| 欧美男男青年gay1069videost| 日韩码欧中文字| 精品国产露脸精彩对白| 成人免费在线观看入口| 久久久国产综合精品女国产盗摄|