• <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>
            AstaTus
            -- 夏天不熱。。
            posts - 22,comments - 12,trackbacks - 0

                這個兩個函數的參數一大堆,害我頭都大了2,3倍。。今天整理下已經能夠大概清晰明白的參數。。
            緩存存的是一個屏幕像素的值。。
               先來SetTextureStageState:

               HRESULT SetTextureStageState(
               DWORD Stage,
               D3DTEXTURESTAGESTATETYPE Type,
               DWORD Value
               );

               stage這個參數是指第幾層紋理,1.2.3...9,, 這個版本的dx最多支持9層紋理。
               Type:Defines the type of operation that a texture stage will perform.//定義對該紋理的哪個屬進行設置,值很多。。。
               Value: 指的是前面所選屬性的值

            type:
                D3DTSS_ALPHAOP = 4,     //alpha通道的運算,
                D3DTSS_COLOROP = 1,     //顏色的運算
                                                                //這里的op 是operations,指對前面設置的顏色進行運算
                                                               //既后面的2個type:D3DTSS_COLORARG1,D3DTSS_COLORARG2
                                                               //或D3DTSS_ALPHAARG1,D3DTSS_ALPHAARG2 = 6
            value:
                D3DTOP_DISABLE = 1,                           //該紋理無效,既不顯示
                D3DTOP_SELECTARG1 = 2,                  //選擇第1個顏色值(既D3DTSS_COLORARG1的值)作為紋理顏色輸出
                D3DTOP_SELECTARG2 = 3,                  //選擇第2個顏色值(既D3DTSS_COLORARG2的值)作為紋理顏色輸出
                D3DTOP_MODULATE = 4,                    //將顏色1和顏色2相乘作為紋理顏色輸出
                D3DTOP_MODULATE2X = 5,               //將顏色1和顏色2相乘后左移1bit(用于增亮)作為紋理顏色輸出 ,
                D3DTOP_MODULATE4X = 6,               //將顏色1和顏色2相乘后左移2bit(用于增亮)作為紋理顏色輸出
                D3DTOP_ADD = 7,                                 //將顏色1和顏色2相加作為紋理顏色輸出
                D3DTOP_ADDSIGNED = 8,                  ///////////后面的參見SDK 都是對2個顏色進行運算
                D3DTOP_ADDSIGNED2X = 9,
                D3DTOP_SUBTRACT = 10,
                D3DTOP_ADDSMOOTH = 11,
                D3DTOP_BLENDDIFFUSEALPHA = 12,
                D3DTOP_BLENDTEXTUREALPHA = 13,
                D3DTOP_BLENDFACTORALPHA = 14,
                D3DTOP_BLENDTEXTUREALPHAPM = 15,
                D3DTOP_BLENDCURRENTALPHA = 16,
                D3DTOP_PREMODULATE = 17,
                D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
                D3DTOP_MODULATECOLOR_ADDALPHA = 19,
                D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
                D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
                D3DTOP_BUMPENVMAP = 22,
                D3DTOP_BUMPENVMAPLUMINANCE = 23,
                D3DTOP_DOTPRODUCT3 = 24,
                D3DTOP_MULTIPLYADD = 25,
                D3DTOP_LERP = 26,
                D3DTOP_FORCE_DWORD = 0x7fffffff,

                 
            type:
                D3DTSS_COLORARG1 = 2,  
                D3DTSS_COLORARG2 = 3,
                D3DTSS_ALPHAARG1 = 5,
                D3DTSS_ALPHAARG2 = 6,
                D3DTSS_COLORARG0 = 26,
                D3DTSS_ALPHAARG0 = 27,
                D3DTSS_RESULTARG = 28,
            value:
                 這里的TA指的是texture arguments ,
                  D3DTA_CONSTANT             //給當前紋理一個固定的值;
                  D3DTA_DIFFUSE;               //diffuse的值作為參數 diffuse 可能有多個來源。。比如材質,vertex
                  D3DTA_SELECTMASK         //Mask value for all arguments; not used when setting texture arguments 這句話不理解啊,為什么要偽裝呢  
                  D3DTA_SPECULAR             //取spercular 的值作為參數  來源同diffuse
                  D3DTA_TEMP                     //待定。。
                  D3DTA_TEXTURE              //用紋理的顏色值作為參數
                  D3DTA_TFACTOR              //待定。。

             

            ////////////////////////////////////////////////////////////////////////////////////
            以下還沒來得及研究。。貌似叫難懂,還請高人指點啊


            D3DTSS_BUMPENVMAT00 = 7,
            D3DTSS_BUMPENVMAT01 = 8,
            D3DTSS_BUMPENVMAT10 = 9,
            D3DTSS_BUMPENVMAT11 = 10,
            D3DTSS_TEXCOORDINDEX = 11,
            D3DTSS_BUMPENVLSCALE = 22,
            D3DTSS_BUMPENVLOFFSET = 23,
            D3DTSS_TEXTURETRANSFORMFLAGS = 24,
            D3DTSS_CONSTANT = 32,
            D3DTSS_FORCE_DWORD = 0x7fffffff,

             


            HRESULT SetRenderState(
            D3DRENDERSTATETYPE State,     //所要設置的狀態
            DWORD Value                   //該狀態的值
            );
             
            State 的取值
             
             
             
             
             
             
             

             

            posted @ 2008-10-08 23:12 AstaTus 閱讀(3234) | 評論 (3)編輯 收藏
                  在地形中獲得高度,必須要知道該點所在三角形三個角的坐標和這三個點的高度,然后根據線性插值估算出該點的高度,判斷該點在哪個正方形中,比較容易,只要根據定點之間的間距,和地形的開始坐標就可求出該正方形的左下角頂點,但要再進一步算是哪個三角形,就有一個技巧了,
            比如:

            當正方形的邊長一樣時,頂點V在哪個三角形中只要判斷坐標點 X + Y是否大于 邊長就可以了。一般地形應該都是直角邊相等的三角型吧。
            然后再根據所確定下來的三角形的三個點進行線性插值就可以了。。
            posted @ 2008-10-08 15:45 AstaTus 閱讀(375) | 評論 (0)編輯 收藏
               強烈的欲望,我要變強!!吼~~~~~~~~~~~~~~~~~~~~~~~~~
            posted @ 2008-10-06 22:08 AstaTus 閱讀(237) | 評論 (1)編輯 收藏
                 摘要: 最近看的那本directx 的書的源碼都是用函數,沒用c++的類,用起來超不爽,所以自己來,封裝了下,現在才看到《頂點的顏色》的那章,所以類還很不完整,以后慢慢改進。。 //Base.h/**//////////////////////////////////////////////#ifndef BASE_H#define BASE_H#include <d...  閱讀全文
            posted @ 2008-09-20 22:10 AstaTus 閱讀(1337) | 評論 (0)編輯 收藏
                  開始看directx了,發現學ogre,還是現弄懂directx會比較好點。

                  這個程序主要體現了directx的一個基本的框架。
              1. 在初始化D3D設備后,開始設置頂點緩存,將要顯示的點輸入,
              2.用函數D3DXMatrixPerspectiveFovLH 求投影矩陣,該函數根據視域體的屬性求出投影矩陣
              3.設置頂點渲染的方法,
            device->CreateVertexBuffer(3 * sizeof(Vertex), D3DUSAGE_WRITEONLY, D3DFVF_XYZ, D3DPOOL_MANAGED, &Triangle, 0);

                Vertex
            * vertices;
                Triangle
            ->Lock(00,(void**)&vertices, 0);

                vertices[
            0= Vertex(-1.0f0.0f2.0f);
                vertices[
            1= Vertex(0.0f1.0f2.0f);
                vertices[
            2= Vertex(1.0f0.0f2.0f);

                Triangle
            ->Unlock();

                D3DXMATRIX proj;
                D3DXMatrixPerspectiveFovLH(
            &proj, D3DX_PI * 0.5f, (float)800 / (float)6001.0f1000.0f);
                
                device
            ->SetTransform(D3DTS_PROJECTION, &proj);

                device
            ->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);


              4.在消息循環函數中
            while(msg.message != WM_QUIT)
                
            {
                    
            if(::PeekMessage(&msg, 000, PM_REMOVE)) //////////////這里有個疑惑,什么時候if語句不成立呢
                    {
                        ::TranslateMessage(
            &msg);
                        ::DispatchMessage(
            &msg);
                         }

                      
            else
                    
            {    
                           
            float currTime  = (float)timeGetTime();
                           
            float timeDelta = (currTime - lastTime)*0.001f;

                            ptr_display(timeDelta);

                           lastTime 
            = currTime;
                       }

                }
            這里是場景的渲染
            device->Clear(00, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff1.0f0);

                    device
            ->BeginScene();

                    device
            ->SetStreamSource(0, Triangle, 0sizeof(Vertex));   //將Vertexbuffer中的頂點倒入到流當中
                    device
            ->SetFVF(Vertex::FVF); //設置頂點的格式  FVF已被我賦值為 FVF_XYZ
             
                    device
            ->DrawPrimitive(D3DPT_TRIANGLELIST, 01); //圖元類型 三角形 個數為一個

                    device
            ->EndScene();

                    
            // Swap the back and front buffers.
                    device->Present(0000);
            posted @ 2008-09-18 20:30 AstaTus 閱讀(270) | 評論 (0)編輯 收藏
               今天寫的一個程序,很奇怪,我要讓每個ball的M_CurLoc的值都不一樣,但是單步調試的時候是做到了不一樣,但直接運行的時候結果每個ball的M_CurLoc的值居然都一樣,喊我調了2個多小時。。抓狂ing。。
            后來發現是隨機數里的srand在作怪
            void Balloon::Loc_Reset()
            {
                    srand(time(NULL));
                M_CurLoc.x 
            = rand()%700 + 100;
                M_CurLoc.y 
            = rand()%700 + 600;
                flag 
            = UP;

            }


            for(i = 0; i < n; i++)
            {
                tempball.Loc_Reset();

                M_ActBall.push_back(tempball);    

            }
            這個代碼實現的n個ball 中的 M_CurLoc都是一樣的,因為CPU運行太快 以致每一次尋環中srand(time(NULL))所取得的系統時間都一樣。。(srand的精度為秒),所以在調試和直接運行這兩種情況下會出現兩種結果。。
            最后改了下
            void Balloon::Loc_Reset()
            {
                M_CurLoc.x 
            = rand()%700 + 100;
                M_CurLoc.y 
            = rand()%700 + 600;
                flag 
            = UP;

            }


            void Balloon::GetSrand()
            {
                srand(time(NULL));

            }


            ////////////////////////////////////

            tempball.GetSrand();

            for(i = 0; i < n; i++)
            {
                tempball.Loc_Reset();

                M_ActBall.push_back(tempball);    

            }
            posted @ 2008-09-10 19:13 AstaTus 閱讀(244) | 評論 (0)編輯 收藏
               這個是攝像機繞食人魔頭的一個demo,
            其中的關鍵就在于攝像機的自動繞行 和 攝像機一直朝向食人魔頭,

            ogre這引擎似乎什么都幫你想到了,很多的函數都已封裝好,就怕你找不到

            以下的是這個demo關鍵代碼,都是在createscene里的,我給了下具體的解釋:
            // Make sure the camera track this node
                    mCamera->setAutoTracking(true, headNode);    //這里讓攝像機總是朝著魔頭

                    // Create the camera node & attach camera
                    SceneNode* camNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
                    camNode
            ->attachObject(mCamera);

                    
            // set up spline animation of node
                    Animation* anim = mSceneMgr->createAnimation("CameraTrack"10);    //這里的10指代這個攝像機繞一圈要花10秒鐘,至于這10秒鐘怎么分,在下面關鍵幀設置中會分配

                    
            // Spline it for nice curves
                    anim->setInterpolationMode(Animation::IM_LINEAR); //設置兩點間移動時的插值類型,有線型和弧線型兩種,什么效果大家自個試吧
                    
            // Create a track to animate the camera's node
            //以下就要設置相機繞行的軌跡了
                    NodeAnimationTrack* track = anim->createNodeTrack(0, camNode);
                    
            // Setup keyframes
            //關鍵幀就10幀,這與動畫的總時間10剛好對應
                    TransformKeyFrame* key = track->createNodeKeyFrame(0); // startposition
                    key = track->createNodeKeyFrame(2.5);
                    key
            ->setTranslate(Vector3(500,500,-1000));
                    key 
            = track->createNodeKeyFrame(5);
                    key
            ->setTranslate(Vector3(-1500,1000,-600));
                    key 
            = track->createNodeKeyFrame(7.5);
                    key
            ->setTranslate(Vector3(0,-100,0));
                    key 
            = track->createNodeKeyFrame(10);
                    key
            ->setTranslate(Vector3(0,0,0));
                    
            // Create a new animation state to track this
                    mAnimState = mSceneMgr->createAnimationState("CameraTrack");
                    mAnimState
            ->setEnabled(true);
            關鍵幀設置的那8行代碼其實就是說從0~2.5秒 攝像機從起始點移動到(500, 500, -1000),后面幾行同理


            該demo中的createplane函數還是有點不明白
             MeshPtr createPlane(
                        const String& name, const String& groupName, const Plane& plane,
                        Real width, Real height,
                        int xsegments = 1, int ysegments = 1,
                        bool normals = true, int numTexCoordSets = 1,
                        Real uTile = 1.0f, Real vTile = 1.0f,   //這個tile啥意思啦??????????????????
             const Vector3& upVector = Vector3::UNIT_Y,
               HardwareBuffer::Usage vertexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
               HardwareBuffer::Usage indexBufferUsage = HardwareBuffer::HBU_STATIC_WRITE_ONLY,
               bool vertexShadowBuffer = true, bool indexShadowBuffer = true);
            posted @ 2008-09-07 20:45 AstaTus 閱讀(1096) | 評論 (0)編輯 收藏
                  發現3D這東西還是蠻好玩的,尤其是有了3D的ogre引擎以后。今天一口氣看到了基礎教程4.。。 
                  到現在為止,就接觸了一個Application 類 和 frameListener類

            Application類繼承了 ExampleApplication,主要是一些場景的資源載入 和 資源的設置 還有最重要的渲染函數
            frameListener類繼承了ExampleFrameListener,  OIS::MouseListener, OIS::KeyListener。 后兩個是外部類,不屬于ogre內部
            這兩個類主要用于鍵盤和鼠標的監聽,雖然還沒了解它內部的運行機制,不過感覺有點像 單片機里的中斷,過幾天基礎
            玩熟了,去研究下。^_^

            除以上兩個類外
            目前遇到比較重要的幾個類有:SceneManger,  Root, Camera, ViewPort (現在還沒弄清楚Camera, ViewPort 之間的關系),Entity
            Light, SceneNode。。。


            場景節點在控制實體旋轉的時候,它是以自己的局部坐標系為標準的
            Entity *ent = mSceneMgr->createEntity( "Robot""robot.mesh" );
                   SceneNode 
            *node = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode", Vector3( -10000 )  );
                   node
            ->attachObject( ent );

                   node
            ->yaw( Degree( -90 ) );


            這含代碼的最后一行就是以ent實體中心為坐標原點的坐標系旋轉的。。

            如果要繞某一個軸旋轉捏?嘎嘎



            posted @ 2008-08-15 21:16 AstaTus 閱讀(356) | 評論 (0)編輯 收藏
              以前小梅老師教C++的時候,沒有涉及到過DLL,已至現在看DLL超累。。。雖然看上去那本《VC++動態鏈接庫深入淺出》只有很少的幾頁,但代碼稍有不對,就出錯,尤其是在鏈接上,。。。汗個。。

            剛才花了大把時間寫的個例子

            //useyumen.cpp

            #include 
            <stdio.h>
            #pragma comment(lib, 
            "..\\yumen\\Debug\\yumen.lib")

            extern"C" __declspec(dllimport) Add(int x, int y);

            int main()
            {
             printf(
            "%d", Add(35));
             
            return 0;
            }


            /**///////////////////以下是console 的 DLL工程

            //yumen.h
            #ifndef YUMEN_H
            #define YUMEN_H
            extern "C" int __declspec(dllexport) Add(int x, int y);

            #endif

            //yumen.cpp
            #include "yumen.h"

            int Add(int x, int y)
            {
                
            return x + y;
            }



            發現如果是類的DLL,調用起來比較方便。。。 

             
            posted @ 2008-08-04 22:41 AstaTus 閱讀(226) | 評論 (0)編輯 收藏

                  在一個類中定義了一個引用類型的變量,他的初始化不能放在構造函數中,也不能放在其他的函數中,只能放在一個神秘的角落--構造函數的初始化列表中。。嘎嘎
               
              

            #include <iostream.h>


            int i = 9;

            class A
            {
                
            protected:
                
            int &m;
                
                
            public:
                A():m(i)   
            //將i賦給引用變量m
                {
                    cout
            <<m<<endl;
                }

            }
            ;

            void main()
            {
                A a;

            }


             

            posted @ 2008-08-01 10:52 AstaTus 閱讀(773) | 評論 (1)編輯 收藏
            僅列出標題
            共3頁: 1 2 3 
            久久天天躁夜夜躁狠狠躁2022| 久久亚洲精精品中文字幕| 亚洲国产一成人久久精品| 人人狠狠综合88综合久久| 国产美女久久久| 国产精品一区二区久久国产| 亚洲人成无码网站久久99热国产 | 伊人久久综合热线大杳蕉下载| 久久久亚洲欧洲日产国码二区| 国产亚洲美女精品久久久2020| 亚洲国产精品无码久久久久久曰| 国产精品视频久久久| 久久99热狠狠色精品一区| 91性高湖久久久久| 色综合久久久久| 亚洲AV伊人久久青青草原| 久久久久久噜噜精品免费直播| 欧美日韩成人精品久久久免费看 | 久久99久久99精品免视看动漫| 无码超乳爆乳中文字幕久久| 欧美大香线蕉线伊人久久| 精品蜜臀久久久久99网站| 久久国产一区二区| 久久亚洲欧洲国产综合| 热久久最新网站获取| 亚洲va久久久噜噜噜久久| 久久久无码精品亚洲日韩按摩| 国产69精品久久久久99| 波多野结衣久久一区二区| 99久久久精品免费观看国产| 久久精品一区二区三区中文字幕| 2021最新久久久视精品爱| 2021少妇久久久久久久久久| 狠狠人妻久久久久久综合| 久久九九久精品国产免费直播| 日韩人妻无码一区二区三区久久| 丁香五月综合久久激情| 老色鬼久久亚洲AV综合| 青草久久久国产线免观| 久久久久国产一级毛片高清版| 久久青青草视频|