• <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引擎
             
            久久亚洲精品国产精品婷婷| 99久久精品国产高清一区二区| 无码8090精品久久一区| 热99RE久久精品这里都是精品免费 | 久久久一本精品99久久精品88| 久久久国产精品福利免费| 久久久久国产| 久久人人爽人人爽人人片AV不| 久久久受www免费人成| 久久久久99精品成人片欧美| 色天使久久综合网天天| 久久精品国产99国产精品澳门| 偷窥少妇久久久久久久久| 亚洲欧美日韩精品久久| 亚洲色大成网站WWW久久九九| 国产福利电影一区二区三区久久老子无码午夜伦不 | 日韩精品久久久久久| 午夜天堂精品久久久久| 三级韩国一区久久二区综合| 久久Av无码精品人妻系列| 精品伊人久久久| 无码任你躁久久久久久| 97超级碰碰碰碰久久久久| 精品久久久久久成人AV| 色欲综合久久躁天天躁蜜桃| 久久久午夜精品| 亚洲Av无码国产情品久久| 久久精品成人一区二区三区| 久久亚洲综合色一区二区三区| 久久精品国产99久久无毒不卡| 亚洲国产精品18久久久久久| 18禁黄久久久AAA片| 亚洲婷婷国产精品电影人久久| 久久久久国产亚洲AV麻豆| 久久本道久久综合伊人| 国产激情久久久久影院小草| 99久久99久久精品国产片| 中文精品久久久久国产网址 | 久久久久久久综合综合狠狠| 久久综合九色综合久99| 日本三级久久网|