我对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) 此代码出现在由默认的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)
什么是深度模板视图?
我有一个"3D引擎",它有一个模型矩阵.我的所有3D对象都使用此模型矩阵(用于转换内容).对于每个对象,我在使用之前设置模型标识.到目前为止,它似乎工作得很好,并且如预期的那样好.
但现在我突然想知道我是否有设计缺陷.每个3D对象(基础对象)应该有自己的模型矩阵吗?这样做是否有任何价值(每个3D对象的模型矩阵)?
我有个问题。我想记录我的工具开发,所以我想让窗口名称带有日期和时间数据,而不是在屏幕截图顶部使用 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) 很多人都注意到MSAA不适用于延迟着色.这是为什么?这听起来还不错.
根据维基百科:
...由于将照明阶段与几何阶段分开,硬件抗锯齿不再产生正确的结果,因为插值子样本将导致无意义的位置,法线和切线属性.
你能解释一下吗?
我有哪些其他AA替代品?
所以,我正在将一些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) 在我阅读上面的文章之后,我仍然不确定宏是否只是一个函数或其他任何东西.宏是否等于功能?
例:
// 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) DirectX 如何确定多边形缠绕顺序?我特别好奇背面剔除。通过研究,我发现 DX 计算表面法线并取其与相机矢量的点积,如果大于 0 则剔除。
首先,这是 DirectX 实际采用的技术吗?其次,如果是这种情况,假设每个表面都有两个法线(一个与另一个相对),DirectX 如何知道使用哪一个法线?
我正在尝试使用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) 那么如何使用IASetVertexBuffers
方法更新绑定到设备对象的顶点缓冲区中的值?也将在此缓冲区变化值调用之前Draw()
和Present()
?还会根据缓冲区中的这些新值更新图像吗?
#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”未定义。
我该如何解决?
我不明白 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) direct3d ×13
c++ ×9
directx ×5
windows ×3
3d ×2
graphics ×2
opengl ×2
winapi ×2
c ×1
c# ×1
culling ×1
direct3d9 ×1
directx-11 ×1
directx-12 ×1
directx-9 ×1
hlsl ×1
intellisense ×1
javascript ×1
quaternions ×1
scalar ×1
webgl ×1