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

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

?? main.cpp

?? G3D游戲引擎的庫
?? CPP
字號:
/**
  @file shader/main.cpp

  Example of G3D shaders and GUIs.
  @author Morgan McGuire, morgan@cs.williams.edu
 */
#include <G3D/G3DAll.h>
#include <GLG3D/GLG3D.h>

class App : public GApp {
private:
    /** Lighting environment */
    LightingRef         lighting;
    SkyParameters       skyParameters;
    SkyRef              sky;

    /** For dragging the model */
    ThirdPersonManipulatorRef manipulator;
    IFSModelRef         model;

    /** Material properties and shader */
    ShaderRef           phongShader;
    float               reflect;
    float               shine;
    float               diffuse;
    float               specular;
    int                 diffuseColorIndex;
    int                 specularColorIndex;
    Array<GuiCaption>   colorList;

    void makeGui();
    void makeColorList(GFontRef iconFont);
    void configureShaderArgs(const LightingRef localLighting);

public:

    App(const GApp::Settings& settings = GApp::Settings());

    virtual void onInit();
    virtual void onGraphics(RenderDevice* rd, Array<PosedModelRef>& posed3D, Array<PosedModel2DRef>& posed2D);
};

App::App(const GApp::Settings& settings) : GApp(settings), reflect(0.1f), shine(20.0f), diffuse(0.6f), specular(0.5f) {}

void App::onInit() {
    window()->setCaption("G3D Shader Demo");

    // Called before the application loop beings.  Load data here
    // and not in the constructor so that common exceptions will be
    // automatically caught.
    sky = Sky::fromFile(dataDir + "sky/");

    skyParameters = SkyParameters(G3D::toSeconds(11, 00, 00, AM));
    lighting = Lighting::fromSky(sky, skyParameters, Color3::white());

    // This simple demo has no shadowing, so make all lights unshadowed
    lighting->lightArray.append(lighting->shadowedLightArray);
    lighting->shadowedLightArray.clear();
    setDesiredFrameRate(60);

#   ifdef G3D_WIN32
        if (! fileExists("phong.pix", false) && fileExists("G3D.sln", false)) {
            // Running in the solution directory
            chdir("../demos/shader/data-files");
        }
        toneMap->setEnabled(true);
#   else
        toneMap->setEnabled(false);
#   endif

    phongShader = Shader::fromFiles("phong.vrt", "phong.pix");
    model = IFSModel::fromFile(System::findDataFile("teapot.ifs"));

    makeColorList(GFont::fromFile(System::findDataFile("icon.fnt")));
    makeGui();

    // Color 1 is red
    diffuseColorIndex = 1;
    // Last color is white
    specularColorIndex = colorList.size() - 1;
    
    defaultCamera.setPosition(Vector3(1.0f, 1.0f, 2.5f));
    defaultCamera.lookAt(Vector3::zero());

    // Add axes for dragging and turning the model
    manipulator = ThirdPersonManipulator::create();
    addWidget(manipulator);

    // Turn off the default first-person camera controller and developer UI
    defaultController->setActive(false);
    developerWindow->setVisible(false);
}

void App::makeColorList(GFontRef iconFont) {
    // Characters in icon font that make a solid block of color
    const char* block = "gggggg";

    float size = 18;
    int N = 10;
    colorList.append(GuiCaption(block, iconFont, size, Color3::black(), Color4::clear()));
    for (int i = 0; i < N; ++i) {
        colorList.append(GuiCaption(block, iconFont, size, Color3::rainbowColorMap((float)i / N), Color4::clear()));
    }
    colorList.append(GuiCaption(block, iconFont, size, Color3::white(), Color4::clear()));
}

void App::makeGui() {
    GuiThemeRef skin = GuiTheme::fromFile(System::findDataFile("osx.skn"), debugFont);
    GuiWindow::Ref gui = GuiWindow::create("Material Parameters", skin);
    
    GuiPane* pane = gui->pane();
    pane->addDropDownList("Diffuse", &diffuseColorIndex, &colorList);
    pane->addSlider("Intensity", &diffuse, 0.0f, 1.0f);
    
    pane->addDropDownList("Specular", &specularColorIndex, &colorList);
    pane->addSlider("Intensity", &specular, 0.0f, 1.0f);
    
    pane->addSlider("Shininess", &shine, 1.0f, 100.0f);
    pane->addSlider("Reflectivity", &reflect, 0.0f, 1.0f);
    
    addWidget(gui);
}

void App::onGraphics(RenderDevice* rd, Array<PosedModelRef>& posed3D, Array<PosedModel2DRef>& posed2D) {
    toneMap->beginFrame(rd);

    LightingRef   localLighting = toneMap->prepareLighting(lighting);
    SkyParameters localSky      = toneMap->prepareSkyParameters(skyParameters);
    
    rd->setProjectionAndCameraMatrix(defaultCamera);

    rd->setColorClearValue(Color3(0.1f, 0.5f, 1.0f));
    rd->clear(false, true, true);
    sky->render(rd, localSky);

    //////////////////////////////////////////////////////////////////////
    // Shader example

    rd->pushState();
        // Pose our model based on the manipulator axes
        PosedModel::Ref posedModel = model->pose(manipulator->frame());
        
        // Enable the sahder
        configureShaderArgs(localLighting);
        rd->setShader(phongShader);

        // Send model geometry to the graphics card
        rd->setObjectToWorldMatrix(posedModel->coordinateFrame());
        posedModel->sendGeometry(rd);
    rd->popState();

    //////////////////////////////////////////////////////////////////////
    // Normal rendering loop boilerplate

    // Process the installed widgets.

    Array<PosedModel::Ref> opaque, transparent; 

    // Use fixed-function lighting for the 3D widgets for convenience.
    rd->pushState();
        rd->enableLighting();
        rd->setLight(0, localLighting->lightArray[0]);
        rd->setAmbientLightColor(localLighting->ambientAverage());

        // 3D
        if (posed3D.size() > 0) {
            Vector3 lookVector = renderDevice->getCameraToWorldMatrix().lookVector();
            PosedModel::sort(posed3D, lookVector, opaque, transparent);

            for (int i = 0; i < opaque.size(); ++i) {
                opaque[i]->render(renderDevice);
            }

            for (int i = 0; i < transparent.size(); ++i) {
                transparent[i]->render(renderDevice);
            }
        }
    rd->popState();

    // Don't apply the tone map to the 2D widgets
    toneMap->endFrame(rd);

    PosedModel2D::sortAndRender(rd, posed2D);

    sky->renderLensFlare(rd, localSky);
}

void App::configureShaderArgs(const LightingRef lighting) {
	const GLight& light = lighting->lightArray[0]; 

	phongShader->args.set("wsLight", light.position.xyz().direction());
	phongShader->args.set("lightColor", light.color);
	phongShader->args.set("wsEyePosition", defaultCamera.coordinateFrame().translation);
	phongShader->args.set("ambientLightColor", lighting->ambientAverage());

	Color3 color = colorList[diffuseColorIndex].color(Color3::white()).rgb();
	phongShader->args.set("diffuseColor", color);
	phongShader->args.set("diffuse", diffuse);

	color = colorList[specularColorIndex].color(Color3::white()).rgb();
	phongShader->args.set("specularColor", color);
	phongShader->args.set("specular", specular);
	phongShader->args.set("shine", shine);
	phongShader->args.set("reflect", reflect);

	phongShader->args.set("environmentMap", lighting->environmentMap);
	phongShader->args.set("environmentMapColor", lighting->environmentMapColor);
}

G3D_START_AT_MAIN();

int main(int argc, char** argv) {
    return App().run();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦理精品不卡| 五月综合激情日本mⅴ| 国产91精品在线观看| 久久久久国产精品人| 国产一区二区三区香蕉| 精品国产人成亚洲区| 国产成人av资源| 国产精品三级视频| 欧美午夜电影在线播放| 久久成人免费网| 国产色91在线| 在线精品观看国产| 青青草原综合久久大伊人精品优势| 26uuu亚洲综合色| 成人激情黄色小说| 午夜久久久久久| 久久久亚洲欧洲日产国码αv| 成人午夜电影久久影院| 亚洲自拍都市欧美小说| 日韩亚洲欧美综合| 国产成a人亚洲精品| 一区二区日韩电影| 精品福利在线导航| 91在线观看污| 久久精品99国产国产精| 亚洲三级在线看| 欧美成人精品3d动漫h| 97精品久久久久中文字幕| 日韩不卡一区二区三区| 中文幕一区二区三区久久蜜桃| 欧美在线视频你懂得| 激情综合网激情| 亚洲午夜久久久久久久久久久 | 日韩国产欧美在线观看| 久久九九国产精品| 欧美日韩三级在线| 成人免费视频国产在线观看| 婷婷六月综合亚洲| 最新日韩在线视频| 精品久久久久久久人人人人传媒| 色综合久久久久综合体| 国产一区二区三区观看| 天天综合色天天| 亚洲私人影院在线观看| 久久精品夜色噜噜亚洲a∨| 欧美日韩国产精品自在自线| 99久久er热在这里只有精品15 | 中文字幕一区二区三区色视频| 制服丝袜国产精品| 欧美婷婷六月丁香综合色| 成人激情图片网| 国产成人精品一区二| 免费看欧美美女黄的网站| 一区二区不卡在线视频 午夜欧美不卡在 | 国产视频不卡一区| 日韩视频永久免费| 欧美精品国产精品| 欧美天堂亚洲电影院在线播放| 99久久免费国产| 99久久精品免费观看| 国产成人精品免费一区二区| 极品少妇xxxx精品少妇偷拍| 午夜精品久久久久久久99樱桃| 亚洲欧洲综合另类在线| 一区视频在线播放| 亚洲国产精品99久久久久久久久| 亚洲精品一区二区三区香蕉| 欧美一级欧美一级在线播放| 欧美日韩国产影片| 欧美日韩视频一区二区| 欧美片网站yy| 91精品国产一区二区三区蜜臀| 欧美精品三级日韩久久| 777午夜精品免费视频| 欧美欧美午夜aⅴ在线观看| 欧美日韩精品福利| 9191久久久久久久久久久| 欧美三级在线播放| 欧美日韩国产精选| 日韩午夜在线播放| 久久久www成人免费无遮挡大片| 久久午夜色播影院免费高清| 久久精品在线观看| 欧美国产激情二区三区| 国产精品第一页第二页第三页| 成人免费一区二区三区在线观看| 亚洲人妖av一区二区| 伊人开心综合网| 亚洲成人精品在线观看| 蜜桃视频一区二区三区 | 成人免费一区二区三区视频| 亚洲九九爱视频| 亚洲国产精品一区二区尤物区| 首页亚洲欧美制服丝腿| 九一久久久久久| 成a人片亚洲日本久久| 色综合久久精品| 制服丝袜亚洲网站| 久久先锋影音av鲁色资源网| 《视频一区视频二区| 亚洲国产欧美在线人成| 九九精品视频在线看| 成人国产亚洲欧美成人综合网 | 欧美一区二区三区啪啪| 久久蜜桃香蕉精品一区二区三区| 中文字幕永久在线不卡| 亚洲观看高清完整版在线观看| 久久国产精品第一页| 不卡av免费在线观看| 欧美美女喷水视频| 久久久久久久久蜜桃| 亚洲精品国产高清久久伦理二区| 日韩成人av影视| 成人h版在线观看| 欧美男男青年gay1069videost | 亚洲欧美综合色| 日韩二区三区在线观看| 成人性生交大片免费看中文网站| 欧美在线观看视频一区二区| 久久久久亚洲综合| 亚洲福利视频一区二区| 大白屁股一区二区视频| 69堂精品视频| 亚洲欧洲国产专区| 国产精品一区二区视频| 欧美日韩国产一区| 亚洲三级在线看| 国产一区二区三区电影在线观看| 91国偷自产一区二区使用方法| 久久久久亚洲蜜桃| 日韩一区精品视频| 色噜噜久久综合| 久久九九99视频| 日韩电影在线一区| 在线观看亚洲一区| 国产精品久久久久影院亚瑟| 蜜桃免费网站一区二区三区| 91在线观看高清| 国产欧美一区二区在线| 久久激情五月婷婷| 欧美日韩黄色一区二区| 一二三区精品福利视频| 成人性色生活片| 国产亚洲综合性久久久影院| 免费成人在线观看| 欧美精品777| 亚洲国产裸拍裸体视频在线观看乱了| 成人高清在线视频| 国产亚洲成av人在线观看导航 | 欧美高清视频www夜色资源网| 中文字幕字幕中文在线中不卡视频| 国产一区在线看| 精品日韩欧美在线| 美女看a上一区| 日韩欧美一区二区三区在线| 亚洲成人1区2区| 欧美色综合网站| 亚洲一区二区精品视频| 一本在线高清不卡dvd| 最新中文字幕一区二区三区 | 亚洲一区二区三区视频在线 | 国产91在线看| 国产精品亲子伦对白| 国产suv精品一区二区6| 2023国产精品自拍| 国产一区高清在线| 国产亚洲精品7777| 成人一区二区视频| 亚洲欧洲韩国日本视频| 色综合欧美在线| 亚洲永久精品大片| 欧美性做爰猛烈叫床潮| 亚洲成人手机在线| 日韩一区二区在线看片| 精彩视频一区二区| 国产婷婷一区二区| 97se亚洲国产综合在线| 亚洲激情图片小说视频| 欧美在线观看视频一区二区| 日韩成人一区二区三区在线观看| 欧美日韩免费高清一区色橹橹| 日韩vs国产vs欧美| 久久伊99综合婷婷久久伊| 高清av一区二区| 一区视频在线播放| 911精品国产一区二区在线| 日本欧美加勒比视频| 国产日韩成人精品| 日本精品免费观看高清观看| 日韩黄色一级片| 久久久综合精品| 欧洲精品一区二区| 日本成人在线电影网| 精品va天堂亚洲国产| 97精品久久久久中文字幕| 三级在线观看一区二区| 国产亚洲精品bt天堂精选| 在线中文字幕一区| 激情综合网av| 亚洲一区在线电影|