• <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等多種語言 程序猿
            這幾天忙著做項目 引擎進度緩慢
            先上封轉的GLSL吧(這個是從網上找的一段代碼修改的)
            如下:
             1 ////////////////////////////////////////////////////////////
             2 /// GL著色器基類
             3 ////////////////////////////////////////////////////////////
             4 class GLSLShader : public Object 
             5 {
             6 public:
             7     ////////////////////////////////////////////////////////
             8     /// 構造,析構GL著色器
             9     //////////////////////////////////////////////////////// 
            10     GLSLShader();
            11     virtual ~GLSLShader();
            12     
            13     ////////////////////////////////////////////////////////
            14     /// 著色器編譯,檢測是否編譯
            15     ////////////////////////////////////////////////////////     
            16     virtual bool Compile() = 0;
            17     virtual bool IsCompiled() const = 0
            18     
            19     ////////////////////////////////////////////////////////
            20     /// 獲取著色器日志
            21     ////////////////////////////////////////////////////////     
            22     virtual void GetShaderLog(engine_string &log) const = 0;
            23     
            24     ////////////////////////////////////////////////////////
            25     /// 獲取,設置著色器數據
            26     ////////////////////////////////////////////////////////     
            27     virtual void GetShaderSource(engine_string &shader) const = 0;
            28     virtual void SetShaderSource(engine_string &code) = 0;
            29   
            30     ////////////////////////////////////////////////////////
            31     /// 獲取著色器句柄(標號)
            32     ////////////////////////////////////////////////////////   
            33     virtual GLuint GetHandle() const = 0;
            34     
            35     ////////////////////////////////////////////////////////
            36     /// 獲取著色器參數  
            37     ////////////////////////////////////////////////////////     
            38     virtual void   GetParameter(GLenum param, GLint *data) const = 0;
            39 private:
            40     DECLARE_OBJECT(GLSLShader)
            41 };
            42 

              1 ////////////////////////////////////////////////////////////
              2 /// 定義引擎GLSL著色程序
              3 ////////////////////////////////////////////////////////////
              4 class GLSLProgram : public Object 
              5 {
              6 public:
              7     ////////////////////////////////////////////////////////
              8     /// 構造,析構GL著色程序
              9     ////////////////////////////////////////////////////////
             10     GLSLProgram();
             11     virtual ~GLSLProgram();
             12   
             13     ////////////////////////////////////////////////////////
             14     /// 鏈接,卸載著色程序
             15     ////////////////////////////////////////////////////////  
             16     virtual void Attach(const RefPtr<GLSLShader> &shader) = 0;
             17     virtual void Detach(const RefPtr<GLSLShader> &shader) = 0;
             18     
             19     ////////////////////////////////////////////////////////
             20     /// 鏈接著色程序
             21     ////////////////////////////////////////////////////////    
             22     virtual bool Link() = 0;
             23     
             24     ////////////////////////////////////////////////////////
             25     /// 啟用,禁止著色程序
             26     ////////////////////////////////////////////////////////        
             27     virtual void Begin() const = 0;
             28     virtual void End() const = 0;
             29 
             30     ////////////////////////////////////////////////////////
             31     /// 設置著色程序參數
             32     ////////////////////////////////////////////////////////    
             33     virtual void SendUniform(const engine_string &name, float x) = 0;
             34     virtual void SendUniform(const engine_string &name, float x, float y) = 0;
             35     virtual void SendUniform(const engine_string &name, float x, float y, float z) = 0;
             36     virtual void SendUniform(const engine_string &name, float x, float y, float z, float w) = 0;
             37     virtual void SendUniform(const engine_string &name, int x) = 0;
             38     virtual void SendUniform(const engine_string &name, int x, int y) = 0;
             39     virtual void SendUniform(const engine_string &name, int x, int y, int z) = 0;
             40     virtual void SendUniform(const engine_string &name, int x, int y, int z, int w) = 0;
             41     virtual void SendUniform(const engine_string &name, float *m, bool transp = falseint size = 4= 0;
             42 
             43     ////////////////////////////////////////////////////////
             44     /// 設置指定位置的著色程序參數
             45     ////////////////////////////////////////////////////////    
             46     virtual void SendUniform(GLuint location, float x) = 0;
             47     virtual void SendUniform(GLuint location, float x, float y) = 0;
             48     virtual void SendUniform(GLuint location, float x, float y, float z) = 0;
             49     virtual void SendUniform(GLuint location, float x, float y, float z, float w) = 0;
             50     virtual void SendUniform(GLuint location, int x) = 0;
             51     virtual void SendUniform(GLuint location, int x, int y) = 0;
             52     virtual void SendUniform(GLuint location, int x, int y, int z) = 0;
             53     virtual void SendUniform(GLuint location, int x, int y, int z, int w) = 0;
             54     virtual void SendUniform(GLuint location, float *m, bool transp = falseint size = 4= 0;
             55     
             56     ////////////////////////////////////////////////////////
             57     /// 設置給定索引的頂點屬性參數 
             58     ////////////////////////////////////////////////////////    
             59     virtual void SendVertexAttrib(GLuint index, int x) = 0
             60     virtual void SendVertexAttrib(GLuint index, int x, int y) = 0
             61     virtual void SendVertexAttrib(GLuint index, int x, int y, int z) = 0
             62     virtual void SendVertexAttrib(GLuint index, int x, int y, int z, int w) = 0
             63      
             64     virtual void SendVertexAttrib(GLuint index, float x) = 0
             65     virtual void SendVertexAttrib(GLuint index, float x, float y) = 0
             66     virtual void SendVertexAttrib(GLuint index, float x, float y, float z) = 0
             67     virtual void SendVertexAttrib(GLuint index, float x, float y, float z, float w) = 0;  
             68 
             69     ////////////////////////////////////////////////////////
             70     /// 獲取指定參數的位置 
             71     ////////////////////////////////////////////////////////
             72     virtual GLuint GetUniformLocation(const engine_string &name) const = 0;
             73     virtual void   SetAttributeLocation(const engine_string &name, GLuint location) = 0;
             74     virtual GLuint GetAttributeLocation(const engine_string &name) const = 0;
             75 
             76     ////////////////////////////////////////////////////////
             77     /// 獲取程序日志 
             78     ////////////////////////////////////////////////////////
             79     virtual void   GetProgramLog(engine_string &log) const = 0;
             80     
             81     ////////////////////////////////////////////////////////
             82     /// 獲取著色程序句柄 
             83     ////////////////////////////////////////////////////////    
             84     virtual GLuint GetHandle() const = 0;
             85     
             86     ////////////////////////////////////////////////////////
             87     /// 獲取著色器參數 
             88     ////////////////////////////////////////////////////////    
             89     virtual void   GetParameter(GLenum param, GLint *data) const = 0;
             90     
             91     ////////////////////////////////////////////////////////
             92     /// 著色器合法性檢查 
             93     ////////////////////////////////////////////////////////    
             94     virtual bool   IsValid() const = 0;
             95     virtual bool   IsValidProgram() const = 0;
             96     virtual void   GetAttributeInfo(GLuint location, engine_string &name, GLenum &type, GLint &size) const = 0;
             97     virtual void   GetUniformInfo(GLuint location, engine_string &name, GLenum &datatype, GLint &size) const = 0;
             98     virtual void   GetAttachedShaders(std::vector<GLuint> &shaderhandles) = 0;
             99     virtual void   GetAttachedShaders(std::vector<GLSLShader> &shaders) = 0;
            100 private:
            101     DECLARE_OBJECT(GLSLProgram)    
            102 };
            這個沒什么說的
            如何獲取其指針?
            從這里!
             1 ///////////////////////////////////////////////////////
             2 /// 定義引擎渲染者對象O(∩_∩)O~
             3 ///////////////////////////////////////////////////////
             4 class G_DLL_API Renderer : public Object 
             5 {
             6 public:
             7     ///////////////////////////////////////////////////////
             8     ///  構造,析構可渲染對象
             9     ///////////////////////////////////////////////////////    
            10     Renderer();
            11     virtual ~Renderer();
            12 public:     
            13     ///////////////////////////////////////////////////////
            14     ///  獲取著色器程序指針 
            15     ///////////////////////////////////////////////////////             
            16     virtual RefPtr<GLSLProgram> CreateGLSLProgram(const engine_string& vertex,const engine_string& frag) = 0;     
            17    
            然后是使用的一段代碼(感覺越寫越復雜了)
              1     //! 獲取材質管理器
              2     core::RefPtr<core::MaterialManager> materialmanager = resourcemanager->GetMaterialManager();    
              3     //! 獲取一個材質指針(我們從腳本中載入材質數據O(∩_∩)O~) 
              4     core::RefPtr<core::Material> material = materialmanager->CreateObject("material","..\\script//move_light_material.lua","material"); 
              5     //! 材質渲染
              6     material->Render();  
              7     
              8     //! 獲取光管理器指針
              9     core::RefPtr<core::LightManager> lightmanager = resourcemanager->GetLightManager();
             10     //! 啟用光源
             11     lightmanager->EnableLight();   
             12     
             13     //! 獲取光模型指針
             14     lightmodel = lightmanager->GetLightModel(); 
             15     lightmodel->SetLocalViewer(false);
             16     lightmodel->SetAmbientColor(core::Color(0.4f,0.4f,1.0f,1.0f)); 
             17     lightmodel->Render(); 
             18     
             19     light[0= lightmanager->CreateObject("light1","..\\script//move_light_light.lua","light0");
             20     light[1= lightmanager->CreateObject("light2","..\\script//move_light_light.lua","light1");
             21     light[2= lightmanager->CreateObject("light3","..\\script//move_light_light.lua","light2");
             22     
             23     //! 獲取渲染器
             24     core::RefPtr<core::Renderer> renderer = device->GetRenderer(); 
             25     
             26     //獲取GLSL著色指針
             27     core::RefPtr<core::GLSLProgram> glsl1 = renderer->CreateGLSLProgram("..\\shader//multilight//pervertex1.vert","..\\shader//multilight//pervertex1.frag");
             28     core::RefPtr<core::GLSLProgram> glsl2 = renderer->CreateGLSLProgram("..\\shader//multilight//perpixel1.vert","..\\shader//multilight//perpixel1.frag");
             29     core::RefPtr<core::GLSLProgram> glsl3 = renderer->CreateGLSLProgram("..\\shader//multilight//pervertex3.vert","..\\shader//multilight//pervertex3.frag");
             30     core::RefPtr<core::GLSLProgram> glsl4 = renderer->CreateGLSLProgram("..\\shader//multilight//perpixel3.vert","..\\shader//multilight//perpixel3.frag");
             31     core::RefPtr<core::GLSLProgram> glsl5 = renderer->CreateGLSLProgram("..\\shader//multilight//deferredfirst.vert","..\\shader//multilight//deferredfirst.frag");
             32     core::RefPtr<core::GLSLProgram> glsl6 = renderer->CreateGLSLProgram("..\\shader//multilight//deferredsecond.vert","..\\shader//multilight//deferredsecond.frag");  
             33 
             34     glsl6->Begin();
             35     glsl6->SendUniform("Tex0",0);
             36     glsl6->SendUniform("Tex1",1);
             37     glsl6->SendUniform("Tex2",2);
             38     glsl6->End();
             39     
             40     core::RefPtr<core::Image> wallimage = imagemanager->CreateObject("wall","..\\image//wall.bmp");
             41     core::RefPtr<core::Image> cubeimage = imagemanager->CreateObject("cube","..\\image//logo.bmp");
             42     core::RefPtr<core::Texture> wall = texturemanager->CreateObject("wall",wallimage);
             43     core::RefPtr<core::Texture> cube = texturemanager->CreateObject("cubel",cubeimage);
             44     wall->Generate();
             45     cube->Generate();
             46     
             47     texid[0= wall->GetTextureId(); 
             48     texid[1= cube->GetTextureId(); 
             49 
             50     //! 獲取攝像機指針
             51     core::RefPtr<core::Camera> camera = scenemanager->GetCameraManager()->CreateCamera("camera",
             52                                                                            Vector3f(500,35,400),
             53                                                                            Vector3f(504,35,400));
             54     camera->SetViewPort(Recti(0,0,640,480));
             55     camera->SetPerspective(45.0f,640.0f/480.0f,0.1f,100.0f);
             56  
             57     BEGIN_LOOP(device)
             58        videodriver->SetClearBuffer(ENGINE_CLEAR_COLOR | ENGINE_CLEAR_DEPTH);
             59        
             60        if(input->IsPressedKey(KEY_M) == true)
             61            movelights = !movelights;
             62        if(input->IsPressedKey(KEY_SPACE) == true)
             63            move = !move;
             64        if(input->IsPressedKey(KEY_R) == true)     
             65            rotation = !rotation;           
             66        if(input->IsPressedKey(KEY_B) == true)      
             67            bg = !bg;
             68        if(input->IsPressedKey(KEY_KP_0) == true
             69        {    
             70            movz = 0.0f;
             71            roty = 0.0f;
             72            movl = 0.0f;
             73        }
             74        if(input->IsPressedKey(KEY_U) == true
             75        {
             76            renderer->DisableGLSL();
             77            lightmanager->DisableLight(); 
             78            rendermode = 0;
             79        }
             80        if(input->IsPressedKey(KEY_H) == true
             81        {
             82            renderer->DisableGLSL();
             83            lightmanager->EnableLight();
             84            rendermode = 0;
             85        }
             86        if(input->IsPressedKey(KEY_K) == true
             87        {
             88            renderer->DisableGLSL();
             89            lightmanager->EnableLight();
             90            multish = 0;
             91            rendermode = 1;
             92        }
             93        if(input->IsPressedKey(KEY_S) == true
             94        {
             95            multish = glsl1->GetHandle(); 
             96            rendermode = 1;
             97        }
             98        if(input->IsPressedKey(KEY_T) == true
             99        {
            100            multish = glsl2->GetHandle(); 
            101            rendermode = 1;
            102        }
            103        if(input->IsPressedKey(KEY_L) == true
            104        {
            105             glsl3->Begin(); 
            106             rendermode = 0;
            107        }
            108        if(input->IsPressedKey(KEY_O) == true
            109        {
            110            glsl4->Begin(); 
            111            rendermode = 0;
            112        }
            113 
            114        interval = 16
            115  
            116         if (move)
            117             movz += 0.0025 * interval;
            118         if (rotation)
            119             roty += 0.1 * interval;
            120         if (movelights)
            121             movl += 0.0025 * interval;
            122          
            123         DrawLight(light,movl); 
            124  
            125         videodriver->SetClearBuffer(ENGINE_CLEAR_COLOR | ENGINE_CLEAR_DEPTH);
            126         glLoadIdentity();
            127         videodriver->SetPilotView(0,2,10,0,0,-15);
            128         switch(rendermode) 
            129         {
            130         case 0
            131             DrawScene(bg,texid[0],texid[1],roty,movz);
            132             break;
            133         case 1
            134             if (!multish)
            135             {
            136                 for (i = 1; i < NUM_LIGHTS; i++)
            137                     light[i]->SetVisible(false);
            138             }
            139 
            140             glUseProgram(multish);
            141             for (i = 0; i < NUM_LIGHTS; i++
            142             {
            143                 if (i > 0
            144                 {
            145                     lightmodel->Render();
            146                     videodriver->SetBlending(true);
            147                 }
            148                 light[i]->Render();
            149                 DrawScene(bg,texid[0],texid[1],roty,movz);
            150             }
            151 
            152             videodriver->SetBlending(false);
            153 
            154             if (!multish) 
            155             {
            156                 for (i = 1; i < NUM_LIGHTS; i++)
            157                     {light[i]->SetVisible(true);light[i]->Render();} 
            158             }
            159             break;
            160         }
            161         
            162         DrawLights(light);
            163         
            164     END_LOOP(device)
            165 

            下面是幾張對應的圖片


            其三:

            其四:

            第五個:

            蓋莫游戲引擎2.1.2估計會在6月份中旬發布
            至于2.1.3版本將不再發布
            因為打算直接發布2.1.4版本(屆時將根據需要對引擎框架做大量修改和完成)
            posted on 2010-05-17 17:35 ccsdu2009 閱讀(1542) 評論(0)  編輯 收藏 引用 所屬分類: Game引擎
             
            日韩久久久久中文字幕人妻| 亚洲午夜精品久久久久久浪潮 | 国内精品久久人妻互换| 国产成年无码久久久久毛片| 91亚洲国产成人久久精品| 亚洲日韩欧美一区久久久久我| MM131亚洲国产美女久久| 婷婷久久精品国产| 97久久超碰国产精品旧版| 亚洲国产综合久久天堂| 久久国产亚洲精品麻豆| 久久91精品国产91| 久久国产三级无码一区二区| 精品人妻久久久久久888| 伊人色综合九久久天天蜜桃| 伊人久久精品线影院| 无码超乳爆乳中文字幕久久 | 热99RE久久精品这里都是精品免费 | 91久久精品无码一区二区毛片| 伊人久久大香线蕉AV色婷婷色| 国产L精品国产亚洲区久久| 久久国产色AV免费看| 久久精品一区二区三区AV| 亚洲国产天堂久久综合| 久久国产成人午夜AV影院| 99久久人人爽亚洲精品美女| 91久久精品91久久性色| 久久99精品久久久久久动态图| 精品久久久一二三区| 三级韩国一区久久二区综合| 久久精品国产色蜜蜜麻豆 | 色欲久久久天天天综合网精品| 亚洲国产精品综合久久一线| 久久免费视频一区| 精品久久777| 久久久久综合网久久| 国产亚洲精品美女久久久| 精品国产VA久久久久久久冰| 2021少妇久久久久久久久久| 久久w5ww成w人免费| 国产精品久久毛片完整版|