유니티 소스의 정점 데이터만 얻으면
먼저
점운 데이터를 처리하는 연구를 진행했기 때문에 3D 역할의 점운 데이터도 원한다.
유니티도 오랫동안 사용하지 않아서 잘 모르겠어요.
최종적으로 정점수 * 비트의 행렬을 얻는다.
참고 문서:http://backbone-studio.com/brog-unity01/
유니티 소스
Asset Store에서 Unity 소스, unitychan을 다운로드합니다.prefab를 Hierarchy 뷰로 드래그합니다.
unitychan.prefab의 구조를 관찰하면 다음과 같다.
mesh_루트라는 빈 대상의 하위 대상에는 각각의 부품이 있으며, 각각 Skinned Mesh Render라는 정점 정보의 격자를 추가합니다.
여기서 얻으면 돼.
코드
다음 코드를 쓰십시오.
PointCloud.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChildAccess : MonoBehaviour {
public string filename = "test";
void Start () {
// 頂点数を数える
int vtx_num = 0;
foreach(Transform child in gameObject.transform){
SkinnedMeshRenderer skin = child.GetComponent<SkinnedMeshRenderer>();
vtx_num += skin.sharedMesh.vertices.Length;
}
Vector3[] vtx_posi_array = new Vector3[vtx_num];
// 頂点座標を取得
int count = 0;
foreach(Transform child in gameObject.transform){
SkinnedMeshRenderer skin = child.GetComponent<SkinnedMeshRenderer>();
Mesh child_mesh = skin.sharedMesh;
for(int i = 0; i < child_mesh.vertices.Length; i++){
float x = child_mesh.vertices[i].x;
float y = child_mesh.vertices[i].y;
float z = child_mesh.vertices[i].z;
vtx_posi_array[count] = new Vector3(x, y, z);
count++;
}
}
// csvファイルに書き込む
try{
filename = filename + ".csv";
bool append = false;
using(var sw = new System.IO.StreamWriter(@filename, append))
{
for(int i = 0; i < vtx_posi_array.Length; ++i){
sw.WriteLine("{0},{1},{2}", vtx_posi_array[i].x, vtx_posi_array[i].y, vtx_posi_array[i].z);
}
}
}
catch(System.Exception e)
{
Debug.Log(e.Message);
}
}
void Update () {
}
}
간단히 말해 mesh_루트의 하위 대상을 순서대로 스캔하고 정점 좌표를 얻습니다. 좌표의 배열에 저장하고 마지막으로 csv 파일로 출력합니다.
이 파일을 mesh_로 설정루트에만 추가하면 실행됩니다. 최종적으로 11407*3의 행렬을 얻을 수 있습니다.
끝내다
정점의 색 정보를 더해 정점수*(차원수+3색)의 행렬을 얻으려고 했지만 제대로 완성하지 못했다.
다른 방법을 시도해 볼 수 있을 것 같습니다.
또 다른 3D 모델이 이런 구조라면 이 파일을 사용할 수 있다면 어떨까요.
© UTJ/UCL
Reference
이 문제에 관하여(유니티 소스의 정점 데이터만 얻으면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Torihaka1/items/910d1365dddc031aecaf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Asset Store에서 Unity 소스, unitychan을 다운로드합니다.prefab를 Hierarchy 뷰로 드래그합니다.
unitychan.prefab의 구조를 관찰하면 다음과 같다.
mesh_루트라는 빈 대상의 하위 대상에는 각각의 부품이 있으며, 각각 Skinned Mesh Render라는 정점 정보의 격자를 추가합니다.
여기서 얻으면 돼.
코드
다음 코드를 쓰십시오.
PointCloud.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChildAccess : MonoBehaviour {
public string filename = "test";
void Start () {
// 頂点数を数える
int vtx_num = 0;
foreach(Transform child in gameObject.transform){
SkinnedMeshRenderer skin = child.GetComponent<SkinnedMeshRenderer>();
vtx_num += skin.sharedMesh.vertices.Length;
}
Vector3[] vtx_posi_array = new Vector3[vtx_num];
// 頂点座標を取得
int count = 0;
foreach(Transform child in gameObject.transform){
SkinnedMeshRenderer skin = child.GetComponent<SkinnedMeshRenderer>();
Mesh child_mesh = skin.sharedMesh;
for(int i = 0; i < child_mesh.vertices.Length; i++){
float x = child_mesh.vertices[i].x;
float y = child_mesh.vertices[i].y;
float z = child_mesh.vertices[i].z;
vtx_posi_array[count] = new Vector3(x, y, z);
count++;
}
}
// csvファイルに書き込む
try{
filename = filename + ".csv";
bool append = false;
using(var sw = new System.IO.StreamWriter(@filename, append))
{
for(int i = 0; i < vtx_posi_array.Length; ++i){
sw.WriteLine("{0},{1},{2}", vtx_posi_array[i].x, vtx_posi_array[i].y, vtx_posi_array[i].z);
}
}
}
catch(System.Exception e)
{
Debug.Log(e.Message);
}
}
void Update () {
}
}
간단히 말해 mesh_루트의 하위 대상을 순서대로 스캔하고 정점 좌표를 얻습니다. 좌표의 배열에 저장하고 마지막으로 csv 파일로 출력합니다.
이 파일을 mesh_로 설정루트에만 추가하면 실행됩니다. 최종적으로 11407*3의 행렬을 얻을 수 있습니다.
끝내다
정점의 색 정보를 더해 정점수*(차원수+3색)의 행렬을 얻으려고 했지만 제대로 완성하지 못했다.
다른 방법을 시도해 볼 수 있을 것 같습니다.
또 다른 3D 모델이 이런 구조라면 이 파일을 사용할 수 있다면 어떨까요.
© UTJ/UCL
Reference
이 문제에 관하여(유니티 소스의 정점 데이터만 얻으면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Torihaka1/items/910d1365dddc031aecaf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChildAccess : MonoBehaviour {
public string filename = "test";
void Start () {
// 頂点数を数える
int vtx_num = 0;
foreach(Transform child in gameObject.transform){
SkinnedMeshRenderer skin = child.GetComponent<SkinnedMeshRenderer>();
vtx_num += skin.sharedMesh.vertices.Length;
}
Vector3[] vtx_posi_array = new Vector3[vtx_num];
// 頂点座標を取得
int count = 0;
foreach(Transform child in gameObject.transform){
SkinnedMeshRenderer skin = child.GetComponent<SkinnedMeshRenderer>();
Mesh child_mesh = skin.sharedMesh;
for(int i = 0; i < child_mesh.vertices.Length; i++){
float x = child_mesh.vertices[i].x;
float y = child_mesh.vertices[i].y;
float z = child_mesh.vertices[i].z;
vtx_posi_array[count] = new Vector3(x, y, z);
count++;
}
}
// csvファイルに書き込む
try{
filename = filename + ".csv";
bool append = false;
using(var sw = new System.IO.StreamWriter(@filename, append))
{
for(int i = 0; i < vtx_posi_array.Length; ++i){
sw.WriteLine("{0},{1},{2}", vtx_posi_array[i].x, vtx_posi_array[i].y, vtx_posi_array[i].z);
}
}
}
catch(System.Exception e)
{
Debug.Log(e.Message);
}
}
void Update () {
}
}
정점의 색 정보를 더해 정점수*(차원수+3색)의 행렬을 얻으려고 했지만 제대로 완성하지 못했다.
다른 방법을 시도해 볼 수 있을 것 같습니다.
또 다른 3D 모델이 이런 구조라면 이 파일을 사용할 수 있다면 어떨까요.
© UTJ/UCL
Reference
이 문제에 관하여(유니티 소스의 정점 데이터만 얻으면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Torihaka1/items/910d1365dddc031aecaf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)