如何在 Creator3D 中切換模型貼圖,超級簡單!
效果預覽
前兩天有夥伴在 QQ 上詢問,如何在 Creator 3D 中切換模型貼圖。Shawn 之前也沒嘗試過,不過根據之前 Cocos Creator 的經驗以及這幾天對 Creator 3D 的學習,簡單嘗試了一下,方法可行,在此將它分享給大家。
模型材質資源
在 Creator 3D 中,一個 3D 物體主要由 ModelComponent 元件進行渲染,其中包含兩大部分:
- Mesh:物體的形狀,它是一組3維座標上的點集
- 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 Native中Navigator的基本使用,實現簡單的頁面之間的跳轉和頁面資料傳遞
效果如下:很簡單的例子,大佬勿噴啊... 點選檢視多少錢後,自動跳轉到超市頁面,點選回答價格後,自動跳轉回顧客介面,並傳遞引數回去。 在我使用的0.57.0的版本中,Navigator已被移除,
安卓手機PDF轉word的方法,超級簡單實用~
現在無論是日常工作還是生活中,Word文件、Excel文件、PPT文件都是我們會經常遇見的,當遇到兩種格式需要相互轉換的時候,該怎麼辦呢?今天小編就和大家介紹一下最常見的PDF轉換成word方法,剩下的轉換也可以仿照下面的步驟來實現。 轉換步驟: 1、首先將PD