• <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引擎
             
            久久久久人妻精品一区二区三区 | 日本一区精品久久久久影院| 久久久久高潮毛片免费全部播放| 久久国产高潮流白浆免费观看| 国产精品一区二区久久| 国产精品禁18久久久夂久| 久久综合狠狠综合久久| 久久亚洲国产中v天仙www| 久久精品国产只有精品66| 欧美日韩精品久久免费| 人妻精品久久久久中文字幕一冢本| 久久ZYZ资源站无码中文动漫| 亚洲欧美精品伊人久久| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产2021久久精品| 久久久久人妻一区二区三区| 99麻豆久久久国产精品免费| 久久久久国色AV免费看图片| 国产婷婷成人久久Av免费高清| 久久久久综合国产欧美一区二区| 少妇久久久久久久久久| 久久久久国产亚洲AV麻豆| 国产精品久久亚洲不卡动漫| 午夜精品久久久久久中宇| 久久伊人五月天论坛| 蜜桃麻豆www久久| 国产欧美久久久精品| 久久婷婷五月综合97色一本一本| 狠狠色丁香婷婷久久综合| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 精品久久久久久久中文字幕| 久久国产色AV免费观看| 色妞色综合久久夜夜| 亚洲国产成人精品91久久久| 久久久久综合中文字幕| 久久99国产精品成人欧美| 亚洲综合久久综合激情久久| 99久久精品国产毛片| 久久综合综合久久97色| 国产成人久久精品二区三区| 99久久国产综合精品网成人影院|