亚洲AV免费看深爱成人|日韩av另类一级特黄片在线|中国免费一级黄片|国产av一二三区|亚洲有码AV在线|久久亚洲国产日韩欧美|成人免费AV网站|婷婷一区综合一区|亚洲AV无码导航|高级欧美成人网站

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

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

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

引言

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

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

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

本期知識點

1.RenderTexture

渲染貼圖是Camera或Canvas組件的渲染目標對象,渲染管線會使用它的RenderWindow作為渲染的目標窗口。

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

2.Camera

渲染場景中的相機對象,由項目層的Camera管理。

我們可以通過它的targetTexture指定此相機的渲染輸出目標貼圖,默認為屏幕。

3.SpriteFrame

精靈幀資源。

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

3D模型渲染到2D界面實例

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

1.環(huán)境

引擎版本:Cocos Creator 3.8.1

編程語言:TypeScript

2.資源準備

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

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

3.編寫代碼

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

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

最后通過以下步驟完成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));
  • 進行拖拽事件的監(jiān)聽和實現(xiàn)模型轉(zhuǎn)動。
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);
  • 獲取場景中創(chuàng)建的攝像機,并設(shè)置一些相關(guān)參數(shù)。
// const camera = new Node("Camera").addComponent(Camera); //todo:動態(tài)添加的Camera模型不會動 const camera = this.node.getComponentInChildren(Camera);camera.clearFlags = Camera.ClearFlag.SOLID_COLOR; //設(shè)置緩沖清楚標志位camera.projection = renderer.scene.CameraProjection.ORTHO; //設(shè)置相機投影類型camera.orthoHeight = this.orthoHeight; //設(shè)置正交視角高度camera.clearColor = new Color(0, 0, 0, 0); //設(shè)置透明camera.targetTexture = modelRtt; //設(shè)置目標RenderTexturecamera.node.parent = newNode;camera.node.position = new Vec3(0, 0, 10);
  • 設(shè)置目標精靈的精靈幀。
const spriteFrame = new SpriteFrame();spriteFrame.texture = modelRtt;spriteFrame.flipUVY = true;this.modelSprite.spriteFrame = spriteFrame;

4.效果演示

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

原文鏈接:點擊咨詢

熱門課程推薦

熱門資訊

請綁定手機號

x

同學(xué)您好!

您已成功報名0元試學(xué)活動,老師會在第一時間與您取得聯(lián)系,請保持電話暢通!
確定