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 함수