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

posts - 94, comments - 250, trackbacks - 0, articles - 0
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

Nebula3繪制2D紋理

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

上次已經(jīng)繪制過(guò)基本圖元了, 這次只不過(guò)要貼張圖而已.....

本來(lái)我想用Graphics的Model渲染流程來(lái)做, 不過(guò)這一層太高級(jí)了, 都是什么場(chǎng)景管理資源映射之類的

做低級(jí)的事情, 就要用低級(jí)的API嘛

圖形渲染的底層是CoreGraphics, 這個(gè)層我不打算再單獨(dú)寫(xiě)(翻譯)一篇了, 因?yàn)槎际荄irect3D概念的一些抽象. 也就是說(shuō)D3D用熟了基本上一看就明白(用GL的我就不清楚啦, 嘿嘿, N3的作者都放棄用GL去實(shí)現(xiàn)@_@).

還記得D3D Tutorial中的Textured例子不? 需要的東西有帶紋理坐標(biāo)的點(diǎn), 紋理. N3中也一樣, 不過(guò), 這里沒(méi)法用固定管線了.

N3的設(shè)計(jì)的時(shí)候就放棄了固定管線(多么明智呀, 別噴我-_-, 我只會(huì)shader.......), 所以在這之前我們要先寫(xiě)一個(gè)shader來(lái)進(jìn)行繪制.

因?yàn)槲覀冎皇沁M(jìn)行簡(jiǎn)單的演示, 就盡量簡(jiǎn)單了, 寫(xiě)一個(gè)2D的紋理繪制, 你可以用來(lái)做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, 為什么? 因?yàn)镹3用的右手坐標(biāo)系, 這點(diǎn)又跟D3D不一樣了........為什么呢? 難道寫(xiě)MAYA跟MAX的插件的時(shí)候比較省事?

還是要跟上一次一樣設(shè)置頂點(diǎn)格式并載入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);

紋理的創(chuàng)建其實(shí)跟頂點(diǎn)差不多, 因?yàn)樗际菍儆谫Y源的一種, 詳見(jiàn)Nebula3資源子系統(tǒng)

  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的加載跟上一次一樣, 只是參數(shù)不同:

  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);

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

  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紋理  回復(fù)  更多評(píng)論   

2008-12-15 11:39 by saltyshrimp
樓主這些是轉(zhuǎn)載吧?轉(zhuǎn)載的時(shí)候說(shuō)明一下,或者把原文的鏈接也放上來(lái)吧

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   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>
            国产精品三上| 欧美一区二区成人6969| 亚洲欧美日本国产专区一区| 亚洲国产欧美不卡在线观看| 亚洲自拍偷拍麻豆| 中文一区二区| 欧美日韩国产小视频| 免费人成网站在线观看欧美高清| 国产精品视频网| 亚洲性线免费观看视频成熟| 99re这里只有精品6| 免费视频一区| 欧美国产日韩一二三区| 影音先锋日韩资源| 久久免费高清| 免费亚洲视频| 亚洲国产综合在线| 蜜桃精品久久久久久久免费影院| 久久久国产精品一区| 国产亚洲精品一区二区| 在线亚洲欧美| 欧美一区二区高清| 国产日韩欧美在线一区| 欧美一区二区视频在线| 久久久久久精| 1769国内精品视频在线播放| 久久天天狠狠| 亚洲国产欧美另类丝袜| 91久久线看在观草草青青| 欧美福利电影在线观看| 亚洲黄色影院| 亚洲香蕉视频| 国产麻豆视频精品| 欧美在线黄色| 亚洲春色另类小说| 国产精品99久久久久久人| 欧美色大人视频| 小嫩嫩精品导航| 免费在线一区二区| 一本色道久久综合亚洲精品不| 欧美午夜大胆人体| 午夜精品久久久久久久蜜桃app| 久久久久久久久久久久久女国产乱 | 久久99在线观看| 国产一区日韩欧美| 蜜臀a∨国产成人精品| 亚洲黄色成人| 亚洲欧美一区二区原创| 国产亚洲一区在线播放| 美女视频黄免费的久久| 这里只有精品丝袜| 久久一区二区精品| 日韩视频一区| 国产一区二区精品在线观看| 老司机久久99久久精品播放免费 | 欧美成人午夜77777| 亚洲天堂成人在线视频| 久久青草欧美一区二区三区| 最新国产成人av网站网址麻豆| 欧美四级在线| 久久免费视频观看| 亚洲午夜激情免费视频| 美国十次成人| 亚洲欧美电影院| 亚洲精品国产精品久久清纯直播 | 欧美精品久久久久久久免费观看| 亚洲欧美日韩国产综合| 亚洲人成7777| 乱中年女人伦av一区二区| 亚洲一区影音先锋| 亚洲精品久久久久久久久久久| 国产免费亚洲高清| 欧美大片在线看免费观看| 欧美一区二区在线播放| 亚洲伦理在线免费看| 麻豆成人在线观看| 欧美一区二区三区四区在线观看 | av成人动漫| 欧美国产日韩免费| 久久久久综合一区二区三区| 中国亚洲黄色| 亚洲久久成人| 在线播放日韩| 狠狠综合久久av一区二区老牛| 欧美日韩国产在线播放| 久久综合九色综合欧美狠狠| 亚洲欧美日本国产专区一区| 亚洲裸体在线观看| 亚洲激情小视频| 亚洲第一区在线观看| 免费在线一区二区| 蜜臀99久久精品久久久久久软件| 久久成人免费网| 欧美一区二区三区在| 亚洲欧美国产毛片在线| 亚洲视频免费在线| 在线视频中文亚洲| 一本高清dvd不卡在线观看| 亚洲精品久久久久久久久久久| 亚洲电影免费在线观看| 经典三级久久| 亚洲电影成人| 最新成人在线| 一区二区黄色| 亚洲欧美日韩在线综合| 亚洲免费在线观看视频| 亚洲免费视频观看| 欧美亚洲尤物久久| 欧美一区二区日韩| 欧美在线视频一区二区| 久久精品国产成人| 久久久人成影片一区二区三区观看| 欧美一区二区视频在线观看| 欧美亚洲一区| 国产一区二区三区久久悠悠色av | 欧美精品一区二区精品网| 美女福利精品视频| 欧美精品情趣视频| 欧美日韩精品免费观看视一区二区| 欧美日本韩国在线| 国产精品免费电影| 黑人一区二区三区四区五区| 在线成人av.com| 99re热精品| 欧美一区二区高清| 欧美成人小视频| 亚洲人成毛片在线播放女女| 99re视频这里只有精品| 亚洲一区三区在线观看| 欧美呦呦网站| 欧美精品二区| 国产精品一级在线| 影音先锋在线一区| 在线亚洲精品| 久久影院午夜片一区| 欧美韩日一区二区| 亚洲一区二区三区视频播放| 欧美综合国产| 欧美日韩精品一区二区| 国产三级精品三级| 亚洲免费观看| 久久久久九九九九| 亚洲美女在线观看| 久久成人精品视频| 欧美日韩视频在线一区二区观看视频 | 欧美日韩高清在线| 国产伊人精品| 亚洲性色视频| 亚洲电影成人| 欧美一区二区三区视频在线| 免费欧美网站| 国产欧美亚洲一区| 亚洲深夜福利| 欧美激情精品久久久久| 亚洲欧美日韩综合| 欧美激情第六页| 国产一区二区久久| 亚洲欧美成人一区二区在线电影 | 亚洲美女视频网| 久久精品亚洲一区二区| 亚洲精选视频在线| 久久一区二区三区四区| 国产精品人人做人人爽| 亚洲日韩欧美视频| 蜜臀a∨国产成人精品| 亚洲欧美在线免费| 欧美色精品天天在线观看视频| 最新日韩在线| 老司机久久99久久精品播放免费| 在线亚洲免费视频| 欧美日韩色婷婷| 一本久久a久久免费精品不卡| 免费亚洲网站| 久久九九国产| 韩国女主播一区| 久久99在线观看| 亚洲免费中文| 国产欧美va欧美不卡在线| 亚洲一区国产| 一区二区三区四区精品| 欧美日韩国内| 一区二区三区www| 亚洲日本中文字幕免费在线不卡| 久久久国产成人精品| 精品不卡在线| 欧美大片网址| 欧美成人免费小视频| 亚洲精品日韩久久| 亚洲黄一区二区三区| 欧美另类变人与禽xxxxx| 99国产精品99久久久久久| 亚洲激情电影在线| 欧美日韩18| 亚洲影院高清在线| 亚洲天堂网在线观看| 国产精品羞羞答答xxdd| 欧美在线看片a免费观看| 欧美一区在线看| 亚洲国产精品国自产拍av秋霞| 欧美福利网址|