提交 cfa12a8c 编写于 作者: H happyfire

Refractor, make RenderingObject a component.

上级 24b17e28
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<LangVersion>latest</LangVersion> <LangVersion>8.0</LangVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
...@@ -52,13 +52,16 @@ ...@@ -52,13 +52,16 @@
<UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget> <UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget>
<UnityVersion>2020.3.25f1c1</UnityVersion> <UnityVersion>2020.3.25f1c1</UnityVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Analyzer Include="C:\Program Files (x86)\Microsoft Visual Studio Tools for Unity\16.0\Analyzers\Microsoft.Unity.Analyzers.dll" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Assets\URasterizer\Codes\RenderingObject.cs" /> <Compile Include="Assets\URasterizer\Codes\RenderingObject.cs" />
<Compile Include="Assets\URasterizer\Codes\StatsPanel.cs" />
<Compile Include="Assets\URasterizer\Codes\CameraRenderer.cs" /> <Compile Include="Assets\URasterizer\Codes\CameraRenderer.cs" />
<Compile Include="Assets\URasterizer\Codes\Triangle.cs" /> <Compile Include="Assets\URasterizer\Codes\Triangle.cs" />
<Compile Include="Assets\URasterizer\Codes\Rasterizer.cs" /> <Compile Include="Assets\URasterizer\Codes\Rasterizer.cs" />
<Compile Include="Assets\URasterizer\Codes\TransformTool.cs" /> <Compile Include="Assets\URasterizer\Codes\TransformTool.cs" />
<Compile Include="Assets\URasterizer\Codes\StatsPanel.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="UnityEngine"> <Reference Include="UnityEngine">
......
...@@ -12,9 +12,8 @@ namespace URasterizer ...@@ -12,9 +12,8 @@ namespace URasterizer
public RawImage rawImg; public RawImage rawImg;
public Color ClearColor = Color.black; public Color ClearColor = Color.black;
public Transform[] objNodes; private List<RenderingObject> renderingObjects = new List<RenderingObject>();
private RenderingObject[] renderingObjects;
private Camera _camera; private Camera _camera;
public bool WireframeMode; public bool WireframeMode;
...@@ -33,23 +32,31 @@ namespace URasterizer ...@@ -33,23 +32,31 @@ namespace URasterizer
{ {
_camera = GetComponent<Camera>(); _camera = GetComponent<Camera>();
//collect render objects var rootObjs = this.gameObject.scene.GetRootGameObjects();
renderingObjects = new RenderingObject[objNodes.Length]; renderingObjects.Clear();
for (int i = 0; i < objNodes.Length; ++i) foreach(var o in rootObjs)
{ {
renderingObjects[i] = new RenderingObject(objNodes[i]); renderingObjects.AddRange(o.GetComponentsInChildren<RenderingObject>());
} }
Debug.Log($"Find rendering objs count:{renderingObjects.Count}");
if (objNodes.Length == 0) //ֶõmesh
{ {
renderingObjects = new RenderingObject[1];
var _mesh = new Mesh var _mesh = new Mesh
{ {
vertices = new Vector3[] { new Vector3(1f, 0f, -2f), new Vector3(0f, 2f, -2f), new Vector3(-1f, 0f, -2f), vertices = new Vector3[] { new Vector3(1f, 0f, -2f), new Vector3(0f, 2f, -2f), new Vector3(-1f, 0f, -2f),
new Vector3(1.5f, 0.5f, -1.5f), new Vector3(0.5f, 2.5f, -1.5f), new Vector3(-0.5f, 0.5f, -1.5f)}, new Vector3(1.5f, 0.5f, -1.5f), new Vector3(0.5f, 2.5f, -1.5f), new Vector3(-0.5f, 0.5f, -1.5f)},
triangles = new int[] { 0, 1, 2, 3, 4, 5 } triangles = new int[] { 0, 1, 2, 3, 4, 5 }
}; };
renderingObjects[0] = new RenderingObject(_mesh); var go = new GameObject("_handmake_mesh_");
var ro = go.AddComponent<RenderingObject>();
ro.mesh = _mesh;
go.AddComponent<MeshFilter>().mesh = _mesh;
go.AddComponent<MeshRenderer>();
renderingObjects.Add(ro);
} }
RectTransform rect = rawImg.GetComponent<RectTransform>(); RectTransform rect = rawImg.GetComponent<RectTransform>();
...@@ -69,9 +76,12 @@ namespace URasterizer ...@@ -69,9 +76,12 @@ namespace URasterizer
var r = _rasterizer; var r = _rasterizer;
r.Clear(BufferMask.Color | BufferMask.Depth); r.Clear(BufferMask.Color | BufferMask.Depth);
for(int i=0; i<renderingObjects.Length; ++i) for(int i=0; i<renderingObjects.Count; ++i)
{ {
r.Draw(renderingObjects[i], _camera, WireframeMode); if (renderingObjects[i].gameObject.activeInHierarchy)
{
r.Draw(renderingObjects[i], _camera, WireframeMode);
}
} }
r.UpdateFrame(); r.UpdateFrame();
......
...@@ -168,15 +168,18 @@ namespace URasterizer ...@@ -168,15 +168,18 @@ namespace URasterizer
} }
//backface culling //backface culling
Vector3 v0 = new Vector3(v[0].x, v[0].y, v[0].z); if (!ro.DoubleSideRendering)
Vector3 v1 = new Vector3(v[1].x, v[1].y, v[1].z);
Vector3 v2 = new Vector3(v[2].x, v[2].y, v[2].z);
Vector3 e01 = v1 - v0;
Vector3 e02 = v2 - v0;
Vector3 cross = Vector3.Cross(e01, e02);
if(cross.z <= 0)
{ {
continue; Vector3 v0 = new Vector3(v[0].x, v[0].y, v[0].z);
Vector3 v1 = new Vector3(v[1].x, v[1].y, v[1].z);
Vector3 v2 = new Vector3(v[2].x, v[2].y, v[2].z);
Vector3 e01 = v1 - v0;
Vector3 e02 = v2 - v0;
Vector3 cross = Vector3.Cross(e01, e02);
if (cross.z <= 0)
{
continue;
}
} }
...@@ -200,9 +203,9 @@ namespace URasterizer ...@@ -200,9 +203,9 @@ namespace URasterizer
{ {
t.SetPosition(k, v[k]); t.SetPosition(k, v[k]);
} }
t.SetColor(0, Color.red); t.SetColor(0, ro.Color0);
t.SetColor(1, Color.green); t.SetColor(1, ro.Color1);
t.SetColor(2, Color.blue); t.SetColor(2, ro.Color2);
//Rasterization //Rasterization
if (wireframeMode) if (wireframeMode)
......
...@@ -3,22 +3,22 @@ using UnityEngine; ...@@ -3,22 +3,22 @@ using UnityEngine;
namespace URasterizer namespace URasterizer
{ {
public class RenderingObject public class RenderingObject: MonoBehaviour
{ {
public Transform transform;
public Mesh mesh; public Mesh mesh;
public bool DoubleSideRendering;
public Color Color0 = Color.red;
public Color Color1 = Color.green;
public Color Color2 = Color.blue;
private void Awake()
public RenderingObject(Transform node)
{
transform = node;
mesh = node.GetComponent<MeshFilter>().mesh;
}
public RenderingObject(Mesh mesh)
{ {
this.mesh = mesh; var meshFilter = GetComponent<MeshFilter>();
} if(meshFilter != null)
{
mesh = meshFilter.mesh;
}
}
// TRS // TRS
public Matrix4x4 GetModelMatrix() public Matrix4x4 GetModelMatrix()
......
...@@ -207,13 +207,14 @@ GameObject: ...@@ -207,13 +207,14 @@ GameObject:
- component: {fileID: 256726194} - component: {fileID: 256726194}
- component: {fileID: 256726193} - component: {fileID: 256726193}
- component: {fileID: 256726192} - component: {fileID: 256726192}
- component: {fileID: 256726196}
m_Layer: 0 m_Layer: 0
m_Name: Cube m_Name: Cube
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!65 &256726192 --- !u!65 &256726192
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -290,6 +291,23 @@ Transform: ...@@ -290,6 +291,23 @@ Transform:
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 4 m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &256726196
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 256726191}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 275ec1cd091f7d54cb532cf4c552b27a, type: 3}
m_Name:
m_EditorClassIdentifier:
mesh: {fileID: 0}
DoubleSideRendering: 0
Color0: {r: 1, g: 0, b: 0, a: 1}
Color1: {r: 0, g: 1, b: 0, a: 1}
Color2: {r: 0, g: 0, b: 1, a: 1}
--- !u!1 &264331597 --- !u!1 &264331597
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -379,7 +397,6 @@ MonoBehaviour: ...@@ -379,7 +397,6 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
rawImg: {fileID: 129304943} rawImg: {fileID: 129304943}
ClearColor: {r: 0, g: 0, b: 0, a: 0.5019608} ClearColor: {r: 0, g: 0, b: 0, a: 0.5019608}
objNodes: []
WireframeMode: 0 WireframeMode: 0
--- !u!1 &870169031 --- !u!1 &870169031
GameObject: GameObject:
...@@ -560,6 +577,7 @@ GameObject: ...@@ -560,6 +577,7 @@ GameObject:
- component: {fileID: 963210797} - component: {fileID: 963210797}
- component: {fileID: 963210796} - component: {fileID: 963210796}
- component: {fileID: 963210795} - component: {fileID: 963210795}
- component: {fileID: 963210799}
m_Layer: 0 m_Layer: 0
m_Name: Sphere m_Name: Sphere
m_TagString: Untagged m_TagString: Untagged
...@@ -644,6 +662,23 @@ Transform: ...@@ -644,6 +662,23 @@ Transform:
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 6 m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &963210799
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963210794}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 275ec1cd091f7d54cb532cf4c552b27a, type: 3}
m_Name:
m_EditorClassIdentifier:
mesh: {fileID: 0}
DoubleSideRendering: 0
Color0: {r: 1, g: 0, b: 0, a: 1}
Color1: {r: 0, g: 1, b: 0, a: 1}
Color2: {r: 0, g: 0, b: 1, a: 1}
--- !u!1 &1292409238 --- !u!1 &1292409238
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -735,6 +770,7 @@ GameObject: ...@@ -735,6 +770,7 @@ GameObject:
- component: {fileID: 1297680262} - component: {fileID: 1297680262}
- component: {fileID: 1297680261} - component: {fileID: 1297680261}
- component: {fileID: 1297680260} - component: {fileID: 1297680260}
- component: {fileID: 1297680264}
m_Layer: 0 m_Layer: 0
m_Name: Quad m_Name: Quad
m_TagString: Untagged m_TagString: Untagged
...@@ -819,6 +855,23 @@ Transform: ...@@ -819,6 +855,23 @@ Transform:
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 5 m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1297680264
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1297680259}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 275ec1cd091f7d54cb532cf4c552b27a, type: 3}
m_Name:
m_EditorClassIdentifier:
mesh: {fileID: 0}
DoubleSideRendering: 1
Color0: {r: 1, g: 0, b: 0, a: 1}
Color1: {r: 0, g: 1, b: 0, a: 1}
Color2: {r: 0, g: 0, b: 1, a: 1}
--- !u!1 &1825649040 --- !u!1 &1825649040
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -831,13 +884,14 @@ GameObject: ...@@ -831,13 +884,14 @@ GameObject:
- component: {fileID: 1825649043} - component: {fileID: 1825649043}
- component: {fileID: 1825649042} - component: {fileID: 1825649042}
- component: {fileID: 1825649041} - component: {fileID: 1825649041}
- component: {fileID: 1825649045}
m_Layer: 0 m_Layer: 0
m_Name: Capsule m_Name: Capsule
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!136 &1825649041 --- !u!136 &1825649041
CapsuleCollider: CapsuleCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -915,6 +969,23 @@ Transform: ...@@ -915,6 +969,23 @@ Transform:
m_Father: {fileID: 963210798} m_Father: {fileID: 963210798}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1825649045
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1825649040}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 275ec1cd091f7d54cb532cf4c552b27a, type: 3}
m_Name:
m_EditorClassIdentifier:
mesh: {fileID: 0}
DoubleSideRendering: 0
Color0: {r: 1, g: 0, b: 0, a: 1}
Color1: {r: 0, g: 1, b: 0, a: 1}
Color2: {r: 0, g: 0, b: 1, a: 1}
--- !u!1 &1899433433 --- !u!1 &1899433433
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册