ACAPI_Body_AddPolygon
바디 데이터 객체에 폴리곤을 추가합니다.
GSErrCode ACAPI_Body_AddPolygon ( void* bodyData, Int32* edges, Int32 nEdges, Int32 polyNormal, API_MaterialOverrideType material, UInt32& index );
파라미터
- bodyData
- [in] 폴리곤을 추가할 바디 데이터 객체입니다.
- edges
- [in] 폴리곤의 모서리들의 리스트입니다.
- nEdges
- [in]
edges
배열의 크기입니다. - polyNormal
- [in] 법선 벡터의 부호화된 인덱스입니다.
- material
- [in] 폴리곤의 재질 오버라이드 structure입니다.
- index
- [out] 생성된 폴리곤의 인덱스입니다.
리턴 값
NoError
- 함수가 성공적으로 완료되었습니다.
APIERR_BADPARS
- 전달된 파라미터가
NULL
입니다;bodyData
- 3개 미만의 모서리들이 전달되었습니다;
edges, nEdges
다른 공통 API 오류들에 대해서는 API 오류 문서를 보십시오.
설명
이 함수는 바디 데이터 객체에 폴리곤을 추가하는 데 사용합니다.
edges
리스트는 ACAPI_Body_AddEdge 함수가 리턴한 모서리 인덱스들을 포함하고 있습니다. 이 리스트는 다음과 같은 형태를 갖고 있어야 합니다:
- 먼저 외곽 모서리들의 인덱스들을 폴리곤을 반시계 방향으로 둘러싸듯이 전달하십시오. (모서리는 음수 인덱스를 이용하여 반대 방향으로 사용할 수 있음)
- 각 구멍의 경우 0을 전달하십시오. 그리고 나서 구멍 외곽 모서리들의 인덱스들을 시계 방향 순서대로 전달하십시오.
nEdges
는 edges
배열의 크기입니다. (그래서 이 숫자는 구멍 모서리들 전에 나오는 0들도 포함하고 있음)
polyNormal
은 ACAPI_Body_AddPolyNormal 함수가 리턴한 법선 벡터의 인덱스입니다.
- 음수 값은 이 벡터가 반대 방향으로 사용된다는 것을 의미합니다. (그래서 정육면체는 6개가 아닌 3개의 법선 벡터들로 생성될 수 있음)
- 만약 0을 전달하면, 법선 벡터는 자동으로 계산됩니다. 그러나 이렇게 하면 중복을 감지하지 못해서 동일한 벡터가 여러 번 생성될 수도 있습니다. (여러 개의 폴리곤들을 포함하는 하나의 평면은 각 폴리곤에 대하여 동일한 법선 벡터를 생성함)
예제
// 새로운 모프 요소 설정 API_Element element; BNZeroMemory (&element, sizeof (API_Element)); element.header.typeID = API_MorphID; GSErrCode err = ACAPI_Element_GetDefaults (&element, NULL); // 새로운 메모 설정 API_ElementMemo memo; BNZeroMemory (&memo, sizeof (API_ElementMemo)); // 새로운 바디 데이터 객체를 생성함 void* bodyData = NULL; err = ACAPI_Body_Create(NULL, NULL, &bodyData); API_Coord3D coord; UInt32 vertices[8]; Int32 edges[8]; Int32 polyNormals[1]; UInt32 polygons[1]; // 정사각형 외곽의 정점들을 추가 coord.x = -2.0; coord.y = -2.0; coord.z = 0.0; err = ACAPI_Body_AddVertex(bodyData, coord, vertices[0]); coord.x = 2.0; coord.y = -2.0; coord.z = 0.0; err = ACAPI_Body_AddVertex(bodyData, coord, vertices[1]); coord.x = 2.0; coord.y = 2.0; coord.z = 0.0; err = ACAPI_Body_AddVertex(bodyData, coord, vertices[2]); coord.x = -2.0; coord.y = 2.0; coord.z = 0.0; err = ACAPI_Body_AddVertex(bodyData, coord, vertices[3]); // 정사각형 구멍의 정점들을 추가 coord.x = -1.0; coord.y = -1.0; coord.z = 0.0; err = ACAPI_Body_AddVertex(bodyData, coord, vertices[4]); coord.x = 1.0; coord.y = -1.0; coord.z = 0.0; err = ACAPI_Body_AddVertex(bodyData, coord, vertices[5]); coord.x = 1.0; coord.y = 1.0; coord.z = 0.0; err = ACAPI_Body_AddVertex(bodyData, coord, vertices[6]); coord.x = -1.0; coord.y = 1.0; coord.z = 0.0; err = ACAPI_Body_AddVertex(bodyData, coord, vertices[7]); // 정사각형 외곽의 모서리들을 추가 err = ACAPI_Body_AddEdge(bodyData, vertices[0], vertices[1], edges[0]); err = ACAPI_Body_AddEdge(bodyData, vertices[1], vertices[2], edges[1]); err = ACAPI_Body_AddEdge(bodyData, vertices[2], vertices[3], edges[2]); err = ACAPI_Body_AddEdge(bodyData, vertices[3], vertices[1], edges[3]); // 정사각형 구멍의 모서리들을 추가 err = ACAPI_Body_AddEdge(bodyData, vertices[4], vertices[5], edges[4]); err = ACAPI_Body_AddEdge(bodyData, vertices[5], vertices[6], edges[5]); err = ACAPI_Body_AddEdge(bodyData, vertices[6], vertices[7], edges[6]); err = ACAPI_Body_AddEdge(bodyData, vertices[7], vertices[4], edges[7]); // 법선 벡터 추가 API_Vector3D normal; normal.x = normal.y = 0.0; normal.z = 1.0; err = ACAPI_Body_AddPolyNormal(bodyData, normal, polyNormals[0]); // add square polygon with square hole (with surface material override enabled) Int32 polyEdges[] = { edges[0], edges[1], edges[2], edges[3], 0, -edges[7], -edges[6], -edges[5], -edges[4] }; API_MaterialOverrideType material; material.material = 1; material.overrideMaterial = true; err = ACAPI_Body_AddPolygon(bodyData, polyEdges, 9, polyNormals[0], material, polygons[0]); // 결과로 나온 바디와 재질들을 메모에 삽입 err = ACAPI_Body_Finish(bodyData, &memo.morphBody, &memo.morphMaterialMapTable); // 모프 요소를 생성함 err = ACAPI_Element_Create (&element, &memo); // 바디 데이터 객체 & 메모를 폐기함 err = ACAPI_Body_Dispose(&bodyData); err = ACAPI_DisposeElemMemoHdls (&memo);
요구사항
- 버전: API 16 또는 이후
- 헤더: ACAPinc.h
참고사항
ACAPI_Body_AddVertex, ACAPI_Body_AddEdge, ACAPI_Body_AddPolyNormal,
ACAPI_Body_Create, ACAPI_Body_Finish, ACAPI_Body_Dispose,
바디 관리자, API 함수