• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Cpper
            C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
            首先上代碼吧
            個人感覺寫的很清爽
            /*!==========================================================================
             *
             *  蓋莫游戲引擎(GaiMo Game Engine)
             *
             *  版權所有 (C) 2009-2009 成都蓋莫軟件技術工作室 保留所有權利
             *  Copyright (C) 成都蓋莫軟件技術工作室.  All Rights Reserved.
             *
             *  了解更多情況,請訪問 
            http://www.gaimo.net
             ***************************************************************************
            */
            //! 本demo測試引擎渲染到紋理功能
            #include <iostream>
            #include 
            <GEngine/Header_Config.hpp>

            using namespace std;
            using namespace core;

            #define FRAME_NUMBER 12

            //! 定義圖形紋理指針
            RefPtr<core::Texture>  texture_ptr[FRAME_NUMBER];
            //! 渲染到紋理指針
            RefPtr<Renderable> rendertotexture;
            core::TextDesc
            * text = NULL;
            Matrix4f mat;
            float pos[] = {0,0,0};
            float length[] = {16,16,16};
            void  CreateTexture();
            void  InitCamera();
            void  Render();

            int main(int argc, char *argv[])
            {
                
            //! 窗體描述符
                ScreenDesc desc;
                desc.name_ 
            = "RenderToTextureTest";
                
            //! 生成窗體
                RefPtr<Screen> screen = CreateScreen(desc);

                
            //! 生成紋理
                CreateTexture();

                
            //! 初始化攝像機
                InitCamera();

                
            while(screen->IsOpen())
                {
                    Render();
                }

                DestroyScreen();
                
            return EXIT_SUCCESS;
            }

            //! 構造紋理
            void CreateTexture()
            {
                
            //! 載入資源包
                GLOBAL_FILESYSTEM_PTR->RegisterPackage("..\\package\\logo.zip");
                RefPtr
            <core::ReadFile> imagefile;

                RefPtr
            <Image> image[FRAME_NUMBER];
                
            for(int i = 0;i < FRAME_NUMBER ;i++)
                {
                    std::
            string name = ToString<int>(i);
                    imagefile 
            = GLOBAL_FILESYSTEM_PTR->GetRead("logo.jpg");
                    image[i] 
            = GLOBAL_IMAGEMANAGER_PTR->CreateImage(name,imagefile);
                }

                
            //! 反色
                image[0]->GetInvertImage();
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(0),image[0]);
                
            //! 水平翻轉
                image[1]->FlipImage(Image::IMAGE_FLIP_X);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(1),image[1]);
                
            //! 豎直翻轉
                image[2]->FlipImage(Image::IMAGE_FLIP_Y);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(2),image[2]);
                
            //! Gamma調整
                image[3]->AdjustGamma(0.4);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(3),image[3]);
                
            //! 亮度調整
                image[4]->AdjustBrightness(0.4);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(4),image[4]);
                
            //! 對比度調整
                image[5]->AdjustContrast(0.6);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(5),image[5]);
                
            //! 翻轉
                image[6]->FlipImage(Image::IMAGE_FLIP_XY);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(6),image[6]);
                
            //! 旋轉
                image[7]->RotatedImage(Image::IMAGE_ROTATE_90);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(7),image[7]);
                
            //! Gamma調整
                image[8]->AdjustGamma(0.1);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(8),image[8]);
                
            //! 亮度調整
                image[9]->AdjustBrightness(0.8);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(9),image[9]);
                
            //! 對比度調整
                image[10]->AdjustContrast(0.3);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(10),image[10]);
                GLOBAL_TEXTUREMANAGER_PTR
            ->CreateTexture2(ToString<int>(11),image[11]);

                
            for(int i = 0; i < FRAME_NUMBER; i++)
                {
                    
            //! 紋理構建
                    GLOBAL_TEXTUREMANAGER_PTR->GetObject(ToString<int>(i))->Generate();
                }

                text 
            = new core::TextDesc("..\\package\\accid.ttf",12,0,0,3,Color::Cyan);
                text
            ->SetText(engine_wstring(L"maker:gaimosoft,ccsdu2004@yahoo.com.cn"));

                
            //! 獲取渲染到紋理指針
                rendertotexture = GLOBAL_RENDERER_PTR->GetRenderToTexture(640,480,GL_RGBA,GL_FLOAT);

                glEnable(GL_DEPTH_TEST);
            }

            void InitCamera()
            {
                RefPtr
            <Camera> orthocamera = GLOBAL_CAMERAMANAGER_PTR->CreateCamera("orthocamera");
                orthocamera
            ->SetOrtho(0,640,480,0,-1.2,0.8);
                RefPtr
            <Camera> camera = GLOBAL_CAMERAMANAGER_PTR->GetActiveCamera();
                camera
            ->GetViewPort()->Render();
                camera
            ->SetPerspective(45.0f,640.0f/480.0f,1.0f,600.0f);
                camera
            ->SetPosition(Vector3f(20,20,20));
                camera
            ->SetView(Vector3f());
                camera
            ->ApplayProjectMatrix();
            }

            void RenderTexture()
            {
                std::
            string texturename;
                
            for(int i = 0; i < FRAME_NUMBER; i++)
                {
                    texturename 
            = ToString<int>(i);
                    GLOBAL_TEXTUREMANAGER_PTR
            ->GetObject(texturename)->AttachRenderTarget();
                    UI_Brush::RenderTexture((i
            %4)*160,(i/4)*160,160,160);
                }
            }

            //! 處理鼠標響應
            void MouseCheck()
            {
                
            if(GLOBAL_INPUT_PTR->IsPressedKey(KEY_F1))
                {
                    mat
            *=mat.Rotate((rand()%200)/900.0f,1,0,0);
                }
                
            else if(GLOBAL_INPUT_PTR->IsPressedKey(KEY_F2))
                {
                    mat
            *=mat.Rotate((rand()%200)/900.0f,0,1,0);
                }
                
            else if(GLOBAL_INPUT_PTR->IsPressedKey(KEY_F3))
                {
                    mat
            *=mat.Rotate((rand()%200)/900.0f,0,0,1);
                }
            }

            void RenderText()
            {
                UI_Brush::PreRender();
                
            static int offset = 0;
                text
            ->Render(Rectf(offset,460,400,20));
                offset 
            ++;
                
            if(offset >= 600)
                    offset 
            = -500;
                UI_Brush::PostRender();
            }

            void RenderToTexture()
            {
                rendertotexture
            ->BeginRender();
                GLOBAL_RENDERER_PTR
            ->Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                GLOBAL_CAMERAMANAGER_PTR
            ->GetObject("orthocamera")->ApplayProjectMatrix();
                RenderTexture();
                RenderText();
                rendertotexture
            ->AfterRender();
            }

            void RenderToScreen()
            {
                GLOBAL_RENDERER_PTR
            ->Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                GLOBAL_CAMERAMANAGER_PTR
            ->GetActiveCamera()->ApplayProjectMatrix();
                GLOBAL_CAMERAMANAGER_PTR
            ->GetActiveCamera()->ApplayViewMatrix();
                GLOBAL_RENDERER_PTR
            ->DrawCube(pos,mat.ptr(),length);
            }

            void Render()
            {
                MouseCheck();
                RenderToTexture();
                RenderToScreen();
            }

            基本步驟就是生成窗體
            初始化攝像機
            生成紋理
            渲染到紋理
            渲染到窗體
            完了

            圖圖如下:
            似乎我比較喜歡貼立方體啊 呵呵
            posted on 2010-09-17 18:22 ccsdu2009 閱讀(508) 評論(0)  編輯 收藏 引用 所屬分類: Game引擎
             
            大香网伊人久久综合网2020| 精品久久久无码人妻中文字幕| 久久久久人妻一区二区三区| 亚洲精品乱码久久久久久蜜桃图片 | 四虎影视久久久免费| 久久精品国产WWW456C0M| 狠狠色婷婷久久一区二区| 香蕉久久夜色精品升级完成| 99久久国产热无码精品免费| 国产日韩久久久精品影院首页| 欧美久久天天综合香蕉伊| 无码人妻久久一区二区三区| 亚洲乱亚洲乱淫久久| 中文成人久久久久影院免费观看| 久久精品无码专区免费东京热 | AA级片免费看视频久久| 亚洲国产精品无码久久九九 | 精品久久久久久综合日本| 四虎国产精品免费久久| 2022年国产精品久久久久| 伊人久久精品影院| 日韩亚洲欧美久久久www综合网 | 久久久久四虎国产精品| 蜜臀久久99精品久久久久久| 少妇内射兰兰久久| 四虎国产精品成人免费久久| 久久99毛片免费观看不卡| 久久久亚洲AV波多野结衣| 久久久WWW成人免费精品| 国产精品九九九久久九九| 久久久久久久久久久| 久久精品国产第一区二区| 国产亚洲欧美成人久久片| 久久夜色精品国产网站| 伊人久久综合无码成人网| 午夜精品久久久久9999高清| 国产女人aaa级久久久级| 91久久国产视频| 久久国产高清一区二区三区| 国产精品久久久久乳精品爆| 狠狠色丁香久久综合婷婷|