3D Lines |
You may render 3D lines in a DirectX application using device->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST); Usted puede dibujar líneas en tres dimensiones en una aplicación de DirectX usando device->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST); |
Problem 1 |
Create a Wintempla DirectX application called SimpleLine to draw a 3D yellow line from (-1, 0, 0) to the point (0, 0, 0) and a green line from (0, 0, 0) to (0, 1, 0) in a black background. After creating the project add a DirectX scene called MainScene and a DirectX object called Diagram. Cree una aplicación de Wintempla de DirectX llamada SimpleLine para dibujar una línea amarilla desde (-1, 0, 0) al punto (0, 0, 0) y una línea verde desde (0, 0, 0) al punto (0, 1, 0) en un fondo negro. Para este problema usted no necesitará ninguna matriz de transformación. Después de crear el proyecto agregue un escena de DirectX llamada MainScene y un objeto de DirectX llamado Diagram. |
Step A |
Edit the file Diagram.cpp as shown. Edite el archivo Diagram.cpp como se muestra. |
Diagram.cpp |
. . . void Diagram::OnRender3D(DX11::Engine& engine) { engine.shaderColor.Render(engine, world, vertexBuffer->GetIndexCount(), 0, 0); } . . . |
Step B |
Edit the files MainScene.h and MainScene.cpp as shown. Edite los archivos MainScene.h and MainScene.cpp cómo se muestra. |
MainScene.h |
//____________________________________________________________ MainScene.h #pragma once #include "Diagram.h" class MainScene : public DX11::Scene { public: Diagram diagram; void OnCreateScene(DX11::Engine& engine); . . . }; |
MainScene.cpp |
. . . void MainScene::OnCreateScene(DX11::Engine& engine) { //______________________________ 1. Set back color RGBA this->SetBackColor(0.0f, 0.0f, 0.4f, 1.0f); //______________________________ 2. Add children this->AddChild(diagram); //______________________________ 3. Camera & Light setup (light.ambientColor) . . . } |
Step C |
Edit the files SimpleLine.h and SimpleLine.cpp as shown. Edite los archivos SimpleLine.h and SimpleLine.cpp cómo se muestra. |
SimpleLine.h |
#pragma once //______________________________________ SimpleLine.h #include "Resource.h" #include "MainScene.h" class SimpleLine : public DX11::Window { public: MainScene mainScene; DX11::ColorVertexBuffer vb; }; |
SimpleLine.cpp |
. . . int APIENTRY wWinMain(. . .) { //_________________________________________________________ 1. Create vertex buffers if (app.vb.CreateData(4, 4, D3D11_USAGE_DEFAULT, D3D_PRIMITIVE_TOPOLOGY_LINELIST) == false) { ::MessageBox(NULL, L"Unable to create vertex buffer", L"SimpleLine", MB_OK | MB_ICONERROR); return 0; } // 1.1 Vertex setup: Line 1 DX11::ColorVertex *vertex = app.vb.vertex; vertex[0].position = DirectX::XMFLOAT3(0.0f, 0.0f, 0.0f); vertex[0].color = DirectX::XMFLOAT4(1.0f, 1.0f, 0.0f, 1.0f); // Yellow vertex[1].position = DirectX::XMFLOAT3(-1.0f, 0.0f, 0.0f); vertex[1].color = DirectX::XMFLOAT4(1.0f, 1.0f, 0.0f, 1.0f); // Yellow // 1.2. Vertex setup: Line 2 vertex[2].position = DirectX::XMFLOAT3(0.0f, 0.0f, 0.0f); vertex[2].color = DirectX::XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f); // Green vertex[3].position = DirectX::XMFLOAT3(0.0f, 1.0f, 0.0f); vertex[3].color = DirectX::XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f); // Green //1.3. Index setup app.vb.index[0] = 0; app.vb.index[1] = 1; app.vb.index[2] = 2; app.vb.index[3] = 3; //_________________________________________________________ 2. Add vertex buffers to the engine app.engine.AddChild(app.vb); //_________________________________________________________ 3. Set vertex buffers to the 3D objects app.mainScene.diagram.vertexBuffer = &app.vb; //_________________________________________________________ 4. Scene setup app.engine.scene[L"mainScene"] = &app.mainScene; app.engine.SetCurrentScene(L"mainScene"); //_________________________________________________________ 5. Run the app return app.Run(. . .); } |
Problem 2 |
Create a Wintempla DirectX application called RotCube to draw a 3D green cube using D3D11_PRIMITIVE_TOPOLOGY_LINELIST. The green cube must slowly rotate around the y-axis. To draw a cube, you need only eight points and 24 indexes. Add a DirectX scene called MainScene and a DirectX object called Cube. Cree una aplicación de Wintempla de DirectX llamada RotCube que dibuje un cubo verde usando D3D11_PRIMITIVE_TOPOLOGY_LINELIST. El cubo verde debe rotar lentamente alrededor del eje Y. Para dibujar un cubo, usted solo necesita ocho puntos y 24 índices. Agregue una escena de DirectX llamada MainScene y un objeto de DirectX llamado cubo. |