Direct3D draw circle

https://www.google.com.hk/search?q=draw+circle+by+Direct3D&source=hp&ei=VEPJYYv9IPnh7_UPrp-h6Aw&oq=draw+circle+by+Direct3D&gs_lcp=ChFtb2JpbGUtZ3dzLXdpei1ocBADOgIIKToLCC4QgAQQxwEQowI6BQgAEIAEOgsILhCABBDHARDRAzoFCC4QgAQ6CwguEIAEEMcBEK8BOgQILhATOgQIABATOgYIABAeEBM6CAgAEAgQHhATOgQIABAeOgUIIRCgAToHCCEQChCgAUoFCD4SATFKBQg_EgExSgUIExIBMVCDMVjj1wFg-OUBaAFwAHgAgAGYBIgBpzmSAQoyLTE2LjcuMC4xmAEAoAEBsAEA&sclient=mobile-:
void Dx11Renderer::DrawCircleInternal( int x0, int y0, int radius, int r, int g, int b, int a )
{
if( this->bIsInitialized == false )
return;

if( m_pDevice == NULL || m_pDeviceContext == NULL ) 
	return;

int NUMPOINTS = 24;
UINT viewportNumber = 1;

D3D11_VIEWPORT vp;

this->m_pDeviceContext->RSGetViewports( &viewportNumber, &vp );

COLOR_VERTEX* v = NULL;

D3D11_MAPPED_SUBRESOURCE mapData;

if( FAILED( this->m_pDeviceContext->Map( m_pVertexBuffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &mapData ) ) )
	return;

v = ( COLOR_VERTEX* ) mapData.pData;

//float WedgeAngle = ( float )( ( 2 * D3DX_PI ) / NUMPOINTS );

//for( int i = 0; i <= NUMPOINTS; i++ )
//{
//	float Theta		= ( float )( i * WedgeAngle );
//	float x			= (float)( x0 + radius * cos( Theta ) );
//	float y			= (float)( y0 - radius * sin( Theta ) );
//	float xx0		= 2.0f * ( x - 0.5f ) / vp.Width - 1.0f;
//	float yy0		= 1.0f - 2.0f * ( y - 0.5f ) / vp.Height;

//	v[i].Position.x	= xx0;
//	v[i].Position.y	= yy0;
//	v[i].Position.z	= 0.0f;
//	v[i].Color.r	= ( ( FLOAT ) r / 255.0f );
//	v[i].Color.g	= ( ( FLOAT ) g / 255.0f );
//	v[i].Color.b	= ( ( FLOAT ) b / 255.0f );
//	v[i].Color.a	= ( ( FLOAT ) a / 255.0f );
//}

int f = 1 - radius;
int ddF_x = 1;
int ddF_y = -2 * radius;
int x = 0;
int y = radius;
int i = 4;

v[0].Position.x	= 2.0f * ( x0 - 0.5f ) / vp.Width - 1.0f;
v[0].Position.y	= 1.0f - 2.0f * ( (y0 + radius) - 0.5f ) / vp.Height;
v[0].Position.z	= 0.0f;
v[0].Color.r	= ( ( FLOAT ) r / 255.0f );
v[0].Color.g	= ( ( FLOAT ) g / 255.0f );
v[0].Color.b	= ( ( FLOAT ) b / 255.0f );
v[0].Color.a	= ( ( FLOAT ) a / 255.0f );

v[1].Position.x	= 2.0f * ( x0 - 0.5f ) / vp.Width - 1.0f;
v[1].Position.y	= 1.0f - 2.0f * ( (y0 - radius) - 0.5f ) / vp.Height;
v[1].Position.z	= 0.0f;
v[1].Color.r	= ( ( FLOAT ) r / 255.0f );
v[1].Color.g	= ( ( FLOAT ) g / 255.0f );
v[1].Color.b	= ( ( FLOAT ) b / 255.0f );
v[1].Color.a	= ( ( FLOAT ) a / 255.0f );

v[2].Position.x	= 2.0f * ( (x0 + radius) - 0.5f ) / vp.Width - 1.0f;
v[2].Position.y	= 1.0f - 2.0f * ( y0 - 0.5f ) / vp.Height;
v[2].Position.z	= 0.0f;
v[2].Color.r	= ( ( FLOAT ) r / 255.0f );
v[2].Color.g	= ( ( FLOAT ) g / 255.0f );
v[2].Color.b	= ( ( FLOAT ) b / 255.0f );
v[2].Color.a	= ( ( FLOAT ) a / 255.0f );

v[3].Position.x	= 2.0f * ( (x0 - radius) - 0.5f ) / vp.Width - 1.0f;
v[3].Position.y	= 1.0f - 2.0f * ( y0 - 0.5f ) / vp.Height;
v[3].Position.z	= 0.0f;
v[3].Color.r	= ( ( FLOAT ) r / 255.0f );
v[3].Color.g	= ( ( FLOAT ) g / 255.0f );
v[3].Color.b	= ( ( FLOAT ) b / 255.0f );
v[3].Color.a	= ( ( FLOAT ) a / 255.0f );

while(x < y)
{
	if(f >= 0) 
	{
		y--;
		ddF_y += 2;
		f += ddF_y;
	}
	x++;
	ddF_x += 2;
	f += ddF_x;    

	v[i].Position.x	= 2.0f * ( (x0 + x) - 0.5f ) / vp.Width - 1.0f;
	v[i].Position.y	= 1.0f - 2.0f * ( (y0 + y) - 0.5f ) / vp.Height;
	v[i].Position.z	= 0.0f;
	v[i].Color.r	= ( ( FLOAT ) r / 255.0f );
	v[i].Color.g	= ( ( FLOAT ) g / 255.0f );
	v[i].Color.b	= ( ( FLOAT ) b / 255.0f );
	v[i].Color.a	= ( ( FLOAT ) a / 255.0f );

	v[i+1].Position.x	= 2.0f * ( (x0 - x) - 0.5f ) / vp.Width - 1.0f;
	v[i+1].Position.y	= 1.0f - 2.0f * ( (y0 + y) - 0.5f ) / vp.Height;
	v[i+1].Position.z	= 0.0f;
	v[i+1].Color.r	= ( ( FLOAT ) r / 255.0f );
	v[i+1].Color.g	= ( ( FLOAT ) g / 255.0f );
	v[i+1].Color.b	= ( ( FLOAT ) b / 255.0f );
	v[i+1].Color.a	= ( ( FLOAT ) a / 255.0f );

	v[i+2].Position.x	= 2.0f * ( (x0 + x) - 0.5f ) / vp.Width - 1.0f;
	v[i+2].Position.y	= 1.0f - 2.0f * ( (y0 - y) - 0.5f ) / vp.Height;
	v[i+2].Position.z	= 0.0f;
	v[i+2].Color.r	= ( ( FLOAT ) r / 255.0f );
	v[i+2].Color.g	= ( ( FLOAT ) g / 255.0f );
	v[i+2].Color.b	= ( ( FLOAT ) b / 255.0f );
	v[i+2].Color.a	= ( ( FLOAT ) a / 255.0f );

	v[i+3].Position.x	= 2.0f * ( (x0 - x) - 0.5f ) / vp.Width - 1.0f;
	v[i+3].Position.y	= 1.0f - 2.0f * ( (y0 - y) - 0.5f ) / vp.Height;
	v[i+3].Position.z	= 0.0f;
	v[i+3].Color.r	= ( ( FLOAT ) r / 255.0f );
	v[i+3].Color.g	= ( ( FLOAT ) g / 255.0f );
	v[i+3].Color.b	= ( ( FLOAT ) b / 255.0f );
	v[i+3].Color.a	= ( ( FLOAT ) a / 255.0f );

	v[i+4].Position.x	= 2.0f * ( (x0 + y) - 0.5f ) / vp.Width - 1.0f;
	v[i+4].Position.y	= 1.0f - 2.0f * ( (y0 + x) - 0.5f ) / vp.Height;
	v[i+4].Position.z	= 0.0f;
	v[i+4].Color.r	= ( ( FLOAT ) r / 255.0f );
	v[i+4].Color.g	= ( ( FLOAT ) g / 255.0f );
	v[i+4].Color.b	= ( ( FLOAT ) b / 255.0f );
	v[i+4].Color.a	= ( ( FLOAT ) a / 255.0f );

	v[i+5].Position.x	= 2.0f * ( (x0 - y) - 0.5f ) / vp.Width - 1.0f;
	v[i+5].Position.y	= 1.0f - 2.0f * ( (y0 + x) - 0.5f ) / vp.Height;
	v[i+5].Position.z	= 0.0f;
	v[i+5].Color.r	= ( ( FLOAT ) r / 255.0f );
	v[i+5].Color.g	= ( ( FLOAT ) g / 255.0f );
	v[i+5].Color.b	= ( ( FLOAT ) b / 255.0f );
	v[i+5].Color.a	= ( ( FLOAT ) a / 255.0f );

	v[i+6].Position.x	= 2.0f * ( (x0 + y) - 0.5f ) / vp.Width - 1.0f;
	v[i+6].Position.y	= 1.0f - 2.0f * ( (y0 - x) - 0.5f ) / vp.Height;
	v[i+6].Position.z	= 0.0f;
	v[i+6].Color.r	= ( ( FLOAT ) r / 255.0f );
	v[i+6].Color.g	= ( ( FLOAT ) g / 255.0f );
	v[i+6].Color.b	= ( ( FLOAT ) b / 255.0f );
	v[i+6].Color.a	= ( ( FLOAT ) a / 255.0f );

	v[i+7].Position.x	= 2.0f * ( (x0 - y) - 0.5f ) / vp.Width - 1.0f;
	v[i+7].Position.y	= 1.0f - 2.0f * ( (y0 - x) - 0.5f ) / vp.Height;
	v[i+7].Position.z	= 0.0f;
	v[i+7].Color.r	= ( ( FLOAT ) r / 255.0f );
	v[i+7].Color.g	= ( ( FLOAT ) g / 255.0f );
	v[i+7].Color.b	= ( ( FLOAT ) b / 255.0f );
	v[i+7].Color.a	= ( ( FLOAT ) a / 255.0f );

	NUMPOINTS = i+7;
	i+=8;
}

this->m_pDeviceContext->Unmap( m_pVertexBuffer, NULL );

this->m_pDeviceContext->IASetInputLayout( m_pInputLayout );

UINT Stride = sizeof( COLOR_VERTEX );
UINT Offset = 0;

this->m_pDeviceContext->IASetVertexBuffers( 0, 1, &m_pVertexBuffer, &Stride, &Offset );

this->m_pDeviceContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_POINTLIST );

D3DX11_TECHNIQUE_DESC techDesc;

if( FAILED( m_pTechnique->GetDesc( &techDesc ) ) )
	return;

for( UINT p = 0; p < techDesc.Passes; ++p )
{
	m_pTechnique->GetPassByIndex( p )->Apply( 0, this->m_pDeviceContext );

	this->m_pDeviceContext->Draw( NUMPOINTS, 0 );
}

}gws-wiz-hp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值