大家好!我寫了一個(gè)教程已經(jīng)有一段時(shí)間了。在本文中,我們將研究虛幻引擎4.您可以在此處了解有關(guān)Unreal以及如何安裝虛幻引擎4的更多信息。我非常喜歡Unreal的圖形質(zhì)量。它的圖形質(zhì)量無與倫比,可以免費(fèi)使用!那么,讓我們開始吧!
您還需要安裝VisualStudio(Windows)或XCode(Mac)。這些程序可能在安裝時(shí)帶有Unreal,但如果沒有,請(qǐng)確保安裝它。
一旦安裝了虛幻引擎和VisualStudio或XCode,就可以啟動(dòng)最新版本的Unreal和啟動(dòng)C ++項(xiàng)目。目前,我們不需要擔(dān)心Blueprint& C ++項(xiàng)目。選擇一個(gè)基本模板。
這個(gè)過程需要一些時(shí)間。完成后,它將如下所示。如果選擇了C ++項(xiàng)目,則可以在左下角的內(nèi)容瀏覽器中看到名為C ++類的文件夾。在左側(cè),您有模式窗口,您可以從中選擇不同的默認(rèn)3D模型和其他組件。玩它。您的VisualStudio或XCode也必須同時(shí)打開。
在Unreal中,所有對(duì)象都被視為Actors,輸入被視為Pawn等等。由于我們正在制作自己的3D模型,因此我們需要有一個(gè)actor類。
右鍵單擊內(nèi)容窗口,然后選擇一個(gè)新的C ++類。將其擴(kuò)展為演示類。
導(dǎo)航到Visual Studio。 (如果您在Blueprint類中創(chuàng)建actor,它將自動(dòng)打開Visual Studio。)您可以在Solution Explorer窗口中瀏覽您的類。
我們將使用 UProceduralMeshComponent 來構(gòu)建網(wǎng)格。網(wǎng)格是用于制作演示或?qū)ο蟮慕Y(jié)構(gòu)。導(dǎo)航到 Build.cs文件并添加以下行。
PublicDependencyModuleNames.AddRange(new string[] { “Core”, “CoreUObject”, “Engine”, “InputCore”, “ProceduralMeshComponent”, “ShaderCore”, “RenderCore” , “RHI”});
注意:如果在任何時(shí)候出現(xiàn)錯(cuò)誤,您可以隨時(shí)關(guān)閉VisualStudio并轉(zhuǎn)到文件資源管理器中的項(xiàng)目文件夾。右鍵單擊。 uproject 并選擇生成項(xiàng)目文件。如果編譯器發(fā)出錯(cuò)誤,我們需要這樣做。 (但如果錯(cuò)誤是因?yàn)椤?’),這無濟(jì)于事。
現(xiàn)在,再次打開VisualStudio。瀏覽actor類的頭文件(.h)。在底部但在大括號(hào)下添加以下代碼。
private:
UPROPERTY(VisibleAnywhere, Category = Materials)
class UProceduralMeshComponent* mesh;
可能會(huì)顯示錯(cuò)誤 - 您知道解決方案。
現(xiàn)在在你演示的 .cpp類。包括UProcedural頭類。
#include “ProceduralMeshComponent.h”
現(xiàn)在,使用三角形或面生成網(wǎng)格。你可以拿任何物件。在其他情況下,您會(huì)注意到它由許多三角形或面組成。
要?jiǎng)?chuàng)建網(wǎng)格,我們需要頂點(diǎn),三角形(或面),法線,紋理,顏色和切線。您可以在文檔中閱讀有關(guān)它們的所有信息。
現(xiàn)在,您可以想象對(duì)象中三角形的數(shù)量取決于頂點(diǎn)的數(shù)量。如果3有頂點(diǎn),則將有1個(gè)三角形。如果有4個(gè)頂點(diǎn),那么你將有2個(gè)三角形。我們也需要牢記這些。
這次我們正在制作一個(gè)廣場。您可以將此代碼添加到A ()函數(shù)中的。 cpp文件。
mesh = CreateDefaultSubobject(TEXT(“mesh”));
RootComponent = mesh;
TArray vertices;
vertices.Add(FVector(0, 0, 0)); // 0th vertice
vertices.Add(FVector(0, 100, 0)); // 1th vertice
vertices.Add(FVector(0, 0, 100)); // 2nd vertice
vertices.Add(FVector(0, 100, 100)); // 3rd vertice
TArray Traingle;
//I have created 4 triangle because we need to make sure it is rendered from behind as well. Otherwise, the object will be seen from front only and not from behind.
Traingle.Add(0);
Traingle.Add(1); // for front face - clockwise direction
Triangle.Add(2);
Triangle.Add(1);
Triangle.Add(2); // for front face - clockwise direction
Triangle.Add(3);
Triangle.Add(2);
Triangle.Add(1); // for back face - anti-clockwise direction
Triangle.Add(0);
Triangle.Add(3);
Triangle.Add(2); // for back face - anti-clockwise direction
Triangle.Add(1);
TArray normals;
normals.Add(FVector(1, 0, 0));
normals.Add(FVector(1, 0, 0));
normals.Add(FVector(1, 0, 0)); // you need to calculate the direction of normals, using 3d vectors.
normals.Add(FVector(1, 0, 0));
TArray UV0;
UV0.Add(FVector2D(1, 1));
UV0.Add(FVector2D(0, 1));
UV0.Add(FVector2D(1, 0));
UV0.Add(FVector2D(0, 0));
TArray vertexColors;
vertexColors.Add(FLinearColor(0.75, 0.00, 0.00, 1.0));
vertexColors.Add(FLinearColor(0.75, 0.00, 0.00, 1.0));
vertexColors.Add(FLinearColor(0.75, 0.00, 0.75, 1.0)); // the 4th argument determines alpha value (0,1)
vertexColors.Add(FLinearColor(0.75, 0.00, 0.75, 1.0));
TArray tangents;
tangents.Add(FProcMeshTangent(0, 1, 0));
tangents.Add(FProcMeshTangent(0, 1, 0));
tangents.Add(FProcMeshTangent(0, 1, 0));
tangents.Add(FProcMeshTangent(0, 1, 0));
mesh-》CreateMeshSection_LinearColor(1, vertices, Square, normals, UV0, vertexColors, tangents, false);
我們的網(wǎng)格創(chuàng)建到此結(jié)束!您可以保存并編譯它?,F(xiàn)在,如果你在場景中拖動(dòng)你的演員,它將編譯一個(gè)正方形!
您可以嘗試評(píng)論其他2個(gè)三角形并進(jìn)行編譯。一個(gè)廣場仍然會(huì)出現(xiàn),但試著從后面看到它。你將無法做到。
現(xiàn)在,如果您向其添加任何材質(zhì)(或圖像),如果它被顛倒或以其他方式渲染或光線較低。您需要在Triangle TArray和Normals中調(diào)整頂點(diǎn)位置。
您可以嘗試制作更復(fù)雜的模型或使用obj文件。你需要為obj模型創(chuàng)建一個(gè)解析器來獲取頂點(diǎn),法線等。你需要知道一件事,那就是Texures = UV。使用該解析器,您可以填充值并獲得這樣的模型。
-
3D模型
+關(guān)注
關(guān)注
1文章
72瀏覽量
15755 -
虛幻引擎
+關(guān)注
關(guān)注
0文章
14瀏覽量
4070
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論