Всем привет!! Меня озадачила одна ситуация! когда я начал изучать компьютерную графику я не смог понять как устроены локальные системы координат
прошу Вас помочь мне!! покажите на примере из DirectX Sample Browser: Tutorial 3 как будет выглядеть в коде вращение двух треугольников в разных осях вращения
пока я только понял место, где нужно это сделать +)
Код | //----------------------------------------------------------------------------- // Name: InitGeometry() // Desc: Creates the scene geometry //----------------------------------------------------------------------------- HRESULT InitGeometry() { // Initialize three vertices for rendering a triangle CUSTOMVERTEX g_Vertices[] = { { -1.0f,-1.0f, 0.0f, 0xffff0000, }, // сам треугольник { 1.0f,-1.0f, 0.0f, 0xff0000ff, }, { 0.0f, 1.0f, 0.0f, 0xffffffff, },
};
// Create the vertex buffer. if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3 * sizeof( CUSTOMVERTEX ), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) ) { return E_FAIL; }
// Fill the vertex buffer. VOID* pVertices; if( FAILED( g_pVB->Lock( 0, sizeof( g_Vertices ), ( void** )&pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, g_Vertices, sizeof( g_Vertices ) ); g_pVB->Unlock();
return S_OK; }
|
и это место:
Код | VOID Setuptest1() { // For our world matrix, we will just rotate the object about the y-axis. D3DXMATRIXA16 matWorld;
// Set up the rotation matrix to generate 1 full rotation (2*PI radians) // every 1000 ms. To avoid the loss of precision inherent in very high // floating point numbers, the system time is modulated by the rotation // period before conversion to a radian angle. UINT iTime = timeGetTime() % 1000; FLOAT fAngle = iTime * ( 2.0f * D3DX_PI ) / 1000.0f; D3DXMatrixRotationY( &matWorld, fAngle ); g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
// Set up our view matrix. A view matrix can be defined given an eye point, // a point to lookat, and a direction for which way is up. Here, we set the // eye five units back along the z-axis and up three units, look at the // origin, and define "up" to be in the y-direction. D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f ); D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f ); D3DXMATRIXA16 matView; D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
// For the projection matrix, we set up a perspective transform (which // transforms geometry from 3D view space to 2D viewport space, with // a perspective divide making objects smaller in the distance). To build // a perpsective transform, we need the field of view (1/4 pi is common), // the aspect ratio, and the near and far clipping planes (which define at // what distances geometry should be no longer be rendered). D3DXMATRIXA16 matProj; D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI / 4, 1.0f, 1.0f, 100.0f ); g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj ); }
|
прошу помочь немного апгрейдить код)))
Спасибо всем, кто откликнеться))
Добавлено @ 13:19 легким движением руки я добавил еще один треугольник
Код | CUSTOMVERTEX g_Vertices[] = { { -1.0f,-1.0f, 0.0f, 0xffff0000, }, // сам треугольник { 1.0f,-1.0f, 0.0f, 0xff0000ff, }, { 0.0f, 1.0f, 0.0f, 0xffffffff, },
{ 1.2f, 0.0f, 0.0f, 0xffff0000, }, // еще один { 1.4f, 0.0f, 0.0f, 0xff0000ff, }, { 1.3f, 1.0f, 0.0f, 0xffffffff, }, };
|
теперь шаг за вами, помогите создать ему свою ось вращения, чтобы он стал самостоятельным треугольником =))))
прикрепил сам проект
Модератор: используйте подсветку кода |