Example #1
0
void CGameRenderer::DrawBackground(float x){
  
	const float delta = 2.0f * g_nScreenWidth;
	float fQuantizeX = delta * (int)(100/delta - 1.0f) + g_nScreenWidth; ///< Quantized x coordinate

	//set vertex buffer to background
	m_d3ddevice->SetStreamSource(0, m_pBackgroundVB, 0, sizeof(BILLBOARDVERTEX));
	m_d3ddevice->SetFVF(BILLBOARDVERTEX::FVF); //flexible vertex format

	//draw floor
	if(g_bWireFrame)m_d3ddevice->SetTexture(0, m_pWireframeTexture); //set wireframe texture
	else m_d3ddevice->SetTexture(0, m_pBackgroundTexture); //set floor texture

	SetWorldMatrix(fQuantizeX);
	m_d3ddevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
	SetWorldMatrix(fQuantizeX-delta);
	m_d3ddevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);

	/*draw backdrop
	if(!g_bWireFrame)
		m_d3ddevice->SetTexture(0, m_pBackgroundTexture); //set cloud texture
		SetWorldMatrix(fQuantizeX);
		m_d3ddevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 2, 2);
		SetWorldMatrix(fQuantizeX-delta);
		m_d3ddevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 2, 2);
	*/
} //DrawBackground
Example #2
0
void CModel::ResetTransform(){
	for( CEntity *child=Children();child;child=child->Next() ){
		if( CModel *model=dynamic_cast<CModel*>( child ) ) model->ResetTransform();
	}
	TransformSurfaces( WorldMatrix() );
	SetWorldMatrix( CMat4() );
}
Example #3
0
//-----------------------------------------------------------------------------
// Desc: 渲染场景
//-----------------------------------------------------------------------------
VOID Render()
{
	// 清除缓冲区
	g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 
		D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

	//开始渲染场景
	if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
	{
		SetWorldMatrix();  //设置世界矩阵

		//逐块渲染网格模型
		for( DWORD i=0; i<g_dwNumMaterials; i++ )
		{
			//设置材料和纹理
			g_pd3dDevice->SetMaterial( &g_pMeshMaterials[i] );
			g_pd3dDevice->SetTexture( 0, g_pMeshTextures[i] );

			//渲染模型
			g_pMesh->DrawSubset( i );
		}

		//场景渲染结束
		g_pd3dDevice->EndScene();
	}

	//在屏幕上显示场景
	g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
Example #4
0
	//プレートの作成
	void GameStage::CreatePlate(){
		//ステージへのゲームオブジェクトの追加
		auto Ptr = AddGameObject<GameObject>();
		auto PtrTransMatrix = Ptr->GetComponent<TransformMatrix>();
		Quaternion Qt;
		Qt.RotationRollPitchYawFromVector(Vector3(XM_PIDIV2, 0, 0));
		Matrix4X4 WorldMat;
		WorldMat.DefTransformation(
			Vector3(200.0f, 200.0f, 1.0f),
			Qt,
			Vector3(0.0f, 0.0f, 0.0f)
			);
		PtrTransMatrix->SetWorldMatrix(WorldMat);
		
		//描画コンポーネントの追加
		auto DrawComp = Ptr->AddComponent<PNTStaticDraw>();
		//描画コンポーネントに形状(メッシュ)を設定
		DrawComp->SetMeshResource(L"DEFAULT_SQUARE");
		//描画コンポーネントテクスチャの設定
		DrawComp->SetTextureResource(L"SKY_TX");
		//自分に影が映りこむようにする
		DrawComp->SetOwnShadowActive(true);

		
	}
Example #5
0
	bool DX9RenderSystem::Begin2d( )
	{
		SetCullMode( CullMode::NONE );
		SetFillMode( FillMode::SOLID );
		SetProjectionMatrix( Matrix4::CreateOrthoLH( (float)mSize.x, -(float)mSize.y, 0.0f, 1.0f ) );
		SetViewMatrix( Matrix4::IDENTITY );
		SetWorldMatrix( Matrix4::IDENTITY );
		SetVertexDeclaration( m2dDecl );

		SetTextureStageState( 0, TextureState::TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE );
		SetTextureStageState( 0, TextureState::COLOROP, BlendOp::MODULATE );
		SetTextureStageState( 0, TextureState::COLORARG1, BlendArg::TEXTURE );
		SetTextureStageState( 0, TextureState::COLORARG2, BlendArg::DIFFUSE );
		SetTextureStageState( 0, TextureState::ALPHAOP, BlendOp::MODULATE );
		SetTextureStageState( 0, TextureState::ALPHAARG1, BlendArg::TEXTURE );
		SetTextureStageState( 0, TextureState::ALPHAARG2, BlendArg::DIFFUSE );
		SetTextureStageState( 1, TextureState::COLOROP, BlendOp::DISABLE );
		SetTextureStageState( 1, TextureState::ALPHAOP, BlendOp::DISABLE );
		SetAlphaBlendEnabled( true );
		SetAlphaTestEnabled( false );
		SetDepthWriteEnabled( true );
		SetDepthBufferEnabled( false );
		SetSpecularEnabled( false );

		return true;
	};
Example #6
0
	void Update ( void )
	{
		NxVec3 forceDir ( -1, 0, 0 );
		NxReal forceStrength = 100;
		NxVec3 forceVec = forceStrength*forceDir;
		this->tractor->addForce(forceVec);

		g_iValue = 10;

		for (int i=0; i<2; i++)
		{
			NxMat34 pose   = frontWheels [ i ].wheel->getGlobalPose ( );
			NxMat33 orient = pose.M;
			NxVec3  pos    = pose.t;

			float glmat[16];
			orient.getColumnMajorStride4(&(glmat[0]));
			pos.get(&(glmat[12]));
			glmat[3] = glmat[7] = glmat[11] = 0.0f;
			glmat[15] = 1.0f;

			SetWorldMatrix ( g_iValue, ( D3DXMATRIX* ) &glmat );
			sObject* pObject = dbGetObject ( g_iValue++ );
			pObject->position.vecPosition = D3DXVECTOR3 ( glmat [ 12 ], glmat [ 13 ], glmat [ 14 ] );
		}

		for (int i=0; i<2; i++)
		{
			NxMat34 pose   = steerWheels [ i ].wheel.wheel->getGlobalPose ( );
			NxMat33 orient = pose.M;
			NxVec3  pos    = pose.t;

			float glmat[16];
			orient.getColumnMajorStride4(&(glmat[0]));
			pos.get(&(glmat[12]));
			glmat[3] = glmat[7] = glmat[11] = 0.0f;
			glmat[15] = 1.0f;

			SetWorldMatrix ( g_iValue, ( D3DXMATRIX* ) &glmat );
			sObject* pObject = dbGetObject ( g_iValue++ );
			pObject->position.vecPosition = D3DXVECTOR3 ( glmat [ 12 ], glmat [ 13 ], glmat [ 14 ] );
		}

		//dbPositionObject ( g_iValue, glmat [ 12 ], glmat [ 13 ], glmat [ 14 ] );

	
	}
//	初期化
void CMglMatrixManager::Init( CMglGraphicManager* in_myudg )
{
	//CMglDgBase::Init(in_myudg);
	CMglCameraMatrixManager::Init(in_myudg);

	//	デフォルトワールドマトリックスを設定しておく
	SetWorldMatrix(m_initWorld);
}
Example #8
0
void Transform::CalculateWordlMatrix()
{
	if( parent )
	{
		SetWorldMatrix( parent->GetWordlMatrix() * GetLocalMatrix() );
	}else
	{
		mWorldMatrix = GetLocalMatrix();
	}
}
void NsRendererOGL3::ResetMatrices()
{
	mWorldMatrix = NsMatrix4::Identity();
	mViewMatrix = NsMatrix4::Identity();
	mProjMatrix = NsMatrix4::Identity();
	
	SetWorldMatrix(NsMatrix4::Identity());
	SetViewMatrix(NsMatrix4::Identity());
	SetProjectionMatrix(NsMatrix4::Identity());
}
Example #10
0
void Display()
{
	d3d.ClearScene();
	d3d.BeginScene();
	//render at here
	SetWorldMatrix();
	//设置环境光
	d3d.GetD3DDevice()->SetRenderState(D3DRS_AMBIENT,0x00ffffff);
	TryModel.Draw();
	d3d.EndScene();
}
Example #11
0
//===============================================
//処理
//===============================================
//[input]
//	なし
//[return]
//	なし
//===============================================
void CField::Exec()
{
	//::D3DXVec3TransformCoord(&vAxisX, &vAxisX, &m_matRotate);
	//::D3DXVec3TransformCoord(&vAxisZ, &vAxisZ, &m_matRotate);
	
	//if(CJoyPad::GetState(0, PAD_STATE_HOLD, PAD_DIR_LEFT) )
	//{
	//	m_vPos -= vAxisX*0.1f;
	//	//m_Anim += 1.0f;
	//}
	//
	//if(CJoyPad::GetState(0, PAD_STATE_HOLD, PAD_DIR_RIGHT) )
	//{
	//	m_vPos += vAxisX*0.1f;
	//	//m_Anim += 1.0f;
	//}	
	//
	//if(CJoyPad::GetState(0, PAD_STATE_HOLD, PAD_DIR_UP) )
	//{
	//	m_vPos -= vAxisZ * 0.1f;
	//	//m_vPos.z -= 0.1f;
	//	//m_Anim += 1.0f;
	//}
	//
	//if(CJoyPad::GetState(0, PAD_STATE_HOLD, PAD_DIR_DOWN) )
	//{
	//	m_vPos += vAxisZ * 0.1f;
	//	//m_vPos.z += 0.1f;
	//	//m_Anim += 1.0f;
	//}
	
	
	//if(CJoyPad::GetState(0, PAD_STATE_HOLD, PAD_BUTTON_02) )
	//{
	//	m_vRot.x += 0.1f;
	//}
	
//	Update(0.000f);
	
	Translation(m_vPos.x, m_vPos.y, m_vPos.z);
	
	Scaling(m_vScale.x, m_vScale.y, m_vScale.z);
	
	Heading(m_vRot.x);
	
	Pitching(m_vRot.x);
	
	Rolling(m_vRot.x);
	
	Render(Joker::GetDevice());
	
	SetWorldMatrix();
}
Example #12
0
void PhysUpdate ( void )
{
	int iObject = 1;

    // Render all the actors in the scene
    int nbActors = gScene->getNbActors();
    NxActor** actors = gScene->getActors();

	while (nbActors--)
    {
        NxActor* actor = *actors++;

		// Get an OpenGL transform (float[16]) from a Novodex shape’s global pose     
		// (NxMat34)
		NxShape* shape = NULL;

		NxMat34 pose = actor->getGlobalPose();

		NxMat33 orient = pose.M;
		NxVec3 pos = pose.t;	

		float glmat[16];    // 4x4 column major OpenGL matrix
		orient.getColumnMajorStride4(&(glmat[0]));
		pos.get(&(glmat[12]));

		// clear the elements we don't need:
		glmat[3] = glmat[7] = glmat[11] = 0.0f;
		glmat[15] = 1.0f;

		{
			sPhysObject* pPhys = ( sPhysObject* ) actor->userData;
			
			if ( pPhys )
			{
				SetWorldMatrix ( pPhys->iID, ( D3DXMATRIX* ) &glmat );

				sObject* pObject = dbGetObject ( pPhys->iID );

				pObject->position.vecPosition = D3DXVECTOR3 ( glmat [ 12 ], glmat [ 13 ], glmat [ 14 ] );
			}
		}
    }
}
Example #13
0
BOOL CGeometry::TransformLights(D3DVECTOR *CameraRotation,D3DVECTOR *CameraPosition)
{
	HRESULT	ddrval;

	for(int i=0; i<MAXLIGHTS; i++) {
		if(m_Lights[i].InUse) {
				D3DVECTOR RelVec = m_Lights[i].Position;
				RelVec.x -= CameraPosition->x;
				RelVec.y -= CameraPosition->y;
				RelVec.z -= CameraPosition->z;
				SetWorldMatrix(CameraRotation);
				RotateVector(&RelVec,&m_Lights[i].LightDesc.dvPosition);

				if(m_Lights[i].Transform) {
					RelVec = m_Lights[i].Direction;
					RotateVector(&RelVec,&m_Lights[i].LightDesc.dvDirection);
				}

				DXCALL(m_Lights[i].Light->SetLight(&m_Lights[i].LightDesc));
		}
	}

	return TRUE;
}
Example #14
0
//===============================================
//処理
//===============================================
void CCursor::Exec()
{
	if( !m_IsEnd )
	{
		Translation(m_vPos.x, m_vPos.y, m_vPos.z);
		
		//Scaling(m_vScale.x, m_vScale.y, m_vScale.z);
		
		//Heading(m_vRot.x);
		//
		//Pitching(m_vRot.x);
		//
		//Rolling(m_vRot.x);
		
//		Update(0.000f);
		
		Render(Joker::GetDevice());
		
		SetWorldMatrix();
		
	}

		//m_CurTex.Draw(m_vPos.x, m_vPos.y);
}
Example #15
0
//===============================================
//処理
//===============================================
void CEffect::Exec()
{
	//SetPosition(
	
	if(m_IsVariable)
	{
		Translation(m_vPos.x, m_vPos.y, m_vPos.z);
		
		Scaling(m_vScale.x, m_vScale.y, m_vScale.z);
		
		//Heading(m_vRot.x);
		//
		Pitching(m_vRot.x);
		//
		//Rolling(m_vRot.x);
		
		Render(Joker::GetDevice());
		
		m_pAnimController->AdvanceTime(m_AnimSpeed, NULL);
		
		SetWorldMatrix();
	}
	
}
Example #16
0
/*virtual*/ void D3D9Renderer::RenderBucket(
    Bucket* pBucket, const ViewportPass* const pViewportPass) {
  XTRACE_FUNCTION;

  PROFILE_FUNCTION;

  if (pBucket->m_RenderTarget) {
    SetRenderTarget(pBucket->m_RenderTarget);

    if (pViewportPass) {
      SetViewport(pViewportPass);
    }
  }

  if (pBucket->m_ClearFlags != CLEAR_NONE) {
    Clear(pBucket->m_ClearFlags, pBucket->m_ClearColor, pBucket->m_ClearDepth);
  }

  if (pBucket->m_View) {
    View* const pView = pViewportPass ? pViewportPass->GetView(pBucket->m_View)
                                      : pBucket->m_View;
    m_View = *pView;
    m_View.ApplyToRenderer(*this);
  }

  if (pBucket->m_Flags & MAT_ALPHA) {
    pBucket->Sort(m_View);
  } else if (m_DoMaterialSort && pBucket->m_SortByMaterial) {
    pBucket->SortByMaterials();
  }

  Mesh* pMesh = NULL;
  D3D9VertexBuffer* VertexBuffer = NULL;
  D3D9IndexBuffer* IndexBuffer = NULL;
  IVertexDeclaration* pVertexDeclaration = NULL;
  uint NumMeshes = pBucket->m_Meshes.Size();
  Frustum ViewFrustum(GetViewMatrix() * GetProjectionMatrix());

#if BUILD_DEBUG
  if (pBucket->m_DEBUGUseFrustum) {
    pBucket->m_DEBUGFrustumView.ApplyToFrustum(ViewFrustum);
  }
#endif

  for (uint MeshIndex = 0; MeshIndex < NumMeshes; ++MeshIndex) {
    XTRACE_NAMED(RenderBucketMesh);

    pMesh = pBucket->m_Meshes[MeshIndex];
    DEVASSERT(pMesh);

    DEVASSERT(pMesh->m_VertexBuffer->GetNumVertices() > 0);

    const uint MaterialFlags = pMesh->GetMaterialFlags();

    // Frustum culling--I can't do this earlier, when a mesh is added, because
    // it might be visible in one view (e.g., shadow map depth) and not to
    // player.
    if (!m_DoFrustumCulling || pBucket->m_Flags & MAT_HUD ||
        pBucket->m_Flags & MAT_INWORLDHUD ||
#if BUILD_DEV
        pBucket->m_Flags & MAT_DEBUG_ALWAYS ||
        MaterialFlags & MAT_DEBUG_ALWAYS ||
#endif
        pBucket->m_Flags & MAT_ALWAYS || MaterialFlags & MAT_ALWAYS ||
        ViewFrustum.Intersects(pMesh->m_AABB)) {
      VertexBuffer = (D3D9VertexBuffer*)pMesh->m_VertexBuffer;
      IndexBuffer = (D3D9IndexBuffer*)pMesh->m_IndexBuffer;
      // RENDERTODO: It might be useful to adapt this for material overrides in
      // the future
      // Shader			= (D3D9Shader*)( pBucket->m_OverrideShader ?
      // pBucket->m_OverrideShader : pMesh->m_OLDMaterial.m_Shader );

      if (pMesh->m_VertexDeclaration != pVertexDeclaration) {
        XTRACE_NAMED(SetVertexDeclaration);
        m_D3DDevice->SetVertexDeclaration(
            (IDirect3DVertexDeclaration9*)
            pMesh->m_VertexDeclaration->GetDeclaration());
      }
      pVertexDeclaration = pMesh->m_VertexDeclaration;

      DEVASSERT(VertexBuffer);
      DEVASSERT(pVertexDeclaration);
      DEVASSERT(IndexBuffer);

      SetWorldMatrix(pMesh->GetConcatenatedTransforms());

      {
        XTRACE_NAMED(SetStreams);

        uint VertexSignature = pVertexDeclaration->GetSignature();
        uint Index = 0;
#define SETSTREAM(STREAM, SIGNATURE, TYPE)                                 \
  if (SIGNATURE == (VertexSignature & SIGNATURE)) {                        \
    IDirect3DVertexBuffer9* const pBuffer =                                \
        static_cast<IDirect3DVertexBuffer9*>(VertexBuffer->Get##STREAM()); \
    DEVASSERT(pBuffer);                                                    \
    m_D3DDevice->SetStreamSource(Index++, pBuffer, 0, sizeof(TYPE));       \
  }

        SETSTREAM(Positions, VD_POSITIONS, Vector);
        SETSTREAM(Colors, VD_COLORS, uint);
#if USE_HDR
        SETSTREAM(FloatColors1, VD_FLOATCOLORS, Vector4);
        SETSTREAM(FloatColors2, VD_BASISCOLORS, Vector4);
        SETSTREAM(FloatColors3, VD_BASISCOLORS, Vector4);

        // For SM2 cards, an alternative way to do HDR colors
        SETSTREAM(FloatColors1, VD_FLOATCOLORS_SM2, Vector4);
        SETSTREAM(FloatColors2, VD_BASISCOLORS_SM2, Vector4);
        SETSTREAM(FloatColors3, VD_BASISCOLORS_SM2, Vector4);
#endif
        SETSTREAM(UVs, VD_UVS, Vector2);
        SETSTREAM(Normals, VD_NORMALS, Vector);
        SETSTREAM(Tangents, VD_TANGENTS, Vector4);
        SETSTREAM(BoneIndices, VD_BONEINDICES, SBoneData);
        SETSTREAM(BoneWeights, VD_BONEWEIGHTS, SBoneData);

#undef SETSTREAM

        m_D3DDevice->SetIndices(
            (IDirect3DIndexBuffer9*)IndexBuffer->GetIndices());
      }

      ApplyMaterial(pMesh->m_Material, pMesh, m_View);

      if (VertexBuffer->GetNumVertices() > 0) {
        XTRACE_NAMED(DrawIndexedPrimitive);

        m_D3DDevice->DrawIndexedPrimitive(IndexBuffer->GetPrimitiveType(), 0, 0,
                                          VertexBuffer->GetNumVertices(), 0,
                                          IndexBuffer->GetNumPrimitives());
      }

#if BUILD_DEBUG
      ++m_DEBUGRenderStats.NumMeshes;
      m_DEBUGRenderStats.NumPrimitives += IndexBuffer->GetNumPrimitives();
#endif
    }

#if BUILD_DEV
    // WARNING: This assumes the mesh is only in one bucket, which could be bad
    if (pMesh->m_IsDebugMesh) {
      m_DeferredDeleteDebugMeshes.PushBackUnique(pMesh);
    }
#endif
  }
}
Example #17
0
bool Graphics::CreateDefaultShader()
{
	HRESULT r = 0;

	ID3DBlob* vsBuffer = 0;
	ID3DBlob* buffer = 0;

	ID3DBlob* Errors = 0;

	DWORD shaderFlags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG;

	bool b = CompileD3DShader("..\\te010\\DefaultShader.fx", 0, "fx_5_0", &buffer);

	if (!b)
	{
		if (buffer)
		{
			buffer->Release();
		}
		NAIA_FATAL("Unnable to compile default shader");
	}

	r = D3DX11CreateEffectFromMemory(buffer->GetBufferPointer(), buffer->GetBufferSize(), 0 , m_Device, &m_Effect);
	if (FAILED(r))
	{
		NAIA_FATAL("Unnable to create effect");
	}

	m_Technique = m_Effect->GetTechniqueByName("DefaultTechnique");

	if (!m_Technique)
	{
		NAIA_FATAL("Can not find DefaultTechnique in default shader");
	}

	D3D11_INPUT_ELEMENT_DESC defaultLayout[] =
	{
		{"POSITION", 0,  DXGI_FORMAT_R32G32B32_FLOAT,    0,  0,                             D3D11_INPUT_PER_VERTEX_DATA,    0},
		{"NORMAL",   0,  DXGI_FORMAT_R32G32B32_FLOAT,    0,  D3D11_APPEND_ALIGNED_ELEMENT,  D3D11_INPUT_PER_VERTEX_DATA,    0},
		{"COLOR",    0,  DXGI_FORMAT_R32G32B32_FLOAT,    0,  D3D11_APPEND_ALIGNED_ELEMENT,  D3D11_INPUT_PER_VERTEX_DATA,    0},
		{"TEXCOORD", 0,  DXGI_FORMAT_R32G32B32_FLOAT,    0,  D3D11_APPEND_ALIGNED_ELEMENT,  D3D11_INPUT_PER_VERTEX_DATA,    0}
	};

	unsigned int totalLayoutElements = ARRAYSIZE(defaultLayout);

	D3DX11_PASS_DESC descPASS;
	m_Technique->GetPassByIndex(0)->GetDesc(&descPASS);

	r = m_Device->CreateInputLayout(defaultLayout, totalLayoutElements, descPASS.pIAInputSignature, descPASS.IAInputSignatureSize, &m_InputLayout);
	if (FAILED(r))
	{
		NAIA_FATAL("Failed to create input layout");
	}

	m_Context->IASetInputLayout(m_InputLayout);

	Mat4x4 world = Mat4x4::g_Identity;
	SetWorldMatrix(world);

	Mat4x4 view = Mat4x4::g_Identity;
	Vec3 eye(6.0f, 6.0f, 6.0f);
	Vec3 at(0.f,0.f,0.f);
	Vec3 up(0.f,1.0f,0.f);
	D3DXMatrixLookAtLH(&view, &eye, &at, &up);
	SetViewMatrix(view);

	Mat4x4 proj = Mat4x4::g_Identity;
	D3DXMatrixPerspectiveFovLH(&proj, NAIA_PI/2, Application::instance()->m_Width/(float)Application::instance()->m_Height, 0.01f, 100.0f);
	SetProjectionMatrix(proj);

#pragma region Create constant buffers

	D3D11_BUFFER_DESC bd;
	ZeroMemory(&bd, sizeof(bd));
	bd.Usage = D3D11_USAGE_DEFAULT;
	bd.ByteWidth = sizeof(CBNeverChanges);
	bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
	bd.CPUAccessFlags = 0; 
	r = m_Device->CreateBuffer(&bd, NULL, &m_cbNeverChanges);
	if (FAILED(r))
	{
		NAIA_FATAL("Can not create constant buffer (Never changes)");
	}

	bd.ByteWidth = sizeof(CBChangeOnResize);
	r = m_Device->CreateBuffer(&bd, NULL, &m_cbChangesOnResize);
	if (FAILED(r))
	{
		NAIA_FATAL("Can not create constant buffer (Changes on resize)");
	}

	bd.ByteWidth = sizeof(CBChangesEveryFrame);
	r = m_Device->CreateBuffer(&bd, NULL, &m_cbChangesEveryFrame);
	if (FAILED(r))
	{
		NAIA_FATAL("Can not create constant buffer (Changes every frame)");
	}
#pragma endregion

	CBNeverChanges cbNeverChanges;
	cbNeverChanges.View = view;
	m_Context->UpdateSubresource(m_cbNeverChanges, 0, NULL, &cbNeverChanges, 0, 0);

	CBChangeOnResize cbChangesOnResize;
	cbChangesOnResize.Projection = proj;
	m_Context->UpdateSubresource(m_cbChangesOnResize, 0, NULL, &cbChangesOnResize, 0, 0);

	CBChangesEveryFrame cbChangesEveryFrame;
	cbChangesEveryFrame.World = world;
	m_Context->UpdateSubresource(m_cbChangesEveryFrame, 0, NULL, &cbChangesEveryFrame, 0, 0);

	return true;
}
Example #18
0
void TickCar ( void )
{
	g_iValue = 10;

	NxReal steeringAngle = gSteeringValue * gMaxSteeringAngle;

	NxArray<CarWheelContact>::iterator i = wheelContactPoints.begin();
	while(i != wheelContactPoints.end())
	{
		CarWheelContact& cwc = *i;

		WheelShapeUserData* wheelData = (WheelShapeUserData *)(cwc.wheel->userData);

		/*
		struct CarWheelContact
		{
			NxActor* car;
			NxShape* wheel;
			NxVec3 contactPoint;
			NxVec3 contactNormalForce;
			NxVec3 contactFrictionForce;
		};
		*/

		{
			NxMat34 pose   = cwc.wheel->getGlobalPose ( );
			NxMat33 orient = pose.M;
			NxVec3  pos    = pose.t;

			float glmat[16];
			orient.getColumnMajorStride4(&(glmat[0]));
			pos.get(&(glmat[12]));
			glmat[3] = glmat[7] = glmat[11] = 0.0f;
			glmat[15] = 1.0f;

			SetWorldMatrix ( g_iValue, ( D3DXMATRIX* ) &glmat );
			sObject* pObject = dbGetObject ( g_iValue );
			pObject->position.vecPosition = D3DXVECTOR3 ( glmat [ 12 ], glmat [ 13 ], glmat [ 14 ] );

			//dbPositionObject ( g_iValue, glmat [ 12 ], glmat [ 13 ], glmat [ 14 ] );

			g_iValue++;
		}

		//apply to powered wheels only.
		if (wheelData->frontWheel)
	    {
			//steering:
			NxMat33 wheelOrientation = cwc.wheel->getLocalOrientation();
			wheelOrientation.setColumn(0,  NxVec3(NxMath::cos(steeringAngle), 0,  NxMath::sin(steeringAngle) ));
			wheelOrientation.setColumn(2,  NxVec3(NxMath::sin(steeringAngle), 0, -NxMath::cos(steeringAngle) ));
			cwc.wheel->setLocalOrientation(wheelOrientation);

			if (frontWheelIsPowered)
			{
				//get the world space orientation:
				wheelOrientation = cwc.wheel->getGlobalOrientation();
				NxVec3 steeringDirection;
				wheelOrientation.getColumn(0, steeringDirection);

				//the power direction of the front wheel is the wheel's axis as it is steered.
				if (gMotorForce)
				{
					cwc.car->addForceAtPos(steeringDirection * gMotorForce,cwc.contactPoint);
				}
			}
		}
		if (!wheelData->frontWheel && rearWheelIsPowered)
		{
			//get the orientation of this car:
			NxMat33 m = cwc.car->getGlobalOrientation();
			NxVec3 carForwardAxis;
			m.getColumn(0, carForwardAxis);
			//the power direction of the rear wheel is always the car's length axis.
			cwc.car->addForceAtPos(carForwardAxis * gMotorForce,cwc.contactPoint);
		}
		i++;
	}

	wheelContactPoints.clear();
}
void NsRendererOGL3::Draw(const NsQuad3D & quad)
{
	SetDrawColor(0.4f, 0.12f, 1.f);
	SetWorldMatrix(quad.GetWorldTransform());
		
	if(quad.bUseASCIIShader && !quad.shaderID < 1)
	{
		GLuint fontID = NsOGLResourceManager::Instance()->GetResourceID("/Textures/ASCII/ascii.png");
	
		glUseProgram(quad.shaderID);
		glEnable(GL_TEXTURE_2D);
		glEnable(GL_BLEND);
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
		glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

		glActiveTexture(GL_TEXTURE0);
		glBindTexture (GL_TEXTURE_2D, quad.textureID);
		GLint iTextureUniform = glGetUniformLocation(quad.shaderID, "colorMap");
		glUniform1i(iTextureUniform, 0);

		glActiveTexture(GL_TEXTURE1);
		glBindTexture (GL_TEXTURE_2D, fontID);
		GLint iASCIIUniform = glGetUniformLocation(quad.shaderID, "asciiMap");
		glUniform1i(iASCIIUniform, 1);
	
		glBegin (GL_QUADS);
		{
			glTexCoord2f (0.0, 0.0);
			glVertex3f (0.0, 0.0, 0.0);

			glTexCoord2f (1.0, 0.0);
			glVertex3f (quad.fWidth, 0.0, 0.0);

			glTexCoord2f (1.0, 1.0);
			glVertex3f (quad.fWidth, quad.fHeight, 0.0);

			glTexCoord2f (0.0, 1.0);
			glVertex3f (0.0, quad.fHeight, 0.0);
		}
		glEnd ();

		glUseProgram(0);
		glDisable(GL_TEXTURE_2D);

	}
	else
	{
		glEnable(GL_TEXTURE_2D);
		glEnable(GL_BLEND);
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
		glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

		glActiveTexture(GL_TEXTURE0);
		glBindTexture (GL_TEXTURE_2D, quad.textureID);

		glBegin (GL_QUADS);
		{
			glTexCoord2f (0.0, 0.0);
			glVertex3f (0.0, 0.0, 0.0);

			glTexCoord2f (1.0, 0.0);
			glVertex3f (quad.fWidth, 0.0, 0.0);

			glTexCoord2f (1.0, 1.0);
			glVertex3f (quad.fWidth, quad.fHeight, 0.0);

			glTexCoord2f (0.0, 1.0);
			glVertex3f (0.0, quad.fHeight, 0.0);
		}
		glEnd ();
		glDisable(GL_TEXTURE_2D);
	}
}