コード例 #1
0
void D_ShotObj::DrawShot()
{

	RotationAngleZ = Angle + 90;
	D3DXMatrixAffineTransformation2D(&Transform, Scale, nullptr,to_radians(RotationAngleZ), &OFFSET);

	SpriteBatch->SetTransform(&Transform);
	SpriteBatch->Draw(Texture, &SourceRect, &D3DXVECTOR3(Origin.x, Origin.y, 0), nullptr, D3DCOLOR_ARGB(255, 255, 255, 255));

}
コード例 #2
0
void HUD::Draw()
{
	SetScreenViewport();
	D3DXMATRIX temp;
	D3DXMatrixAffineTransformation2D(&temp, 1, nullptr, 0, nullptr);
	SpriteBatch->SetTransform(&temp);
	SpriteBatch->Begin(D3DXSPRITE_ALPHABLEND);
	DrawFrame();
	DrawHUD();
	SpriteBatch->End();
}
コード例 #3
0
ファイル: Main.cpp プロジェクト: bafory/DTX
void render()

{
	/*
	Логика движения через препятствие
	*/
	if(step > -110){
		  tranY = 50;
		alpha = 1.5708;
		
	  step1 = step1 + 7;
	  if(step1 > yHeight){
		  tranX = -yHeight;
		  tranY = yHeight;
		   alpha = -0,7854 ;
		   step2 = step2 +7;
	

	  }
	  if(step2 > xLength){
		  tranX = xLength;
		  tranY = 2*yHeight+xLength;
		  alpha = -1.5708;
		  step3 = step3 + 7;
	  }
	  if (step3 > yHeight)
	  {
		  tranX = -2*yHeight+40;
		  tranY = 0;
		   alpha = 0,7854;
		   step4 = step4 + 10;
		   if(step4 > 200){
		      
			EnableWindow( GetDlgItem( g_hWnd,  editid1), true );
		    EnableWindow( GetDlgItem( g_hWnd,  editid2), true );
		    xLength = 0;
		    yHeight = 0;
			state = 0;
	    	step = -700;
            step1 = 0;
            step2 = 0;
            step3= 0;
            step4=0;
			tranX = 0;
		    tranY = 0;
		KillTimer(g_hWnd, 1); 
		incrementX = 0;
		   }
	  }
	  
	  
	
  }
	if( g_pd3dDevice == NULL)
		return;
	/*
	Выключаем отвещение
	*/
	g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
	g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
	InitialBufferVershin();


	/*
	Два спрайта(картинки), подгрузка той или иной картинки в зависимости от state (остатка от деления)
	*/
	 state = state % 2;
  if(state != 0){
	  D3DXCreateSprite(g_pd3dDevice, &g_pD3DXSprite );
    D3DXCreateTextureFromFileEx(
    g_pd3dDevice,
    "C:\\3.dds",                // Our texture image!
    D3DX_DEFAULT,               // width
    D3DX_DEFAULT,               // height
    D3DX_DEFAULT,               // MIP levels
    0,                          // usage
    D3DFMT_DXT1,                // texture format
    D3DPOOL_MANAGED,            // mem pool
    D3DX_DEFAULT,               // filter
    D3DX_DEFAULT,               // MIP filter
    0,                          // transparent color key
    NULL,                       // image info struct
    NULL,                       // palette
    &g_pTexture);               // the returned texture, if success
	incrementX = incrementX + 15;
	step = step + 15;
  } if (state == 0) {
  D3DXCreateSprite(g_pd3dDevice, &g_pD3DXSprite );
    D3DXCreateTextureFromFileEx(
    g_pd3dDevice,
    "C:\\2.dds",                // Our texture image!
    D3DX_DEFAULT,               // width
    30,               // height
    D3DX_DEFAULT,               // MIP levels
    0,                          // usage
    D3DFMT_DXT1,                // texture format
    D3DPOOL_MANAGED,            // mem pool
    D3DX_DEFAULT,               // filter
    D3DX_DEFAULT,               // MIP filter
    0,                          // transparent color key
    NULL,                       // image info struct
    NULL,                       // palette
    &g_pTexture);               // the returned texture, if success
	
  }
	
	
	/*
	Этот метод закрашивает задний буфер (BackBuffer) указанным цветом.
	1. обозначает количество прямоугольников для очистки области вывода 
	   (0 обозначает, что очистке подвергается вся область вывода)
	2. указатель на массив, содержащий набор величин типа TRect. 
	   Каждая отдельная структура указывает, какое место в поверхности вывода 
	   следует очищать (значение NULL требует очистки всей поверхности отображения)
	3. что именно (какую поверхность) следует очищать. В данном случае очистке подвергается
	   только поверхность вывода. Кроме этого, метод Clear может использоваться для очистки
	   Z-буфера (константа D3DCLEAR_ZBUFFER) и буфера трафарета (константа D3DCLEAR_STENCIL) 
	4. указывает, каким цветом следует заполнять поверхность рендеринга. D3DCOLOR_XRGB(Red,Green,Blue)
	   возвращает цвет из трех составляющих – красного, зеленого и синего цветов.
	   Значения параметров должны лежать в диапазоне [0,…,255].
	5. указывает значение, которым будет заполнен буфер глубины (Z-буфер). 
	   Значения этого параметра должны лежать в диапазоне [0.0,…,1.0],
	   где 0 – соответствует ближайшей границе, 1 – дальней. 
	6. задает значение для заполнения буфера шаблона (Трафарет буфера).
	*/ 
    g_pd3dDevice->Clear( 0,
		                 NULL,
						 D3DCLEAR_TARGET,
		                 D3DCOLOR_XRGB(0,0,0),
						 1.0f,
						 0 ); 

	
   
	/*
	Вывод примитивов на экран
	BeginScene() информирует устройство вывода (видеокарту), что следует 
	 подготовиться к воспроизведению результатов. 
    EndScene() сообщает устройству о том, что процесс воспроизведения для 
	 текущего кадра закончен и теперь можно осуществлять переключение буферов рендеринга

	
	И последний шаг – вывод примитивов на экран. Библиотека Direct3D позволяет
	выводить данные в несколько потоков. Созданный буфер вершин является примером 
	одного такого потока. Вначале вывода сцены на экран необходимо связать наш буфер 
	вершин с одним из потоков данных. Это реализуется с помощью вызова метода 
	SetStreamSource интерфейса IDirect3DDevice9.
	1. определяет номер потока вывода. Если в программе используется только один буфер вершин, то этот параметр должен быть 0
	2. содержит указатель на переменную, ассоциированную с буфером вершин.
	3. Третий – определяет смещение от начала буфера, с которого нужно производить считывание данных.
	4. задает размер одной вершины в байтах.

	Далее необходимо указать формат выводимых вершин. Это проделывается с 
	помощью вызова метода SetFVF интерфейса IDirect3DDevice9. И затем 
	производится непосредственный вывод примитивов с помощью функции
	DrawPrimitive интерфейса IDirect3DDevice9. Метод DrawPrimitive имеет три параметра:
	1. тип выводимых примитивов
	2. индекс начальной выводимой вершины
	3. определяет количество выводимых примитивов

	Библиотека Direct3D имеет богатый набор по способу отображения выводимых примитивов.
	Программист может указать нужный ему способ отображения полигонов с 
	помощью задания режима воспроизведения. Существует три режима воспроизведения полигонов:
	1. режим вершинной модели определяет вывод только вершин полигонов без ребер и 
	   без закраски внутренних точек примитива и реализуется с помощью вызова метода
	   SetRenderState(D3DRS_FILLMODE, D3DFILL_POINT) интерфейса IDirect3DDevice9;
    2. режим каркасной модели задает вывод только ребер полигонов без закраски
	   внутренних точек примитива и реализуется с помощью вызова метода 
	   SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME) интерфейса IDirect3DDevice9;
    3. режим сплошной модели определяет вывод полигонов с закрашенными внутренними 
	   точками и реализуется с помощью вызова метода 
	   SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID) интерфейса IDirect3DDevice9.

    Кроме того, сплошная модель вывода подразделяется на два вида закрашивания:
	плоское заполнение либо закрашивание с интерполяцией. Первое реализуется через
	вызов метода SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT), 
	второе через SetRenderState(D3DRS_SHADEMODE, D3DSHADE_ GOURAUD).
	*/
	
	/*
	Матрица для спрайта
	*/
	D3DXVECTOR2 rot = D3DXVECTOR2(0, 0);
	D3DXVECTOR2 trans = D3DXVECTOR2(tranX, tranY);
    D3DXMATRIX mat;

    g_pd3dDevice->BeginScene();	 
	
	
       D3DXVECTOR3 vecPos = D3DXVECTOR3(-700 + incrementX, 0,0);

    if (g_pD3DXSprite && g_pTexture)
    {
		D3DXMatrixAffineTransformation2D(&mat, 1, &rot, 
			alpha, &trans);
        g_pD3DXSprite->Begin( D3DXSPRITE_ALPHABLEND );
		Matrix();
		g_pD3DXSprite->SetTransform(&mat);
        g_pD3DXSprite->Draw(g_pTexture, NULL, NULL, &vecPos, 0xffffffff);
        g_pD3DXSprite->End();
    }
	  

	   Matrix();
	   g_pd3dDevice->SetStreamSource(0, pBufferVershin, 0, sizeof(CUSTOMVERTEX));
       g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
       g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
    g_pd3dDevice->EndScene();

    /*
	Следующий шаг процесса рендеринга – это непосредственный вывод содержимого заднего буфера (BackBuffer)
	в окно визуализации. Этот шаг еще называют переключением буферов, и осуществляется он с помощью метода
	Present интерфейса IDirect3DDevice9.
	Интерес здесь представляет, как правило, только третий параметр. Если он равен нулю, то идентификатор окна, 
	в который происходит вывод, берется из ранее установленного, при создании устройства. 
	Все остальные параметры выставляют, как правило, в NULL.
	*/
    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}