标签: direct3d

在一个场景中渲染多个对象DirectX C#

我对directX并不是很了解,但我会尽力解释.首先,我有多个模型对象(带顶点数据的自定义对象).目前,我的代码(见下文)可以使用该模型的vertexBuffer和indexBuffer在场景中渲染单个模型.我想做的是给出一系列模型.在一个场景中渲染它们.这是我目前的代码:

    private void Render()
    {
        device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.White, 1.0f, 0);
        device.BeginScene();

        float x = (float)Math.Cos(0);
        float z = (float)Math.Sin(0);
        device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1f, 50f);
        device.Transform.View = Matrix.LookAtLH(new Vector3(x, 6, z), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
        device.RenderState.Lighting = true;
        device.Lights[0].Type = LightType.Directional;
        device.Lights[0].Diffuse = Color.White;
        device.Lights[0].Direction = new Vector3(-x, -6, -z);
        device.Lights[0].Position = new Vector3(x, 6, z);
        device.Lights[0].Enabled = true;

        device.Transform.World = model.transform;

        device.VertexFormat = CustomVertex.PositionNormalColored.Format;
        device.SetStreamSource(0, vertexBuffer, 0);
        device.Indices = indexBuffer; …
Run Code Online (Sandbox Code Playgroud)

c# directx direct3d

1
推荐指数
1
解决办法
4384
查看次数

什么是深度模板视图

此代码出现在由默认的windows phone 8 direct3d项目创建的Direct3DBase类的编写中:

// Create a depth stencil view.
CD3D11_TEXTURE2D_DESC depthStencilDesc(
    DXGI_FORMAT_D24_UNORM_S8_UINT,
    static_cast<UINT>(m_renderTargetSize.Width),
    static_cast<UINT>(m_renderTargetSize.Height),
    1,
    1,
    D3D11_BIND_DEPTH_STENCIL
    );

ComPtr<ID3D11Texture2D> depthStencil;
DX::ThrowIfFailed(
    m_d3dDevice->CreateTexture2D(
        &depthStencilDesc,
        nullptr,
        &depthStencil
        )
    );

CD3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc(D3D11_DSV_DIMENSION_TEXTURE2D);
DX::ThrowIfFailed(
    m_d3dDevice->CreateDepthStencilView(
        depthStencil.Get(),
        &depthStencilViewDesc,
        &m_depthStencilView
        )
    );
Run Code Online (Sandbox Code Playgroud)

什么是深度模板视图?

c++ direct3d

1
推荐指数
1
解决办法
3005
查看次数

保留Model Matrix的标准位置是什么?

我有一个"3D引擎",它有一个模型矩阵.我的所有3D对象都使用此模型矩阵(用于转换内容).对于每个对象,我在使用之前设置模型标识.到目前为止,它似乎工作得很好,并且如预期的那样好.

但现在我突然想知道我是否有设计缺陷.每个3D对象(基础对象)应该有自己的模型矩阵吗?这样做是否有任何价值(每个3D对象的模型矩阵)?

opengl 3d direct3d webgl

1
推荐指数
1
解决办法
469
查看次数

CreateWindowEx 显示中文乱码而不是原始文本

我有个问题。我想记录我的工具开发,所以我想让窗口名称带有日期和时间数据,而不是在屏幕截图顶部使用 mspaint 来显示日期。但是我只有中文字符而不是字符串。

胡言乱语

这是我想将字符串分配给 CreateWindowEx() 的代码:

char *wndName = "Asphyx V0.01 (Build Date: " __DATE__ " " __TIME__ ")\0";

hWnd = CreateWindowEx(NULL,
                      L"WindowClass",
                      (LPCWSTR)wndName,
                      WS_OVERLAPPEDWINDOW,
                      300,
                      300,
                      wr.right - wr.left,
                      wr.bottom - wr.top,
                      NULL,
                      NULL,
                      hInstance,
                      NULL);
Run Code Online (Sandbox Code Playgroud)

编辑:伙计们,我很欣赏你的回答,但他们都给了我这个

Error 29 error C2308: concatenating mismatched strings  
Run Code Online (Sandbox Code Playgroud)

唯一有点工作的东西是一个尚未删除的答案,但它给了我这个:

在此处输入图片说明

他使用了这个代码:

char title[256];
sprintf(title, "Asphyx V0.01 (Build Date:  %s - %s)", __DATE__, __TIME__);

hWnd = CreateWindowEx(NULL,
                      L"WindowClass",
                      title,
                      WS_OVERLAPPEDWINDOW,
                      300,
                      300,
                      wr.right - wr.left,
                      wr.bottom - wr.top,
                      NULL,
                      NULL,
                      hInstance,
                      NULL);
Run Code Online (Sandbox Code Playgroud)

c++ winapi direct3d createwindowex

1
推荐指数
1
解决办法
925
查看次数

延迟着色抗锯齿

很多人都注意到MSAA不适用于延迟着色.这是为什么?这听起来还不错.

根据维基百科:

...由于将照明阶段与几何阶段分开,硬件抗锯齿不再产生正确的结果,因为插值子样本将导致无意义的位置,法线和切线属性.

你能解释一下吗?

我有哪些其他AA替代品?

opengl graphics direct3d

1
推荐指数
1
解决办法
2560
查看次数

如何将标量乘法应用于四元数

所以,我正在将一些c ++转换为javascript,我真的需要知道D3DX如何定义它们的四元数运算符.

 //Here's the c++ version
 D3DXQUATERNION Qvel = 0.5f * otherQuat* D3DXQUATERNION(angVel.x, angVel.y, angVel.z, 0);


 //Here's the js quat multiplication
   function quat_mul(q1, q2) {            
   return 
    [q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x,
    -q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y,
     q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z,
    -q1.x * q2.x - q1.y * q2.y - q1.z …
Run Code Online (Sandbox Code Playgroud)

javascript c++ scalar direct3d quaternions

0
推荐指数
1
解决办法
4583
查看次数

宏等于功能?

失败的宏

宏(计算机科学)

在我阅读上面的文章之后,我仍然不确定宏是否只是一个函数或其他任何东西.宏是否等于功能?

例:

    //  Create a Direct3D 9 device.
    hr = direct3D9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dPP, &d3dDevice);

    //  Cout out the message to indicate the failure.
    if(FAILED(hr))
       return 0;
Run Code Online (Sandbox Code Playgroud)

c++ winapi direct3d direct3d9 directx-9

0
推荐指数
1
解决办法
140
查看次数

DirectX 如何确定缠绕顺序?

DirectX 如何确定多边形缠绕顺序?我特别好奇背面剔除。通过研究,我发现 DX 计算表面法线并取其与相机矢量的点积,如果大于 0 则剔除。

首先,这是 DirectX 实际采用的技术吗?其次,如果是这种情况,假设每个表面都有两个法线(一个与另一个相对),DirectX 如何知道使用哪一个法线?

directx 3d direct3d culling

0
推荐指数
1
解决办法
1129
查看次数

CreateTexture2D失败......(d3d)

我正在尝试使用STAGING用法创建D3D纹理2d.

总是,它失败并出现错误:"参数不正确"(代码0x80070057)......

我不明白,我可以创建除了没有问题,但不能成功用这个...请在我的电脑飞过窗户之前帮助我...请...

这是一段有问题的代码:

    int w = 128;
    int h = 128;


    ID3D11Texture2D * tex;
    D3D11_TEXTURE2D_DESC tdesc;
    D3D11_SUBRESOURCE_DATA tbsd;

    ZeroMemory(&tdesc, sizeof(D3D10_TEXTURE2D_DESC));

    WORD *buf = new WORD[128*128];

    for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++)
    {
            buf[i*128 + j] = (WORD) 0xffffffff;
    }

    tbsd.pSysMem = (void *)buf;
    tbsd.SysMemPitch = w * 4;
    tbsd.SysMemSlicePitch = w * h * 4;

    tdesc.Width = w;
    tdesc.Height = h;
    tdesc.MipLevels = 1;
    tdesc.ArraySize = 1; …
Run Code Online (Sandbox Code Playgroud)

c++ windows direct3d

0
推荐指数
1
解决办法
2416
查看次数

Direct3D c ++ api如何更新顶点缓冲区?

那么如何使用IASetVertexBuffers方法更新绑定到设备对象的顶点缓冲区中的值?也将在此缓冲区变化值调用之前Draw()Present()?还会根据缓冲区中的这些新值更新图像吗?

c++ windows graphics direct3d directx-11

0
推荐指数
1
解决办法
3400
查看次数

IntelliSense:标识符“XMFLOAT4”未定义

    #ifndef RENDERER_H
    #define RENDERER_H

    #pragma once

    #include "Font.h"
    #include "Color.h"

    #undef CreateFont

struct Vertex_t {
    XMFLOAT4 xyzrhw;
    D3DCOLOR color;

    enum {
        FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE
    };
};
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时出现此错误:

IntelliSense:标识符“XMFLOAT4”未定义。

我该如何解决?

c c++ directx intellisense direct3d

0
推荐指数
1
解决办法
2116
查看次数

顶点和索引缓冲区如何在 DirectX11 中与顶点、法线和 Texcoord 一起工作

我不明白 DirectX11 如何理解顶点缓冲区中的哪些值是顶点,哪些是法线,哪些是 Texcoords

例如:

以下代码有效,但它将模型绘制为全白色。但法线和顶点绘制正确

std::vector<float> vertex_buffer;
for (int i = 0, j = 0; i < num_vertices; i+=3, j+=2)
{
    vertex_buffer.push_back(attrib.vertices[i + 0]);
    vertex_buffer.push_back(attrib.vertices[i + 1]);
    vertex_buffer.push_back(attrib.vertices[i + 2]);
    vertex_buffer.push_back(attrib.normals[i + 0]);
    vertex_buffer.push_back(attrib.normals[i + 1]);
    vertex_buffer.push_back(attrib.normals[i + 2]);
    vertex_buffer.push_back(0.0F);
    vertex_buffer.push_back(0.0F);
    vertex_buffer.push_back(0.0F);
}

std::vector<UINT> index_buffer;
for (int i = 0, j = 0; i < num_indices; i+=3, j+=2)
{
    index_buffer.push_back(shapes[0].mesh.indices[i + 0].vertex_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 1].vertex_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 2].vertex_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 0].normal_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 1].normal_index);
    index_buffer.push_back(shapes[0].mesh.indices[i + 2].normal_index);
    index_buffer.push_back(0);
    index_buffer.push_back(0); …
Run Code Online (Sandbox Code Playgroud)

c++ windows directx direct3d visual-studio

0
推荐指数
1
解决办法
1308
查看次数

dx12) 编译Shader时间太长

在此输入图像描述

分析时,仅着色器编译就花费了大约 14 秒。(尽管加载所有 obj 文件只花了 7 秒。)

我该如何优化这个?我可以选择预编译 hlsl 着色器吗?

c++ directx direct3d hlsl directx-12

0
推荐指数
1
解决办法
769
查看次数