DirectX 是啥

DirectX 是啥

DirectX(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口,也是一种应用程序接口(API)。它可以让以Windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准。这样,游戏开发者不必为每一品牌的硬件来写不同的驱动程序,同时也降低了用户安装及设置硬件的复杂度。

DirectX已被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发。其主要包括多个组件,如Direct3D(3D图形渲染)、DirectSound(音频处理)、DirectInput(输入设备管理)等,以满足不同的多媒体应用需求。

DirectX的出现极大地推动了计算机图形学和多媒体技术的发展,使得开发者能够更容易地创建出具有高质量图形和音频效果的应用程序。随着版本的更新,DirectX还引入了新的多线程技术,可以同时处理更多的任务,提高了GPU的利用率和性能,为开发者提供了更多全面且稳定的功能。

使用DirectX画一个三角形

使用DirectX画一个三角形涉及多个步骤,以下是一个简化的概述:

  1. 初始化DirectX环境
    • 创建一个Direct3D接口对象,这通常是使用WINAPIDirect3DCreate9函数来完成的,传入SDK版本号作为参数。
    • 检测本机显示卡的功能,这可以通过IDirect3D::GetDeviceCaps方法来实现。
  2. 准备资产(InitAsset)
    • 在这个阶段,你需要告诉DirectX你想要绘制什么样的三角形,以及这个三角形需要什么样的加工。这通常涉及准备网格体(Mesh)和渲染管线(PipeLineStateObject)。
  3. 创建顶点数据
    • 对于一个三角形,你需要至少三个顶点。每个顶点通常包含位置信息(x, y, z坐标)以及可能的颜色、纹理坐标等。
    • 这些顶点数据需要被存储在显存中,以便GPU可以访问它们。
  4. 加载和编译Shader
    • Shader是GPU上运行的程序,用于处理顶点数据和像素数据。你需要至少两个shader:顶点shader和像素shader。
    • 顶点shader负责处理顶点数据,例如变换顶点的位置。
    • 像素shader负责处理像素级别的数据,例如确定每个像素的颜色。
    • 使用D3DX11CompileFromFile()函数从.shader文件加载并编译这些shader。
  5. 设置渲染状态
    • 设置渲染目标(通常是后台缓冲区)。
    • 清除渲染目标,这通常包括清屏操作,以便在绘制新内容之前清除旧的内容。
    • 设置深度测试和混合等渲染状态。
  6. 绘制三角形
    • 告诉GPU从显存中读取顶点数据。
    • 调用渲染命令来绘制三角形。这通常是通过调用如ID3D11DeviceContext::Draw这样的函数来完成的。
  7. 呈现
    • 将后台缓冲区的内容呈现到屏幕上。这通常是通过调用如IDXGISwapChain::Present这样的函数来完成的。

请注意,以上步骤是一个简化的概述,并且具体的实现细节可能会因DirectX的版本和你的具体需求而有所不同。如果你需要更详细的指导或示例代码,建议查阅DirectX的官方文档或相关的教程和示例代码。

 

使用DirectX用c++画一个三角形 

在使用DirectX和C++来绘制一个三角形时,你通常会使用DirectX的图形API,例如DirectX 11或DirectX 12。以下是一个使用DirectX 11和C++来绘制一个三角形的简化步骤和示例代码:

步骤:

  1. 初始化DirectX环境:创建一个窗口,初始化Direct3D设备、设备上下文和交换链。
  2. 设置视图和投影矩阵:定义视图和投影矩阵,以便正确渲染场景。
  3. 创建顶点缓冲区和索引缓冲区:定义三角形的顶点数据,并将其存储在顶点缓冲区中。由于三角形只需要三个顶点,所以不需要索引缓冲区。
  4. 创建顶点着色器和像素着色器:编写简单的顶点着色器和像素着色器,以渲染三角形。
  5. 设置输入布局和着色器阶段:定义输入布局,以匹配顶点着色器的输入,并将着色器绑定到渲染管线。
  6. 渲染循环:在渲染循环中,清除渲染目标,设置视图和投影矩阵,绘制三角形,然后呈现交换链。

示例代码(简化版):

请注意,由于完整的示例代码很长,并且需要多个文件和资源(如shader文件),这里只提供一个简化的框架和关键部分。

// 假设你已经包含了必要的头文件,并且已经初始化了窗口、设备和上下文
// 顶点结构
struct Vertex
{
XMFLOAT3 pos; // 位置
// 可以添加其他属性,如颜色、纹理坐标等
};
// 顶点数据
Vertex vertices[] =
{
{ XMFLOAT3(-0.5f, 0.5f, 0.0f) },
{ XMFLOAT3(0.0f, -0.5f, 0.0f) },
{ XMFLOAT3(0.5f, 0.5f, 0.0f) }
};
// 创建顶点缓冲区
ID3D11Buffer* pVertexBuffer = nullptr;
D3D11_BUFFER_DESC bd;
bd.Usage = D3D11_USAGE_DEFAULT;
bd.ByteWidth = sizeof(Vertex) * 3;
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = 0;
bd.MiscFlags = 0;
bd.StructureByteStride = 0;
D3D11_SUBRESOURCE_DATA InitData;
ZeroMemory(&InitData, sizeof(InitData));
InitData.pSysMem = vertices;
pDevice->CreateBuffer(&bd, &InitData, &pVertexBuffer);
// ... 加载和编译着色器,设置输入布局等 ...
// 渲染循环
while (/* 窗口仍然打开 */)
{
// 清除渲染目标
// ...
// 设置视图和投影矩阵(如果需要)
// ...
// 绘制三角形
UINT stride = sizeof(Vertex);
UINT offset = 0;
pDeviceContext->IASetVertexBuffers(0, 1, &pVertexBuffer, &stride, &offset);
pDeviceContext->Draw(3, 0); // 绘制3个顶点,从索引0开始
// 呈现交换链
// ...
}
// 清理资源
// ...

注意事项:

  • 你需要确保已经正确设置了输入布局,以匹配你的顶点结构和顶点着色器的输入。
  • 你需要加载和编译顶点着色器和像素着色器,并将它们绑定到渲染管线。
  • 这个示例仅绘制了一个简单的三角形,没有使用索引缓冲区、纹理或其他高级特性。
  • 完整的示例代码将包括更多的错误检查和资源管理代码。
  • 你可能需要查阅DirectX的官方文档或相关的教程和示例代码,以获取更详细的信息和完整的实现。

使用DirectX用c#画一个三角形 

在C#中直接使用DirectX来绘制图形通常是通过SharpDX这样的库来实现的,因为C#并没有像C++那样内置对DirectX的原生支持。SharpDX是一个流行的开源库,它封装了DirectX API,使得C#程序员可以更方便地使用这些功能。

下面是一个简化的步骤,展示了如何使用SharpDX在C#中绘制一个三角形:

  1. 安装SharpDX
    首先,你需要通过NuGet包管理器安装SharpDX库。在Visual Studio中,你可以通过“管理NuGet程序包”来搜索并安装SharpDX。

  2. 初始化DirectX设备
    使用SharpDX创建Direct3D设备、设备上下文和交换链。

  3. 定义顶点结构和数据
    创建一个表示顶点的结构(通常是结构体或类),并为你的三角形定义顶点数据。

  4. 创建顶点缓冲区和输入布局
    将顶点数据放入顶点缓冲区中,并定义输入布局来描述顶点数据的结构。

  5. 编写顶点着色器和像素着色器
    编写简单的着色器代码来定义三角形的渲染方式。这些着色器通常使用HLSL(高级着色器语言)编写,并需要被编译为二进制格式供SharpDX使用。

  6. 设置渲染管线
    将着色器、输入布局和顶点缓冲区绑定到渲染管线。

  7. 渲染循环
    在渲染循环中,清除渲染目标,设置视口和投影矩阵(如果需要),调用绘制命令来渲染三角形,并呈现交换链。

  8. 清理资源
    在应用程序结束时,确保释放所有DirectX资源。

由于完整的示例代码会很长,并且涉及多个文件和资源,这里仅提供一个简化的框架代码示例,展示关键部分:

// 假设已经包含了SharpDX的命名空间
// 顶点结构
public struct VertexPositionColor
{
public Vector3 Position;
public Vector4 Color;
// 构造函数等...
}
// 初始化部分(在窗口或表单的加载事件中)
// ...
var device = new SharpDX.Direct3D11.Device(...); // 创建设备
var context = device.ImmediateContext; // 获取设备上下文
// ... 创建交换链、渲染目标视图等 ...
// 顶点数据
var vertices = new VertexPositionColor[]
{
new VertexPositionColor { Position = new Vector3(-0.5f, 0.5f, 0), Color = new Vector4(1, 0, 0, 1) }, // 红色
new VertexPositionColor { Position = new Vector3(0, -0.5f, 0), Color = new Vector4(0, 1, 0, 1) }, // 绿色
new VertexPositionColor { Position = new Vector3(0.5f, 0.5f, 0), Color = new Vector4(0, 0, 1, 1) } // 蓝色
};
// 创建顶点缓冲区等...
// ...
// 渲染循环(在窗口或表单的绘制事件中)
while (/* 窗口仍然打开 */)
{
// 清除渲染目标
context.ClearRenderTargetView(...); // 清除操作
// 设置视口(如果需要)
// ...
// 绑定顶点缓冲区和输入布局,设置着色器等...
// ...
// 绘制三角形
context.Draw(...); // 绘制调用
// 呈现交换链
swapChain.Present(1, PresentFlags.None); // 呈现操作
}
// 清理资源(在窗口或表单的关闭事件中)
// ... 释放所有DirectX资源 ...

请注意,这只是一个非常简化的框架示例,你需要填写所有的细节代码,例如初始化设备、交换链、顶点缓冲区、输入布局、着色器等,并确保正确地管理所有资源。你还需要处理窗口消息、输入等。对于更详细的实现和完整的示例代码,建议查阅SharpDX的官方文档或相关的教程和示例项目。

使用DirectX用c++画一个四面体

 

要在C++中使用DirectX来绘制一个四面体(通常是一个正四面体),你需要遵循以下步骤:

  1. 设置DirectX环境
    • 初始化Direct3D设备、设备上下文和交换链。
    • 创建一个渲染目标视图(通常是后缓冲区)和一个深度/模板缓冲区。
  2. 定义顶点数据
    • 创建一个结构体来表示顶点,通常包含位置信息(对于3D图形,通常还有颜色、纹理坐标等)。
    • 计算四面体的顶点坐标。对于正四面体,顶点可以位于一个单位立方体的对角线上。
  3. 创建顶点缓冲区
    • 将顶点数据放入一个数组中。
    • 创建一个顶点缓冲区,并将顶点数据上传到GPU内存中。
  4. 设置输入布局
    • 定义一个输入布局来描述顶点数据的格式,这样GPU才能正确解释顶点缓冲区中的数据。
  5. 编写着色器
    • 编写一个顶点着色器来处理顶点数据,进行必要的变换(如世界、视图和投影变换)。
    • 编写一个像素着色器(或片段着色器)来确定每个像素的颜色。
  6. 加载和编译着色器
    • 使用D3DCompile函数从HLSL文件加载并编译着色器代码。
    • 创建着色器对象,并将编译后的着色器代码绑定到这些对象上。
  7. 设置渲染状态
    • 设置光栅化状态、深度测试状态等。
    • 清除渲染目标和深度/模板缓冲区。
  8. 绘制四面体
    • 设置顶点缓冲区和输入布局。
    • 调用渲染命令(如ID3D11DeviceContext::Draw)来绘制四面体。
  9. 呈现
    • 将渲染目标的内容呈现到屏幕上。
  10. 清理资源
    • 在程序结束时释放所有DirectX资源。

下面是一个简化的伪代码示例,展示了如何设置这些步骤:

// 假设你已经包含了所有必要的头文件和设置了DirectX环境
// 顶点结构体
struct Vertex
{
XMFLOAT3 Pos; // 位置
// 可以添加其他属性,如XMFLOAT3 Normal(法线)等
};
// 四面体的顶点数据
Vertex tetrahedronVertices[] = {
// 这里填写四面体的顶点坐标,例如:
{ XMFLOAT3(/* x, y, z */) },
// ... 其他三个顶点
};
// ... 初始化DirectX环境、创建设备、上下文等 ...
// ... 创建顶点缓冲区 ...
// ... 加载和编译着色器 ...
// 渲染循环
while (/* 窗口仍然打开 */)
{
// 清除渲染目标和深度/模板缓冲区
// ...
// 设置输入布局和顶点缓冲区
// ...
// 设置着色器和其他渲染状态
// ...
// 绘制四面体
context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); // 设置图元类型
context->Draw(12, 0); // 四面体由4个三角形组成,共12个顶点(但这里可能使用索引缓冲区来优化)
// 呈现交换链
// ...
}
// ... 清理资源 ...

请注意,这个示例非常简化,并且没有包括所有必要的代码和细节。特别是,你需要确保正确加载和编译着色器,正确设置输入布局,以及正确配置渲染状态。此外,如果你想要优化性能,可能会使用索引缓冲区来减少绘制的顶点数量。对于更详细的实现和完整的示例代码,建议查阅DirectX的官方文档或相关的教程和示例项目。

使用DirectX用c++画一个旋转的四面体 

要使用DirectX在C++中绘制一个旋转的四面体,你需要设置渲染循环并在每次迭代中更新四面体的旋转矩阵。以下是一个简化的步骤和示例代码:

步骤

  1. 初始化DirectX环境:创建Direct3D设备、上下文和窗口。

  2. 定义顶点数据和索引:对于四面体,你需要定义其四个顶点和用于绘制其表面的索引。

  3. 创建顶点缓冲区和索引缓冲区:将顶点数据和索引数据上传到GPU。

  4. 编写着色器:编写顶点着色器和像素着色器。

  5. 设置渲染状态:启用深度测试等。

  6. 实现渲染循环:在循环中更新四面体的旋转矩阵,并渲染四面体。

  7. 呈现和交换:将渲染结果呈现到屏幕上。

  8. 清理资源:在程序结束时释放资源。

示例代码

以下是一个简化的示例代码片段,展示了如何设置和渲染一个旋转的四面体:

#include <d3d11.h>
#include <d3dcompiler.h>
#include <xmmath.h>
// ... 其他必要的头文件 ...
// 顶点结构体
struct Vertex
{
XMFLOAT3 Pos;
// 可以添加其他属性,如颜色、纹理坐标等
};
// 初始化函数(创建设备、上下文、着色器等)
void InitD3D(/* ... */);
// 渲染函数
void Render(/* ... */);
// 顶点数据(四面体)
Vertex tetrahedronVertices[] = { /* ... 填写四面体顶点数据 ... */ };
// 索引数据(绘制四面体所需的索引)
unsigned short indices[] = { /* ... 填写索引数据 ... */ };
// 旋转角度
float rotationAngle = 0.0f;
// 渲染循环
int WINAPI WinMain(/* ... */)
{
// 初始化DirectX环境
InitD3D(/* ... */);
// 渲染循环
MSG msg = { 0 };
while (WM_QUIT != msg.message)
{
if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
// 更新旋转角度(例如,每帧增加一定的角度)
rotationAngle += 0.01f; // 旋转速度,可以根据需要调整
// 清除屏幕和深度缓冲区
// ...
// 渲染四面体
Render(/* ... 传递旋转角度等参数 ... */);
// 呈现和交换缓冲区
// ...
}
}
// 清理DirectX资源
// ...
return (int)msg.wParam;
}
// 渲染函数示例
void Render(/* ... */)
{
// 获取设备上下文
ID3D11DeviceContext* context = /* ... */;
// 设置视图和投影矩阵(这里假设你已经有了这些矩阵)
XMMATRIX view = /* ... */;
XMMATRIX projection = /* ... */;
// 计算世界矩阵(包括旋转)
XMMATRIX rotation = XMMatrixRotationY(XMConvertToRadians(rotationAngle));
XMMATRIX world = rotation; // 假设没有平移或缩放
// 将世界、视图和投影矩阵传递给着色器(这通常是通过常量缓冲区完成的)
// ...
// 设置输入布局和顶点/索引缓冲区
// ...
// 绘制调用
context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
context->DrawIndexed(/* 索引数量 */, 0, 0); // 从索引缓冲区中的第一个索引开始绘制
// ... 其他可能的渲染调用 ...
}
// 初始化、清理和其他函数的具体实现省略...

请注意,这个示例代码是一个框架,并没有包含所有必要的细节和错误处理。你需要实现初始化函数(InitD3D)、渲染函数(Render)以及所有必要的DirectX API调用。此外,你还需要编写并编译着色器代码,并将其加载到着色器对象中。

在实际项目中,你可能还需要处理窗口消息、输入、资源管理等其他任务。这只是一个起点,用于展示如何使用DirectX在C++中绘制一个旋转的四面体。

 

使用DirectX用c++画一个正方形 

在DirectX中使用C++来绘制一个正方形(在3D空间中通常称为一个平面四边形或立方体的一个面)涉及几个关键步骤。以下是一个简化的步骤和示例代码,说明如何设置和渲染一个正方形:

步骤

  1. 初始化DirectX环境:创建Direct3D设备、上下文和交换链。

  2. 定义顶点数据:对于正方形,你需要定义四个顶点。

  3. 创建顶点缓冲区:将顶点数据上传到GPU。

  4. 编写着色器:编写顶点着色器和像素着色器。

  5. 设置渲染状态:启用深度测试(如果需要的话)和其他必要的渲染状态。

  6. 渲染正方形:在渲染循环中设置顶点缓冲区和输入布局,然后绘制正方形。

  7. 呈现和交换:将渲染结果呈现到屏幕上。

  8. 清理资源:在程序结束时释放资源。

示例代码

以下是一个简化的示例代码片段,展示了如何设置和渲染一个正方形:

#include <d3d11.h>
#include <d3dcompiler.h>
#include <xmmath.h>
// ... 其他必要的头文件 ...
// 顶点结构体
struct Vertex
{
XMFLOAT3 Pos; // 位置
// 可以添加其他属性,如颜色等
};
// 正方形的顶点数据(在XY平面上,Z为0)
Vertex squareVertices[] =
{
{ XMFLOAT3(-0.5f, -0.5f, 0.0f) }, // 左下角
{ XMFLOAT3(0.5f, -0.5f, 0.0f) }, // 右下角
{ XMFLOAT3(0.5f, 0.5f, 0.0f) }, // 右上角
{ XMFLOAT3(-0.5f, 0.5f, 0.0f) } // 左上角
};
// ... 初始化DirectX环境、创建设备、上下文等的代码 ...
// ... 加载和编译着色器的代码 ...
// 渲染正方形的函数
void RenderSquare(/* ID3D11DeviceContext* context */)
{
// 假设你已经有了一个已经设置好的顶点缓冲区(pBuffer)和输入布局(pInputLayout)
// 设置输入布局
context->IASetInputLayout(pInputLayout);
// 设置顶点缓冲区
UINT stride = sizeof(Vertex);
UINT offset = 0;
context->IASetVertexBuffers(0, 1, &pBuffer, &stride, &offset);
// 设置图元拓扑
context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
// ... 设置其他必要的渲染状态(如深度测试) ...
// 绘制正方形
context->Draw(4, 0); // 绘制4个顶点作为三角形条带
}
// ... 渲染循环中的代码 ...
int main(/* ... */)
{
// ... 初始化DirectX环境、创建设备、上下文、交换链、着色器等 ...
// 渲染循环
while (/* 窗口仍然打开 */)
{
// ... 处理消息、更新等 ...
// 清除渲染目标和深度/模板缓冲区
// ...
// 渲染正方形
RenderSquare(/* context */);
// 呈现和交换缓冲区
// ...
}
// ... 清理资源 ...
return 0;
}

请注意,这个示例代码是一个框架,并没有包含所有必要的细节和错误处理。你需要实现初始化DirectX环境、加载和编译着色器、创建顶点缓冲区和输入布局等函数。此外,你还需要处理窗口创建、输入处理、资源管理等其他任务。这个示例假设你已经有了基本的DirectX编程知识。如果你刚开始学习DirectX,我建议你查阅相关的教程和文档来获取更详细的信息。

 使用DirectX用c++画一个圆内有一个正方形

要在DirectX中使用C++画一个圆内有一个正方形的场景,你需要分别定义圆和正方形的顶点数据,并创建相应的顶点缓冲区和着色器来渲染它们。由于DirectX主要是为3D图形设计的,所以“圆”通常是通过绘制一系列线段(例如,一个多边形近似)或纹理映射到一个圆形区域来实现的。

以下是一个简化的步骤和示例代码,展示如何设置和渲染一个圆内有一个正方形的场景:

步骤

  1. 初始化DirectX环境:创建Direct3D设备、上下文和窗口。

  2. 定义顶点数据:对于正方形,定义四个顶点。对于圆,定义多个顶点来近似它(例如,使用36个顶点来创建一个近似的圆)。

  3. 创建顶点缓冲区:为正方形和圆的顶点数据分别创建顶点缓冲区。

  4. 编写着色器:编写顶点着色器和像素着色器。

  5. 设置渲染状态:启用深度测试(如果需要的话)和其他必要的渲染状态。

  6. 渲染场景:在渲染循环中,先渲染圆(作为背景或轮廓),然后渲染正方形。

  7. 呈现和交换:将渲染结果呈现到屏幕上。

  8. 清理资源:在程序结束时释放资源。

示例代码(伪代码)

由于完整的代码会很长,并且涉及多个文件和复杂的设置,以下是一个简化的伪代码示例:

// 顶点结构体
struct Vertex
{
XMFLOAT3 Pos; // 位置
// 可以添加其他属性,如颜色、纹理坐标等
};
// 正方形的顶点数据
Vertex squareVertices[/* ... */]; // 填充正方形的四个顶点数据
// 圆的顶点数据(使用多边形近似)
Vertex circleVertices[/* ... */]; // 填充圆的多个顶点数据来近似它
// ... 初始化DirectX环境、创建设备、上下文等的代码 ...
// ... 加载和编译着色器的代码 ...
// 渲染正方形的函数
void RenderSquare(/* ID3D11DeviceContext* context, 顶点缓冲区等 */)
{
// 设置输入布局、顶点缓冲区和图元拓扑来渲染正方形
// ...
context->Draw(/* 顶点数量 */);
}
// 渲染圆的函数(使用多边形近似)
void RenderCircle(/* ID3D11DeviceContext* context, 顶点缓冲区等 */)
{
// 设置输入布局、顶点缓冲区和图元拓扑来渲染圆
// ...
context->Draw(/* 顶点数量 */);
}
// 渲染循环中的代码
void RenderFrame()
{
// ... 清除渲染目标和深度/模板缓冲区 ...
// 渲染圆(作为背景或轮廓)
RenderCircle(/* ... */);
// 渲染正方形(在圆内)
RenderSquare(/* ... */);
// ... 呈现和交换缓冲区 ...
}
int main(/* ... */)
{
// ... 初始化DirectX环境、创建设备、上下文、交换链、着色器等 ...
// 渲染循环
while (/* 窗口仍然打开 */)
{
// ... 处理消息、更新等 ...
RenderFrame(); // 渲染一帧
}
// ... 清理资源 ...
return 0;
}

注意点

  • 对于圆,你通常会使用多个顶点来近似它。例如,你可以使用36个顶点来创建一个近似的圆,每个顶点沿着圆的边缘等距分布。
  • 确保正方形的顶点位于由圆的顶点定义的圆形区域内。
  • 根据你的需求,你可能还需要添加纹理映射、光照、阴影等高级效果。
  • 在实际的DirectX程序中,你需要处理许多其他细节,如错误检查、资源管理、输入处理等。这个示例仅提供了一个高级概述。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值