激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

實(shí)現(xiàn)和平精英中3D模型渲染到2D界面的模型展示效果

發(fā)布時(shí)間:2024-05-16 16:49:12 瀏覽量:255次

引言

3D模型渲染到2D界面的模型展示效果

在游戲開(kāi)發(fā)中常常需要在UI界面上顯示一個(gè)3D模型,例如時(shí)裝界面里人物換裝展示、Boss挑戰(zhàn)界面里選擇Boss展示等等。

本文將介紹一下在Cocos游戲開(kāi)發(fā)中實(shí)現(xiàn)模型展示效果。

本期知識(shí)點(diǎn)

1.RenderTexture

渲染貼圖是Camera或Canvas組件的渲染目標(biāo)對(duì)象,渲染管線會(huì)使用它的RenderWindow作為渲染的目標(biāo)窗口。

我們可以把相機(jī)畫面渲染到它上面,然后將精靈Sprite的貼圖資源設(shè)置成它。

2.Camera

渲染場(chǎng)景中的相機(jī)對(duì)象,由項(xiàng)目層的Camera管理。

我們可以通過(guò)它的targetTexture指定此相機(jī)的渲染輸出目標(biāo)貼圖,默認(rèn)為屏幕。

3.SpriteFrame

精靈幀資源。

我們通過(guò)SpriteFrame的texture設(shè)置貼圖對(duì)象資源,可以是TextureBase類型。

3D模型渲染到2D界面實(shí)例

接下來(lái)我們來(lái)實(shí)現(xiàn)和平精英中3D模型渲染到2D界面的模型展示效果。

1.環(huán)境

引擎版本:Cocos Creator 3.8.1

編程語(yǔ)言:TypeScript

2.資源準(zhǔn)備

創(chuàng)建一個(gè)新工程,按照指定結(jié)構(gòu)搭建UI。

然后把商城上的雞帶走并做成預(yù)制體借用一下。

3.編寫代碼

新建一個(gè)ModelRtt組件,并拖到ModelSprite上。其中包含幾個(gè)屬性。

  • modelUrl,模型的路徑,通過(guò)resources.load加載。
  • modelOffsetY,模型的偏移,用于調(diào)整模型顯示的位置。
  • orthoHeight,相機(jī)的正交視角高度,用于調(diào)整模型的大小。
  • modelSprite,目標(biāo)精靈。
export class ModelRtt extends Component {    @property(CCString)    modelUrl: string = "";    @property(CCFloat)    modelOffsetY: number = 0;    @property(CCFloat)    orthoHeight: number = 0;    modelSprite: Sprite = null;}

最后通過(guò)以下步驟完成3D模型渲染到2D界面。

  • 創(chuàng)建RenderTexture,大小建議512、1024或者2048。
const size = this.node.getComponent(UITransform).contentSize;const modelRtt = new RenderTexture();modelRtt.reset({    width: size.width,    height: size.height});
  • 創(chuàng)建模型,并且設(shè)置偏移。
const newNode = new Node();newNode.parent = find("/");const modelNode: Node = instantiate(prefab);modelNode.parent = newNode;modelNode.setPosition(new Vec3(0, this.modelOffsetY, 0));
  • 進(jìn)行拖拽事件的監(jiān)聽(tīng)和實(shí)現(xiàn)模型轉(zhuǎn)動(dòng)。
let flag = false;this.node.on(NodeEventType.TOUCH_START, () => { flag = true; }, this);this.node.on(NodeEventType.TOUCH_END, () => { flag = true; }, this);this.node.on(NodeEventType.TOUCH_MOVE, (event: EventTouch) => {    if (flag) {        modelNode.eulerAngles = new Vec3(0, modelNode.eulerAngles.y + event.getDeltaX(), 0);    }}, this);
  • 獲取場(chǎng)景中創(chuàng)建的攝像機(jī),并設(shè)置一些相關(guān)參數(shù)。
// const camera = new Node("Camera").addComponent(Camera); //todo:動(dòng)態(tài)添加的Camera模型不會(huì)動(dòng) const camera = this.node.getComponentInChildren(Camera);camera.clearFlags = Camera.ClearFlag.SOLID_COLOR; //設(shè)置緩沖清楚標(biāo)志位camera.projection = renderer.scene.CameraProjection.ORTHO; //設(shè)置相機(jī)投影類型camera.orthoHeight = this.orthoHeight; //設(shè)置正交視角高度camera.clearColor = new Color(0, 0, 0, 0); //設(shè)置透明camera.targetTexture = modelRtt; //設(shè)置目標(biāo)RenderTexturecamera.node.parent = newNode;camera.node.position = new Vec3(0, 0, 10);
  • 設(shè)置目標(biāo)精靈的精靈幀。
const spriteFrame = new SpriteFrame();spriteFrame.texture = modelRtt;spriteFrame.flipUVY = true;this.modelSprite.spriteFrame = spriteFrame;

4.效果演示

【100個(gè)Cocos實(shí)例】實(shí)現(xiàn)和平精英中3D模型渲染到2D界面的模型展示效果

原文鏈接:點(diǎn)擊咨詢

熱門課程推薦

熱門資訊

請(qǐng)綁定手機(jī)號(hào)

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請(qǐng)保持電話暢通!
確定