반응형



http://www.gpgstudy.com/forum/viewtopic.php?p=30027


폴리곤중간의 텍스처 좌표 구하기 

 
잠김[?]   GpgStudy 게시판 인덱스 -> 수학-물리학-이론
이전 주제 보기 :: 다음 주제 보기  
글쓴이메시지
psyche04



가입: 2004년 4월 8일
올린 글: 282
소속: 누리엔 소프트웨어

올리기폴리곤중간의 텍스처 좌표 구하기올려짐: 2005-05-12 14:54
인용과 함께 답변 이 게시물을 del.icio.us에 추가

삼각 폴리곤의 세 월드 좌표(A,B,C)를 알고, 각각의 텍스처 좌표(Ua, Ub, Uc)도 알고 있습니다. 

폴리곤 내부의 있는 임의의 좌표(P)를 알때 P에 해당하는 텍스처 좌표를 알아내는 방법좀 알려주세요..
_________________
지켈섭 nao
위로
사용자 정보 보기 쪽지 보내기
moofasa



가입: 2004년 8월 2일
올린 글: 158
소속: 모은행

올리기픽셀 셰이더를 이용해도 값자체를 뽑아낼 순는 없을것이고...올려짐: 2005-05-12 17:58
인용과 함께 답변 이 게시물을 del.icio.us에 추가

http://mathworld.wo...ineIntersection.html 

이런 방법을 이용해서 직접적으로 계산해야하지 않을까요.
위로
사용자 정보 보기 쪽지 보내기
류광



가입: 2001년 7월 25일
올린 글: 3569
소속: GPGstudy


타 사이트 ID(?):
docbook.kr::류광, indidev.net::류광
올리기올려짐: 2005-05-12 18:19
인용과 함께 답변 이 게시물을 del.icio.us에 추가

삼각형 꼭지점들에 대한 한 점의 상대적인 위치 관계를 텍스처 좌표들에 적용하면 풀리는 문제인데요. 그런 목적에 적합한 것이 무게중심 좌표(Barycentric Coordinates)입니다. 

구글링을 해보시거나... 정보문화사 3D 수학 2nd 가지고 계시면 5장에 나와 있습니다(찾아보기에서 무게중심 좌표를 찾으세요...)
위로
사용자 정보 보기 쪽지 보내기 글 올린이의 웹사이트 방문
비회원
손님





올리기dxsdk 에 있습니다.올려짐: 2005-05-12 20:32
인용과 함께 답변 이 게시물을 del.icio.us에 추가

버젼은 지금 자세히 기억은 안나지만 튜토리얼중 마우스 피킹소스보시면 
현재 피킹된 위치, uv 좌표값 다 나옵니다.
위로
비회원
손님





올리기^^올려짐: 2005-05-13 13:55
인용과 함께 답변 이 게시물을 del.icio.us에 추가

질문: 삼각 폴리곤의 세 월드 좌표(A,B,C)를 알고, 각각의 텍스처 좌표(Ua, Ub, Uc)도 알고 있습니다. 
폴리곤 내부의 있는 임의의 좌표(P)를 알때 P에 해당하는 텍스처 좌표를 알아내는 방법좀 알려주세요.. 

안녕하세여 이스입니다. 
앞에 있는 분이 dx교차루틴을 보면 된다고 하셨는데 그 루틴은 레이와 삼각형의 교차로 인해서 
u,v값을 구하는것이기 때문에..질문에 사용하기에는 다소 문제가 있다고 여겨집니다. 
w= 1- u -v 

류광님께서 언급하셨듯이 이것은 한점을 세개의 삼각형의 정점의 무게중심좌표로 표현해야합니다. 
즉 한점이 세점간의 가중치의 결과로 해석이 되야합니다. 
알려고 하는 한점에서 삼각형의 세 정점에 직선을 연결한후에 나온 세부 삼각형을 
A,B,C라 할때 
따라서 u = A /삼각형의 전체 면적,v = B/삼각형의 전체 면적 w= C/삼각형의 전체 면적 
로 구해야 합니다. 이때 삼각형의 방향성에 따라서 u,v,w가 정해지기때문에 
방향성에 주의하셔야 하구여.. 

검색하면 이 부분을 코드로 해놓은 것들이 보이기 때문에 쉽게 찾을수 있다고 여겨집니다. 
일단 개념은 이것이구여.. 

도움이 되면 좋겠습니다. 
꾸벅 
이스 올림 
^.^v
위로
psyche04



가입: 2004년 4월 8일
올린 글: 282
소속: 누리엔 소프트웨어

올리기올려짐: 2005-05-13 16:12
인용과 함께 답변 이 게시물을 del.icio.us에 추가

코드:
inline BOOL _CheckCollision_Triangle(	const __Vector3& vOrig, const __Vector3& vDir,		const __Vector3& v0, 	const __Vector3& v1,  const __Vector3& v2, float& fT,  float& fU,
                float& fV, __Vector3* pVCol)
{
    // Find vectors for two edges sharing vert0
    static __Vector3 vEdge1, vEdge2, pVec, tVec, qVec;
	
    vEdge1 = v1 - v0;
    vEdge2 = v2 - v0;

    // Begin calculating determinant - also used to calculate U parameter
    pVec.Cross(vEdge1, vEdge2);
    float fDet = pVec.Dot(vDir);
    if ( fDet > -0.0001f )
        return FALSE;

    pVec.Cross(vDir, vEdge2);

    // If determinant is near zero, ray lies in plane of triangle
    fDet = vEdge1.Dot(pVec);
    if( fDet < 0.0001f )	 return FALSE;

    // Calculate distance from vert0 to ray origin
    tVec = vOrig - v0;

    // Calculate U parameter and test bounds
    fU = tVec.Dot(pVec);
    if( fU < 0.0f || fU > fDet )
        return FALSE;

    // Prepare to test V parameter
    qVec.Cross(tVec, vEdge1);

    // Calculate V parameter and test bounds
    fV = D3DXVec3Dot( &vDir, &qVec );
    if( fV < 0.0f || fU + fV > fDet )
        return FALSE;

    // Calculate t, scale parameters, ray intersects triangle
    fT = D3DXVec3Dot( &vEdge2, &qVec );
    float fInvDet = 1.0f / fDet;
    fT *= fInvDet;
    fU *= fInvDet;
    fV *= fInvDet;

    if(pVCol) (*pVCol) = vOrig + (vDir * fT);	// 접점을 계산..

    // *t < 0 이면 뒤쪽...
    if ( fT < 0.0f )
        return FALSE;

    return TRUE;
}


먼저 답변들 감사합니다... 
이함수 보고,, u,v가 나오는걸로 텍스처좌표들 보간에 사용해서 해결은 했는데요.. 
확실히 이해못하고 해결해 버려서 좀 찝찝하네요.. 
UVout = (*pUV1 - *pUV0)*u + (*pUV2 - *pUV0)*v + *pUV0; 
u, v를 이렇게 사용하니.. 결과는 정확하게 나오는데.. 
내적값을 fInvDet로 곱해서.. 나오는데.. 이해를 못하겠어요.. ㅠ.ㅠ 
뽀록 프로그래머..ㅠ.ㅠ
_________________
지켈섭 nao
위로
사용자 정보 보기 쪽지 보내기
jeddli



가입: 2001년 8월 6일
올린 글: 138
소속: NeowizGames

올리기최적화된 형태라..올려짐: 2005-05-14 11:38
인용과 함께 답변 이 게시물을 del.icio.us에 추가

연산을 줄이기 위해 사전에 수학적으로 최적화된 형태라 
코드만 보고 이해하기에는 무리가 따를겁니다. 
그부분에 대한 알고리즘은 Realtime rendering 등의 책에서 
소개하고 있으니 참고를 하면서 보시면 이해하는데 도움이 되실겁니다. 
GPG여기 어딘가 쓰레드를 뒤지면 예전에 논의된 내용이 있으니 찾아보셔도 될겁니다.
위로
사용자 정보 보기 쪽지 보내기 MSN 메신저
Gamza



가입: 2001년 10월 11일
올린 글: 610

올리기올려짐: 2005-08-04 14:22
인용과 함께 답변 이 게시물을 del.icio.us에 추가

원리는 아래글에 정리되어있습니다. 
2D로 하나 3D로 하나 마찬가지겠죠 
http://www.gamza.ne...p;page=0&depth=1

_________________
HOME: http://www.Gamza.net
위로
사용자 정보 보기 쪽지 보내기 글 올린이의 웹사이트 방문 MSN 메신저

반응형

'수학 (Mathematics) > 3D수학' 카테고리의 다른 글

Z-Fighting  (0) 2012.11.02
직교투영 확대 축소  (0) 2012.11.02
[D3DX] Vertex Normal  (0) 2012.11.02
Directx Aspect 비율  (0) 2012.11.02
회전행렬에서 회전축'회전각의 분리(angular displacement)  (0) 2012.11.02

+ Recent posts