青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 94, comments - 250, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

Nebula3繪制2D紋理

Posted on 2008-12-14 22:03 Condor 閱讀(2198) 評論(1)  編輯 收藏 引用

上次已經繪制過基本圖元了, 這次只不過要貼張圖而已.....

本來我想用Graphics的Model渲染流程來做, 不過這一層太高級了, 都是什么場景管理資源映射之類的

做低級的事情, 就要用低級的API嘛

圖形渲染的底層是CoreGraphics, 這個層我不打算再單獨寫(翻譯)一篇了, 因為都是Direct3D概念的一些抽象. 也就是說D3D用熟了基本上一看就明白(用GL的我就不清楚啦, 嘿嘿, N3的作者都放棄用GL去實現@_@).

還記得D3D Tutorial中的Textured例子不? 需要的東西有帶紋理坐標的點, 紋理. N3中也一樣, 不過, 這里沒法用固定管線了.

N3的設計的時候就放棄了固定管線(多么明智呀, 別噴我-_-, 我只會shader.......), 所以在這之前我們要先寫一個shader來進行繪制.

因為我們只是進行簡單的演示, 就盡量簡單了, 寫一個2D的紋理繪制, 你可以用來做UI:

  1. //------------------------------------------------------------------------------
  2. //  texture2d.fx
  3. //  texture shader for 2D(UI)
  4. //  (C) xoyojank
  5. //------------------------------------------------------------------------------
  6. float2 halfWidthHeight  : HalfWidthHeight;
  7. texture diffMap     : DiffMap0;
  8. sampler diffMapSampler = sampler_state
  9. {
  10.     Texture = <diffMap>;
  11.     AddressU = Clamp;
  12.     AddressV = Clamp;
  13.     MinFilter = Point;
  14.     MagFilter = Point;
  15.     MipFilter = None;
  16. };
  17. struct VS_INPUT
  18. {
  19.     float3 pos  : POSITION;
  20.     float2 uv       : TEXCOORD;
  21. };
  22. struct VS_OUTPUT
  23. {
  24.     float4 pos  : POSITION;
  25.     float2 uv       : TEXCOORD;
  26. };
  27. //------------------------------------------------------------------------------
  28. /**
  29. */
  30. VS_OUTPUT
  31. VertexShaderFunc(VS_INPUT input)
  32. {
  33.     VS_OUTPUT output;
  34.     output.pos.xy = float2(input.pos.x - halfWidthHeight.x, halfWidthHeight.y - input.pos.y) / halfWidthHeight;
  35.     output.pos.zw = float2(input.pos.z, 1.0f);
  36.     output.uv = input.uv;
  37. return output;
  38. }
  39. //------------------------------------------------------------------------------
  40. /**
  41. */
  42. float4
  43. PixelShaderFunc(float2 uv : TEXCOORD0) : COLOR
  44. {
  45. return tex2D(diffMapSampler, uv);
  46. }
  47. //------------------------------------------------------------------------------
  48. /**
  49. */
  50. technique Default
  51. {
  52.     pass p0
  53.     {
  54.         ColorWriteEnable  = RED|GREEN|BLUE|ALPHA;
  55.         ZEnable           = False;
  56.         ZWriteEnable      = False;
  57.         StencilEnable     = False;
  58.         FogEnable         = False;
  59.         AlphaBlendEnable  = True;
  60.         SrcBlend          = SrcAlpha;
  61.         DestBlend         = InvSrcAlpha;
  62.         AlphaTestEnable   = False;
  63.         ScissorTestEnable = False;
  64.         CullMode          = CW;        
  65.         VertexShader = compile vs_3_0 VertexShaderFunc();
  66.         PixelShader = compile ps_3_0 PixelShaderFunc();
  67.     }
  68. }

值得一提的是CullMode = CW, 為什么? 因為N3用的右手坐標系, 這點又跟D3D不一樣了........為什么呢? 難道寫MAYA跟MAX的插件的時候比較省事?

還是要跟上一次一樣設置頂點格式并載入VertexBuffer:

  1. // vertex
  2.             Array<VertexComponent> vertexComponents;
  3.             vertexComponents.Append(VertexComponent(VertexComponent::Position, 0, VertexComponent::Float3));
  4.             vertexComponents.Append(VertexComponent(VertexComponent::TexCoord, 0, VertexComponent::Float2));
  5. float vertex[4][5] = {
  6.                 {0.0f,  0.0f,   0.0f,   0.0f, 0.0f},
  7.                 {0.0f,  256.0f, 0.0f,   0.0f, 1.0f}, 
  8.                 {256.0f,0.0f,   0.0f,   1.0f, 0.0f}, 
  9.                 {256.0f,256.0f, 0.0f,   1.0f, 1.0f}
  10.             };
  11.             vertexBuffer = VertexBuffer::Create();
  12.             Ptr<MemoryVertexBufferLoader> vbLoader = MemoryVertexBufferLoader::Create();
  13.             vbLoader->Setup(vertexComponents, 4, vertex, 4 * 5 * sizeof(float));
  14.             vertexBuffer->SetLoader(vbLoader.upcast<ResourceLoader>());
  15.             vertexBuffer->Load();
  16.             vertexBuffer->SetLoader(NULL);

紋理的創建其實跟頂點差不多, 因為它都是屬于資源的一種, 詳見Nebula3資源子系統

  1. // texture
  2.             texture = Texture::Create();
  3.             texture->SetResourceId(ResourceId("bin:razor.jpg"));
  4.             texture->SetLoader(StreamTextureLoader::Create());
  5.             texture->Load();
  6.             texture->SetLoader(NULL);

shader的加載跟上一次一樣, 只是參數不同:

  1. // shader
  2. this->shaderInstance = this->shaderServer->CreateShaderInstance(ResourceId("shd:texture2d"));
  3.             Ptr<ShaderVariable> halfWidthHeight = this->shaderInstance->GetVariableBySemantic(ShaderVariable::Semantic("HalfWidthHeight"));
  4.             float2 halfWH = float2(this->renderDevice->GetDefaultRenderTarget()->GetWidth(), this->renderDevice->GetDefaultRenderTarget()->GetHeight()) * 0.5f;
  5.             halfWidthHeight->SetFloatArray(&halfWH.x(), 2);
  6.             Ptr<ShaderVariable> diffMap = this->shaderInstance->GetVariableBySemantic(ShaderVariable::Semantic("DiffMap0"));
  7.             diffMap->SetTexture(texture);

繪制嘛, 當然改成矩形了, 圖片可貼不到一跟線上:

  1. this->renderDevice->BeginFrame();
  2. this->renderDevice->BeginPass(this->renderDevice->GetDefaultRenderTarget(), this->shaderInstance);
  3.         PrimitiveGroup primGroup;
  4.         primGroup.SetBaseVertex(0);
  5.         primGroup.SetNumVertices(4);
  6.         primGroup.SetPrimitiveTopology(PrimitiveTopology::TriangleStrip);
  7. this->renderDevice->SetVertexBuffer(this->vertexBuffer);
  8. this->renderDevice->SetPrimitiveGroup(primGroup);
  9. this->renderDevice->Draw();
  10. this->renderDevice->EndPass();
  11. this->renderDevice->EndFrame();
  12. this->renderDevice->Present();

上圖:

Feedback

# re: Nebula3繪制2D紋理  回復  更多評論   

2008-12-15 11:39 by saltyshrimp
樓主這些是轉載吧?轉載的時候說明一下,或者把原文的鏈接也放上來吧

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一本大道在线| 国产亚洲一区在线| 亚洲精品一区二区三区四区高清| 亚洲免费在线| 亚洲一品av免费观看| 亚洲精品欧美极品| 99精品国产在热久久| 99精品国产高清一区二区 | 国产伦精品一区二区三区视频黑人 | 艳妇臀荡乳欲伦亚洲一区| 亚洲国产成人午夜在线一区| 在线看片欧美| 日韩午夜视频在线观看| 亚洲天堂网在线观看| 亚洲欧美日本视频在线观看| 欧美在线一级va免费观看| 久久综合一区二区| 亚洲欧洲精品天堂一级| 日韩一本二本av| 亚洲婷婷综合久久一本伊一区| 亚洲女人天堂av| 欧美成人一区二免费视频软件| 欧美性猛交99久久久久99按摩| 国产精品无码专区在线观看| 亚洲黄色一区| 久久成人这里只有精品| 欧美激情91| 欧美一级久久| 欧美久久久久久蜜桃| 国产视频丨精品|在线观看| 亚洲精品在线观看免费| 久久精品国产一区二区三| 亚洲免费高清| 欧美va天堂在线| 激情五月***国产精品| 在线一区日本视频| 欧美激情国产精品| 午夜性色一区二区三区免费视频| 欧美电影在线免费观看网站| 国产一区二区精品| 亚洲欧美成aⅴ人在线观看| 亚洲人成网站在线观看播放| 久久久久久网| 黄色成人免费网站| 欧美一区二区精品在线| 一本色道久久综合狠狠躁的推荐| 蜜桃精品久久久久久久免费影院| 国产中文一区二区| 欧美与欧洲交xxxx免费观看| 在线亚洲美日韩| 欧美精品 日韩| 亚洲精品久久视频| 亚洲国产精品久久久久婷婷老年 | 玖玖玖国产精品| 午夜在线精品| 国产精品女人网站| 亚洲一区二区三区视频播放| 亚洲精品一品区二品区三品区| 欧美1级日本1级| 亚洲区在线播放| 亚洲国产综合在线看不卡| 久久婷婷麻豆| 亚洲综合色自拍一区| 激情另类综合| 久久免费黄色| 久久精品亚洲国产奇米99| 国内精品**久久毛片app| 欧美在线观看日本一区| 午夜在线不卡| 黄网站免费久久| 免费观看30秒视频久久| 久久嫩草精品久久久精品| 亚洲第一黄色| 亚洲区在线播放| 欧美日韩专区| 欧美影院成年免费版| 久久久久久999| 亚洲精品在线一区二区| 99精品视频一区| 国产伦精品一区二区三区视频孕妇| 亚洲欧美日韩精品久久奇米色影视 | 亚洲午夜一区二区| 一区二区三区波多野结衣在线观看| 国产精品久久久久久久9999 | 久久国产天堂福利天堂| 久久亚洲国产成人| 一区二区三区精密机械公司| 一区二区三区久久久| 精品69视频一区二区三区| 亚洲美女精品成人在线视频| 国产伦精品一区二区三区免费迷| 久久午夜电影| 国产精品jizz在线观看美国 | 亚洲一区二区在线观看视频| 欧美一级电影久久| 亚洲欧洲在线看| 亚洲无限av看| 亚洲国产小视频在线观看| av不卡在线观看| 国产综合婷婷| 一区二区三区四区五区视频| 国产日韩精品久久久| 亚洲三级影片| 精品成人一区二区三区四区| 亚洲美女黄网| 亚洲大片在线| 欧美一区久久| 亚洲一区亚洲| 欧美久久久久久蜜桃| 麻豆免费精品视频| 国产拍揄自揄精品视频麻豆| 亚洲伦理在线| 日韩亚洲一区在线播放| 久久久欧美精品| 久久国产精品亚洲77777| 欧美四级伦理在线| 亚洲卡通欧美制服中文| 亚洲国内自拍| 欧美在线播放| 国产人成精品一区二区三| 亚洲图片激情小说| 老司机免费视频久久| 性欧美video另类hd性玩具| 欧美精品免费观看二区| 欧美a级片网| 国模私拍一区二区三区| 欧美亚洲综合网| 久久精品国产第一区二区三区| 欧美丝袜一区二区| 一区二区三区毛片| 亚洲视频在线一区观看| 欧美韩国日本一区| 亚洲精品视频免费观看| 99国产精品99久久久久久粉嫩| 久久综合激情| 欧美激情一区二区三区蜜桃视频| 国产一区欧美日韩| 欧美在线观看视频一区二区| 久久精品国产第一区二区三区最新章节 | 亚洲一区二区三区四区视频| 亚洲一区二区动漫| 欧美午夜大胆人体| 一区二区三区四区国产| 亚洲欧美国产制服动漫| 国产精品视频免费观看| 亚洲欧美高清| 久久久久久久网| 一区二区三区我不卡| 另类成人小视频在线| 亚洲国产精品va在看黑人| 9色porny自拍视频一区二区| 欧美日韩精品国产| 亚洲一区二区三区在线| 久久久精品午夜少妇| 伊人成人开心激情综合网| 另类av导航| 日韩午夜三级在线| 亚欧美中日韩视频| 国产综合在线看| 母乳一区在线观看| 亚洲图片你懂的| 久久久久久久久久码影片| 在线播放不卡| 欧美日韩视频在线一区二区观看视频 | 亚洲区第一页| 国产精品视频久久久| 久久一区免费| 亚洲午夜精品一区二区| 久久人人97超碰精品888| 亚洲国产精品久久久久婷婷884| 欧美日韩国产一区二区| 篠田优中文在线播放第一区| 欧美电影免费观看大全| 亚洲免费一区二区| 亚洲高清网站| 国产精品专区第二| 欧美久久99| 欧美一区二区成人| 亚洲欧美综合| 久久资源在线| 91久久国产自产拍夜夜嗨| 欧美日韩一区二区在线视频| 欧美在线免费视屏| 亚洲精品乱码久久久久| 久久九九全国免费精品观看| 亚洲免费福利视频| 精久久久久久久久久久| 国产精品久久亚洲7777| 欧美电影专区| 久久精品99久久香蕉国产色戒| 亚洲精品日韩在线| 欧美激情国产高清| 久久性色av| 久久精品道一区二区三区| 亚洲欧美国产精品桃花| 日韩午夜精品| 亚洲人成亚洲人成在线观看图片| 国产在线播精品第三| 国产日产欧美一区| 国产伦精品一区二区三区照片91|