Lines


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(. . .);
}


SimpleLineRun

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.

RotCubeRun1

RotCubeRun2

© Copyright 2000-2021 Wintempla selo. All Rights Reserved. Jul 22 2021. Home