directx 지형 수정사항
programming/direct3d 2024. 7. 26. 10:16 |
for( DWORD i = 0; i < m_rCheckIBZ ; i++ )
{ if( intersect ) break; for( DWORD k = 0; k < m_rCheckIBX ; k++) { if( intersect ) break; long tempVB = rSNum + (((m_rIndexSizeZ) ) * i) + ( k * 3 ) - m_fixedRPoint; static DWORD ibNum = 0; if( tempVB < 0 ) { continue ; } else if( tempVB >= ((long)m_rIndexTotalSize)-3 ) { break ; } else { ibNum = tempVB ;} if( IntersectTriangle( m_pickOrig, m_pickDir, m_pReferVB[m_pReferIB[ibNum]], m_pReferVB[m_pReferIB[ibNum+1]], m_pReferVB[m_pReferIB[ibNum+2]], &scale[0], &scale[1], &scale[2] ) ) { m_pickPos = m_pickOrig + ( m_pickDir * scale[0] ); D3DXVECTOR2 transV(0.0f, 0.0f); DWORD transX = 0, transZ = 0 ; transV.x = m_pickPos.x / 8.0f * m_intervalRate + m_checkX ; transV.y = m_pickPos.z / 8.0f * m_intervalRate - m_checkZ ; transX = (DWORD)( ( transV.x < 0 ) ? transV.x * -1.0f : transV.x ); transZ = (DWORD)( ( transV.y < 0 ) ? transV.y * -1.0f : transV.y ); sNum = transX + transZ * m_vbSizeX ; m_pLineVB->Lock( 0, 0, (void**)&pVertices, 0 ) ; pVertices[0].v = m_pickPos ; pVertices[1].v = D3DXVECTOR3( m_pickPos.x, m_maxminY, m_pickPos.z ) ; m_pLineVB->Unlock() ; rSNum = ( ibNum%2 == 0 ) ? ibNum : ibNum - 3 ; intersect = TRUE ; break; } } } |
최적화를위해 일반 메모리의 픽킹에서
실제 좌표를 이용해 해당 VB의 번호를 직접 구해냄
일반메모리의 참조 범위를
횡렬 리딩에서 범위 리딩으로 수정함
'programming > direct3d' 카테고리의 다른 글
directx 지형 알파 멀티텍스쳐의 복수 사용 (0) | 2024.07.26 |
---|---|
directx 지형 알파 텍스쳐 입히기 (0) | 2024.07.26 |
directx 지형 추가사항 (0) | 2024.07.26 |
다이렉트x 3d 지형 - 맵툴 (0) | 2024.07.26 |
IntersectTriangle 픽킹 (0) | 2024.07.26 |