1. 程式人生 > >如何在 Creator3D 中切換模型貼圖,超級簡單!

如何在 Creator3D 中切換模型貼圖,超級簡單!

效果預覽

前兩天有夥伴在 QQ 上詢問,如何在 Creator 3D 中切換模型貼圖。Shawn 之前也沒嘗試過,不過根據之前 Cocos Creator 的經驗以及這幾天對 Creator 3D 的學習,簡單嘗試了一下,方法可行,在此將它分享給大家。

模型材質資源

在 Creator 3D 中,一個 3D 物體主要由 ModelComponent 元件進行渲染,其中包含兩大部分:

  1. Mesh:物體的形狀,它是一組3維座標上的點集
  2. Material:物體的表現,材質資源以及材質所使用的紋理貼圖

在 Creator3D 編輯中,我們可通過圖形化拖動的方式修改材質貼圖,如下圖:

上圖中,先使用引擎內建的無光照的 Effect,它的選項看起來沒那麼多,可以減少畏懼感,我們將一 ground 的圖片拖動到 test.mtl 材質資源上。

然後將 test 材質拖動到 Cube 物體的 ModelComponent 元件上:

設定好後你就可以看到 Cube 上的像石頭一樣的材質表現了。

使用指令碼修改材質紋理

我這裡建立了一個 test.ts 的指令碼檔案,用於修改材質上的紋理資源,先看下元件屬性:

注意 3D 物體上的貼圖不是Cocos Creator中的 SpriteFrame,而是 Texture2D 型別,下面是 Texture1、Texture2屬性定義:

@ccclass("test")
export class test extends Component {
    
    @property({type: Texture2D })
    texture1: Texture2D = null;

    @property(Texture2D)
    texture2: Texture2D = null;

}

複雜資料型別需要給 @property 輸入一個 type 引數,同時下面一行,需要給變數設定為null,不然在屬性面板上不顯示。

紋理資源已經設定好了,如何通過程式碼訪問或修改材質呢?經過Shawn的一陣摸索,發現還是非常簡單的,使用材質對像的getProperty、setProperty就可以搞定:

swithcTextue() {
    //獲取ModelComponent元件
    let modelComponent = this.getComponent(ModelComponent);
    //獲取0號材質
    let material = modelComponent.materials[0];
    //獲取紋理 
    let texture = material.getProperty('mainTexture');
    //設定紋理
    material.setProperty('mainTexture', texture === this.texture1 ? this.texture2 : this.texture1);
}

material.setProperty的引數是Key和Value,分別對應材質面板上的Key與紋理物件,看下圖:

用material.setProperty也是同理,如果你是使用的標準Effect,也是用同樣的方法:

只需要將材質屬性中的屬性名,首字母小寫就可以了!

小結

本篇介紹了使用 material.setProperty 修改材質紋理。最後我們思考一個問題,如果有兩個 3D 物理,使用了同一個材質資源,在編輯器中修改材質貼圖你會發現兩個物理都會同時發生變化,看下圖:

如果我們是用程式碼,在執行時修改了任意一個 3D 物體上的材質屬性,另一個 3D 物體的材質會變嗎?Shawn做了一下測試,但並沒有變,看下面的效果:

之前 Shawn 在想,如果執行時也會變的話,比如生成一桌子的麻將牌,豈不是要為每一紋理建立一個材質資源,現在好像擔心多了!

最後感謝你的閱讀,原創不易,求個贊!願我們在前進的道路上砥礪前行,共同成長!

相關推薦

如何在 Creator3D 切換模型超級簡單

效果預覽 前兩天有夥伴在 QQ 上詢問,如何在 Creator 3D 中切換模型貼圖。Shawn 之前也沒嘗試過,不過根據之前 Cocos Creator 的經驗以及這幾天對 Creator 3D 的學習,簡單嘗試了一下,方法可行,在此將它分享給大家。 模型材質資源 在 Creator 3D 中,一個 3

如何利用Chrom瀏覽器實現滾動截不用下載外掛超級簡單

相信很多開發者在開發手機端專案的時候,會在瀏覽器按照不同機型開啟檢視效果,可是截圖只能擷取可視區的圖片,我想截全屏網頁內容怎麼辦呢?我看很多百度出來的都是說下載安裝外掛什麼的,覺得很麻煩,跟我來,簡單實現,方法如下: 第一步: 開啟開發者工具 ctrl+shif

Unity的www網路下載類(以替換模型為例說明)

一、編寫給模型替換貼圖的指令碼 /*** * * Title: * 網路基礎 * * * Description: * 功能: * WWW 下載類的學習 * * Date: 20

Unity的法線、漫反射及高光

我們都知道,一個三維場景的畫面的好壞,百分之四十取決於模型,百分之六十取決於貼圖,可見貼圖在畫面中所佔的重要性。在這裡我將列舉一些貼圖,並且初步闡述其概念,理解原理的基礎上製作貼圖,也就順手多了。 我在這裡主要列舉幾種UNITY3D中常用的貼圖,與大家分享,希望對大家有幫助。  

Android OpenGLES2.0(十六)——3D模型及光照處理(obj+mtl)

在Android OpenGLES2.0(十四)——Obj格式3D模型載入中實現了Obj格式的3D模型的載入,載入的是一個沒有貼圖,沒有光照處理的帽子,為了呈現出立體效果,“手動”加了光照,擁有貼圖的紋理及光照又該怎麼載入呢? 模型檔案 本篇部落格例子中

OpenGL顯示背景

轉載請宣告出處:http://blog.csdn.net/xiaoge132/article/details/51448326 導言: 通常在OpenGL裡面繪製的都是預設的黑色背景,對於有些時候,

讓我們來匯出unity3d的mainTexture轉換儲存為png

有這麼一個需求,我們知道unity3d的模型一般用fbx格式進行匯入的。 但fbx裡面所引用的貼圖檔案格式那就是很多,比如TGA,DDS,BMP,等等,各式各樣。 我的想法很簡單,就是把這些貼圖匯出成PNG就行了。 大家覺得會說,你用其它軟體進行批量轉換不就好了?這個可以有

置換法線和凹凸詳解

Normal Mapping在遊戲領域中的實踐是一個非常值得記住的時期--Geforce3上市,GPU概念出現,硬體可程式設計流水線的出現(Shaders),Normal Mapping是一種凹凸貼圖技術,它的另外一個名字叫做Dot3 bump mapping。 用於實現它的控制紋理是一張叫做Normal M

Web在jsp頁面生成柱狀折線餅狀

一、前言 在實際開發過程中,柱狀圖,折線圖,餅狀圖在一些OA,ERP中是非常常見的功能,特別是需求方是業務型,資料分析型公司,下面的例子簡單實現了餅狀圖,柱狀圖,折線圖在jsp中生成。(ps:新手上路,不喜勿噴) 二、前期準備 1.使用的框架:s

GLSL入門2 關於GLSL的紋理

我將註解以及原始碼直接放到這裡了 // GLSL01.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> #include <fstream> #include <G

unity法線光線烘培的應用

法線貼圖 法線貼圖是比較常用的一種貼圖,作用是使一些面數比較少的模型的紋理更加的精緻和逼真。這樣在大幅度減少了執行的效能消耗,也能達到比較好的遊戲畫面。unity3d中有比較簡單的法線貼圖,就是看起來與3D效果無異的2D貼圖。如果做3D模型的話,就會浪費顯示晶

Unity Shader 在Shader使用法線

首先我們在Unity中建立一個小球 然後通過"Create->Shader->Standard Surface Shader"建立一個表面著色器,並修改名字為Diffuse Bump 然後通過"Create->Material"建立一個材質,並修改名字為

three.js 用文字作為

閒來無事,把three.js其中有一個例子改了一下,變成從一箇中心點噴射出中文字的例子, 效果圖: 下面直接貼程式碼好了 html: <html lang="en"> <head> <title>three.js ca

threejs第五篇【一條龍測試之四 threejs 給obj模型

由於OBJ沒有紋理資訊, 需要threejs來載入外部貼圖,來指定給模型! //模型需要紋理Texture         var texture = new THREE.Texture();         var loader = new THREE.ImageLoad

使用FreeImage在OpenGL生成影象的方法

這是之前做本科畢設時碰到的問題,拖到現在才有時間整理,沒想到一轉眼已經在研究生實驗室了,時間飛逝啊~ 言歸正傳,當時我需要在OpenGL中重繪FBX格式的三維模型,由於不同美工人員給人物模型貼的圖可能是不同格式的,因此需要解析不同格式的貼圖,然後將該貼圖的長、

2.x終於照著教程成功使用OpenGL ES 繪製紋理增加了灰度

在之前成功繪製變色的幾何圖形之後,今天利用Openg ES的可程式設計管線繪製出第一張紋理。學校時候不知道OpenGL的重要性,怕晦澀的語法,沒有跟老師學習OpenGL的環境配置,如今只能利用cocos2dx 2.2.3 配置好的環境學習OpenGL ES。原始碼來自《co

Linux命令大全之三——Linux文檔編輯命令超級

sage 換行符 fields ups repeat nrv 小寫 關閉自動 backups 本篇文章主要介紹了Linux文檔編輯命令。詳細整理了各個命令的功能、語法以及參數,很幹貨~趕緊學起來吧! col 功能說明:過濾控制字符。語  法:col?[-bfx][-l&l

iOS陣列去重的方法超級簡單

//最近新發現的一個數組去重,用不著迴圈,一句程式碼搞定 //去除陣列中重複的 NSArray *oldArr = @[@"1",@"2",@"3",@"4",@"5",@"6",@"2",@"3"]; NSArray *newarr = [oldArr valueForKeyPath:

React NativeNavigator的基本使用實現簡單的頁面之間的跳轉和頁面資料傳遞

效果如下:很簡單的例子,大佬勿噴啊...           點選檢視多少錢後,自動跳轉到超市頁面,點選回答價格後,自動跳轉回顧客介面,並傳遞引數回去。   在我使用的0.57.0的版本中,Navigator已被移除,

安卓手機PDF轉word的方法超級簡單實用~

現在無論是日常工作還是生活中,Word文件、Excel文件、PPT文件都是我們會經常遇見的,當遇到兩種格式需要相互轉換的時候,該怎麼辦呢?今天小編就和大家介紹一下最常見的PDF轉換成word方法,剩下的轉換也可以仿照下面的步驟來實現。 轉換步驟: 1、首先將PD