Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[DirectX 11] Nie wyświetla trójkąta, kiedy używam własnej klasy.

Ostatnio zmodyfikowano 2014-09-26 19:24
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
[DirectX 11] Nie wyświetla trójkąta, kiedy używam własnej klasy.
» 2014-09-26 15:01:50
Jeżeli używam "czystego" kodu a nie z mojego "wrappera" to wszystko ładnie się wyświetla. Jeżeli jednak użyje swojej klasy... nie widze nic. Kod testu mojego wrappera:
C/C++
#include <v3de.hpp>
#include <fstream>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "d3dx11.lib")
#pragma comment(lib, "d3dx10.lib")
#pragma comment(lib, "dxerr.lib")

#include <d3d11.h>
#include <d3dx11.h>
#include <d3dx10.h>
#include <xnamath.h>
#include <DxErr.h>

HRESULT hr;

v3de::WindowClass vWClass;
v3de::DX11Window * vWindow;
v3de::VertexModel model;

int Width = 800;
int Height = 600;


int main( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    vWClass.create( "KlasaOkna", true, v3de::uVector3 < unsigned char >( 255, 0, 0 ), CS_HREDRAW | CS_VREDRAW );
   
    vWindow = new v3de::DX11Window();
    vWindow->create( "Okienko", "KlasaOkna", WS_OVERLAPPEDWINDOW, v3de::uVector < int >( Width, Height ), true );
   
    vWindow->show( true );
   
    vWindow->setWindowMode( true );
   
    vWindow->createVertexShader( "Effects.fx" );
    vWindow->createPixelShader( "Effects.fx" );
    vWindow->createVertexLayout();
   
    v3de::VertexModel model;
   
    model.setIndexMode( true );
   
    model.addVertex( v3de::Vertex( 0.5f, - 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f ) );
    model.addVertex( v3de::Vertex( 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f ) );
    model.addVertex( v3de::Vertex( - 0.5f, - 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f ) );
   
    model.addIndex( 0 );
    model.addIndex( 1 );
    model.addIndex( 2 );
    model.apply( vWindow );
   
    vWindow->setViewport( v3de::uVector < int >( 800, 600 ) );
   
    while( vWindow->isReachable() )
    {
        vWindow->pollEvent();
        v3de::Message ms = vWindow->getWindowEvent();
        if( ms.type == v3de::Message::Unknown )
        {
            vWindow->clearWindow( D3DXCOLOR( 255, 0, 0, 0.0f ) );
           
            model.draw( vWindow );
           
            vWindow->drawScene();
        }
        if( ms.type == v3de::Message::Closed )
        {
            vWindow->destroy();
            break;
        }
        else if( ms.type == v3de::Message::KeyDown )
        {
            if( ms.key == v3de::Key::Escape )
            {
                vWindow->destroy();
                break;
            }
        }
       
       
    }
    delete vWindow;
    vWClass.unRegister();
   
    return 0;
}
Tutaj kody z wrappera:

VertexModel.hpp
C/C++
#ifndef V3DEDX11VERTEXMODEL_HPP_INCLUDED
#define V3DEDX11VERTEXMODEL_HPP_INCLUDED
#include "v3deMain.hpp"
#include "v3deDX11Units.hpp"
#include "v3deDX11ErrorManager.hpp"

namespace v3de
{
    class DX11Window;
   
    class VertexModel
    {
    protected:
        vector < Vertex > verticles;
        vector < DWORD > indices;
        ID3D11Buffer * indexBuffer;
        ID3D11Buffer * vertexBuffer;
       
        bool indexed;
    public:
       
        VertexModel();
        ~VertexModel();
       
        void addVertex( Vertex );
        void addIndex( DWORD );
       
        UINT getVerticlesNumber();
        UINT getIndicesNumber();
       
        Vertex getVertex( UINT );
        DWORD getIndex( UINT );
       
        void setIndexMode( bool );
       
        void apply( DX11Window * );
       
        void draw( DX11Window * );
    };
}

#endif // V3DEDX11VERTEXMODEL_HPP_INCLUDED

Tutaj VertexModel.cpp

C/C++
#include "v3deDX11VertexModel.hpp"
#include "v3deDX11Window.hpp"
#include <string>

namespace v3de
{
    VertexModel::VertexModel()
    {
        vertexBuffer = NULL;
        indexBuffer = NULL;
    }
    VertexModel::~VertexModel()
    {
        verticles.clear();
        if( vertexBuffer != NULL ) vertexBuffer->Release();
       
        indices.clear();
        if( indexBuffer != NULL ) indexBuffer->Release();
       
    }
   
    void VertexModel::addVertex( Vertex v )
    {
        verticles.push_back( v );
    }
    void VertexModel::addIndex( DWORD dw )
    {
        indices.push_back( dw );
    }
    Vertex VertexModel::getVertex( UINT id )
    {
        if( id < getVerticlesNumber() )
        {
            return verticles[ id ];
        }
        else return Vertex();
       
    }
    DWORD VertexModel::getIndex( UINT id )
    {
        if( id < getIndicesNumber() )
        {
            return indices[ id ];
        }
        else return - 1;
       
    }
    UINT VertexModel::getVerticlesNumber()
    {
        return verticles.size();
    }
    UINT VertexModel::getIndicesNumber()
    {
        return indices.size();
    }
   
    void VertexModel::setIndexMode( bool d )
    {
        indexed = d;
    }
   
    void VertexModel::apply( DX11Window * wnd )
    {
        DX11Result fResult;
        if( indexed )
        {
            D3D11_BUFFER_DESC indexBufferDesc;
            ZeroMemory( & indexBufferDesc, sizeof( indexBufferDesc ) );
           
            indexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
            indexBufferDesc.ByteWidth = sizeof( DWORD ) * getIndicesNumber();
            indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
            indexBufferDesc.CPUAccessFlags = 0;
            indexBufferDesc.MiscFlags = 0;
           
            D3D11_SUBRESOURCE_DATA iinitData;
           
            iinitData.pSysMem =( void * )( & indices[ 0 ] );
            fResult = wnd->dxGetDevice()->CreateBuffer( & indexBufferDesc, & iinitData, & indexBuffer );
            fResult.dconsole( "VertexModel : CreateBuffer (Index): " );
           
            wnd->dxGetDeviceContext()->IASetIndexBuffer( indexBuffer, DXGI_FORMAT_R32_UINT, 0 );
        }
        D3D11_BUFFER_DESC vertexBufferDesc;
        ZeroMemory( & vertexBufferDesc, sizeof( vertexBufferDesc ) );
       
        vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
        vertexBufferDesc.ByteWidth = sizeof( v3de::Vertex ) * getVerticlesNumber();
        vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
        vertexBufferDesc.CPUAccessFlags = 0;
        vertexBufferDesc.MiscFlags = 0;
       
        D3D11_SUBRESOURCE_DATA vertexBufferData;
       
        ZeroMemory( & vertexBufferData, sizeof( vertexBufferData ) );
        vertexBufferData.pSysMem =( void * )( & verticles[ 0 ] );
        fResult = wnd->dxGetDevice()->CreateBuffer( & vertexBufferDesc, & vertexBufferData, & vertexBuffer );
        fResult.dconsole( "VertexModel : CreateBuffer (Vertex): " );
        UINT stride = sizeof( v3de::Vertex );
        UINT offset = 0;
        wnd->dxGetDeviceContext()->IASetVertexBuffers( 0, 1, & vertexBuffer, & stride, & offset );
        wnd->dxGetDeviceContext()->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
    }
   
    void VertexModel::draw( DX11Window * wnd )
    {
        if( !indexed ) wnd->dxGetDeviceContext()->Draw( getVerticlesNumber(), 0 );
        else wnd->dxGetDeviceContext()->DrawIndexed( getIndicesNumber(), 0, 0 );
       
    }
}

Funkcje które zaczynające się od "dx" np: "dxGetDeviceContext()" zwracają DirectX11-owe obiekty typu SwapChain, Device, DeviceContext itd.

Tutaj kod Vertexu:
C/C++
struct Vertex
{
    XMFLOAT3 position;
    XMFLOAT4 color;
   
    Vertex();
    Vertex( float, float, float, float = 0.0f, float = 0.0f, float = 0.0f, float = 0.0f );
   
    void setColor( float, float, float, float );
    void setPosition( float, float, float );
   
    XMFLOAT3 getPosition();
    XMFLOAT4 getColor();
};

Tutaj jak ustawiam input layout vertexu:
C/C++
D3D11_INPUT_ELEMENT_DESC layoutDesc[] =
{
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
    { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }
};
UINT layoutArrayNum = ARRAYSIZE( layoutDesc );
fResult = d3d11Device->CreateInputLayout( layoutDesc, layoutArrayNum, vertexShader.getVertexBuffer()->GetBufferPointer(),
vertexShader.getVertexBuffer()->GetBufferSize(), & d3d11VertexLayout );
fResult.dconsole( "Create Input Layout: " );

d3d11DeviceContext->IASetInputLayout( d3d11VertexLayout );

d3d11DeviceContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );

Tutaj jak ustawiam początkowo DirectX11
C/C++
DXGI_MODE_DESC bufferDesc;
DXGI_SWAP_CHAIN_DESC swapChainDesc;

ZeroMemory( & bufferDesc, sizeof( DXGI_MODE_DESC ) );

bufferDesc.Width = _size.x;
bufferDesc.Height = _size.y;
bufferDesc.RefreshRate.Numerator = 60;
bufferDesc.RefreshRate.Denominator = 1;
bufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
bufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
bufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;


ZeroMemory( & swapChainDesc, sizeof( DXGI_SWAP_CHAIN_DESC ) );

swapChainDesc.BufferDesc = bufferDesc;
swapChainDesc.SampleDesc.Count = 1;
swapChainDesc.SampleDesc.Quality = 0;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
swapChainDesc.BufferCount = 1;
swapChainDesc.OutputWindow = getHandle();
swapChainDesc.Windowed = TRUE;
swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;


//Create our SwapChain
fResult = D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, NULL, NULL,
D3D11_SDK_VERSION, & swapChainDesc, & d3d11SwapChain, & d3d11Device, NULL, & d3d11DeviceContext );
fResult.dconsole( "D3D11CreateDeviceAndSwapChain: " );

//Create our BackBuffer
ID3D11Texture2D * BackBuffer;
fResult = d3d11SwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ),( void ** ) & BackBuffer );
fResult.dconsole( "GetBuffer: " );

//Create our Render Target
fResult = d3d11Device->CreateRenderTargetView( BackBuffer, NULL, & d3d11RenderTargetView );
fResult.dconsole( "GetBuffer: " );
BackBuffer->Release();

//Set our Render Target
d3d11DeviceContext->OMSetRenderTargets( 1, & d3d11RenderTargetView, NULL );

Już nie wiem co robić. Nie działa w ogóle.

A dodam jeszcze że gdy w teście "wrappera" ustawie samemu wszystkie vertexy to wszystko działa.
Kod:
C/C++
#include <v3de.hpp>
#include <fstream>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "d3dx11.lib")
#pragma comment(lib, "d3dx10.lib")
#pragma comment(lib, "dxerr.lib")

#include <d3d11.h>
#include <d3dx11.h>
#include <d3dx10.h>
#include <xnamath.h>
#include <DxErr.h>

HRESULT hr;

v3de::WindowClass vWClass;
v3de::DX11Window * vWindow;
ID3D11Buffer * triangleVertBuffer = NULL;
v3de::VertexModel model;

int Width = 800;
int Height = 600;


int main( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    vWClass.create( "KlasaOkna", true, v3de::uVector3 < unsigned char >( 255, 0, 0 ), CS_HREDRAW | CS_VREDRAW );
   
    vWindow = new v3de::DX11Window();
    vWindow->create( "Okienko", "KlasaOkna", WS_OVERLAPPEDWINDOW, v3de::uVector < int >( Width, Height ), true );
   
    vWindow->show( true );
   
    vWindow->setWindowMode( true );
   
    vWindow->createVertexShader( "Effects.fx" );
    vWindow->createPixelShader( "Effects.fx" );
    vWindow->createVertexLayout();
   
    v3de::Vertex v[] =
    {
        v3de::Vertex( 0.0f, 0.5f, 0.0f ),
        v3de::Vertex( 0.5f, - 0.5f, 0.0f ),
        v3de::Vertex( - 0.5f, - 0.5f, 0.0f ),
    };
   
    D3D11_BUFFER_DESC vertexBufferDesc;
    ZeroMemory( & vertexBufferDesc, sizeof( vertexBufferDesc ) );
   
    vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
    vertexBufferDesc.ByteWidth = sizeof( v3de::Vertex ) * 3;
    vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    vertexBufferDesc.CPUAccessFlags = 0;
    vertexBufferDesc.MiscFlags = 0;
   
    D3D11_SUBRESOURCE_DATA vertexBufferData;
   
    ZeroMemory( & vertexBufferData, sizeof( vertexBufferData ) );
    vertexBufferData.pSysMem = v;
    hr = vWindow->dxGetDevice()->CreateBuffer( & vertexBufferDesc, & vertexBufferData, & triangleVertBuffer );
    if( FAILED( hr ) )
    {
        MessageBox( NULL, DXGetErrorDescription( hr ),
        TEXT( " D3D11CreateDeviceAndSwapChain" ), MB_OK );
    }
   
    //Set the vertex buffer
    UINT stride = sizeof( v3de::Vertex );
    UINT offset = 0;
    vWindow->dxGetDeviceContext()->IASetVertexBuffers( 0, 1, & triangleVertBuffer, & stride, & offset );
   
    vWindow->setViewport( v3de::uVector < int >( 800, 600 ) );
   
    while( vWindow->isReachable() )
    {
        vWindow->pollEvent();
        v3de::Message ms = vWindow->getWindowEvent();
        if( ms.type == v3de::Message::Unknown )
        {
            vWindow->clearWindow( D3DXCOLOR( 255, 0, 0, 0.0f ) );
           
            vWindow->dxGetDeviceContext()->Draw( 3, 0 );
           
            vWindow->drawScene();
        }
        if( ms.type == v3de::Message::Closed )
        {
            vWindow->destroy();
            break;
        }
        else if( ms.type == v3de::Message::KeyDown )
        {
            if( ms.key == v3de::Key::Escape )
            {
                vWindow->destroy();
                break;
            }
        }
       
       
    }
    delete vWindow;
    vWClass.unRegister();
   
    return 0;
}
P-117597
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2014-09-26 16:27:18
Właśnie spostrzegłem, że przypisuje adres do elementu vectora, ale kiedyś słyszałem że tam adresy się często zmieniają. Czy to ma na to wpływ? Jak rozwiązać ten problem?
P-117604
Monika90
» 2014-09-26 17:03:46
Dodawanie elementów do wektora może unieważnić wskaźniki do elementów dodanych wcześniej. Ale u Ciebie to nie powinno mieć znaczenia, bo ty najpierw dodajesz elementy, a dopiero potem wywołujesz apply, które pobiera adres. Ponieważ więcej nie dodajesz już elemetów, to ten adres pozostaje ważny.
P-117606
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2014-09-26 17:08:40
Faktycznie. Tylko teraz nie wiem czemu to nie działa. Wcześniej miałem podobny kod, który działał (jedynie nie było indeksowania). Ale to nie ma znaczenia bo moge wyłączyć indeksowanie w VertexModel więc problem leży gdzieś indziej. Nawet od nowa przepisywałem klase VertexModel. Kurcze, sprawdzałem czy to nie wina okna (nie HWND ale raczej tego DX11) ale nie dostaje żadnych błędów. Klasa DX11Result odpowiada za odczytywanie i wyświetlanie blędu (funkcja dconsole()).

Edit:
Ale to nie może być wina niczego innego tylko klasy VertexModel. Przecież gdy napisze to na czysto i to według tego samego tutoriala (braynzarsoft.net) to działa. Dziwne to jest. No ja już nie wiem.

Zaraz oszaleje. Przepisałem kod klasy do funkcji main() w teście tego wrappera i prosze. Wszystko działa. CZEMU NIE DZIAŁA W KLASIE?!
Oto kod:
C/C++
#include <v3de.hpp>
#include <fstream>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "d3dx11.lib")
#pragma comment(lib, "d3dx10.lib")
#pragma comment(lib, "dxerr.lib")

#include <d3d11.h>
#include <d3dx11.h>
#include <d3dx10.h>
#include <xnamath.h>
#include <DxErr.h>

HRESULT hr;

v3de::WindowClass vWClass;
v3de::DX11Window * vWindow;
ID3D11Buffer * triangleVertBuffer = NULL;
v3de::VertexModel model;

int Width = 800;
int Height = 600;


int main( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    vWClass.create( "KlasaOkna", true, v3de::uVector3 < unsigned char >( 255, 0, 0 ), CS_HREDRAW | CS_VREDRAW );
   
    vWindow = new v3de::DX11Window();
    vWindow->create( "Okienko", "KlasaOkna", WS_OVERLAPPEDWINDOW, v3de::uVector < int >( Width, Height ), true );
   
    vWindow->show( true );
   
    vWindow->setWindowMode( true );
   
    vWindow->createVertexShader( "Effects.fx" );
    vWindow->createPixelShader( "Effects.fx" );
    vWindow->createVertexLayout();
   
    std::vector < DWORD > indices;
    std::vector < v3de::Vertex > verticles;
   
    indices.push_back( 0 );
    indices.push_back( 1 );
    indices.push_back( 2 );
    indices.push_back( 0 );
    indices.push_back( 2 );
    indices.push_back( 3 );
   
    verticles.push_back( v3de::Vertex( - 0.5f, - 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f ) );
    verticles.push_back( v3de::Vertex( - 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f ) );
    verticles.push_back( v3de::Vertex( 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f ) );
    verticles.push_back( v3de::Vertex( 0.5f, - 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f ) );
   
    ID3D11Buffer * indexBuffer, * vertexBuffer;
   
    v3de::DX11Result fResult;
    D3D11_BUFFER_DESC indexBufferDesc;
    ZeroMemory( & indexBufferDesc, sizeof( indexBufferDesc ) );
   
    indexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
    indexBufferDesc.ByteWidth = sizeof( DWORD ) * indices.size();
    indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
    indexBufferDesc.CPUAccessFlags = 0;
    indexBufferDesc.MiscFlags = 0;
   
    D3D11_SUBRESOURCE_DATA iinitData;
   
    iinitData.pSysMem =( void * )( & indices[ 0 ] );
    fResult = vWindow->dxGetDevice()->CreateBuffer( & indexBufferDesc, & iinitData, & indexBuffer );
    fResult.dconsole( "VertexModel : CreateBuffer (Index): " );
   
    vWindow->dxGetDeviceContext()->IASetIndexBuffer( indexBuffer, DXGI_FORMAT_R32_UINT, 0 );
    D3D11_BUFFER_DESC vertexBufferDesc;
    ZeroMemory( & vertexBufferDesc, sizeof( vertexBufferDesc ) );
   
    vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
    vertexBufferDesc.ByteWidth = sizeof( v3de::Vertex ) * verticles.size();
    vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    vertexBufferDesc.CPUAccessFlags = 0;
    vertexBufferDesc.MiscFlags = 0;
   
    D3D11_SUBRESOURCE_DATA vertexBufferData;
   
    ZeroMemory( & vertexBufferData, sizeof( vertexBufferData ) );
    vertexBufferData.pSysMem =( void * )( & verticles[ 0 ] );
    fResult = vWindow->dxGetDevice()->CreateBuffer( & vertexBufferDesc, & vertexBufferData, & vertexBuffer );
    fResult.dconsole( "VertexModel : CreateBuffer (Vertex): " );
    UINT stride = sizeof( v3de::Vertex );
    UINT offset = 0;
    vWindow->dxGetDeviceContext()->IASetVertexBuffers( 0, 1, & vertexBuffer, & stride, & offset );
   
    vWindow->setViewport( v3de::uVector < int >( 800, 600 ) );
   
    while( vWindow->isReachable() )
    {
        vWindow->pollEvent();
        v3de::Message ms = vWindow->getWindowEvent();
        if( ms.type == v3de::Message::Unknown )
        {
            vWindow->clearWindow( D3DXCOLOR( 255, 0, 0, 0.0f ) );
           
            vWindow->dxGetDeviceContext()->DrawIndexed( 6, 0, 0 );
           
            vWindow->drawScene();
        }
        if( ms.type == v3de::Message::Closed )
        {
            vWindow->destroy();
            break;
        }
        else if( ms.type == v3de::Message::KeyDown )
        {
            if( ms.key == v3de::Key::Escape )
            {
                vWindow->destroy();
                break;
            }
        }
       
       
    }
    delete vWindow;
    vWClass.unRegister();
   
    return 0;
}
P-117607
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2014-09-26 19:24:11
Moja głupota. Źle poustawiałem vertexy. Poprawnie powinno być:
C/C++
model.addVertex( v3de::Vertex( - 0.5f, - 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f ) );
model.addVertex( v3de::Vertex( - 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f ) );
model.addVertex( v3de::Vertex( 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f ) );
model.addVertex( v3de::Vertex( 0.5f, - 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f ) );

model.addIndex( 0 );
model.addIndex( 1 );
model.addIndex( 2 );
model.addIndex( 0 );
model.addIndex( 2 );
model.addIndex( 3 );
P-117610
« 1 »
  Strona 1 z 1