- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 DirectX (10) 开发一个程序以在屏幕上显示。
问题是,它只显示我用来清除后备缓冲区的颜色。
(我为接下来的大量代码道歉)。
这是我的渲染函数:
void DXEngine::renderOneFrame()
{
//First, we clear the back buffer
m_device->ClearRenderTargetView(m_renderTargetView,D3DXCOLOR(0.0f, 0.125f, 0.3f, 1.0f));
//Then, we clear the depth buffer
m_device->ClearDepthStencilView(m_depthStencilView,D3D10_CLEAR_DEPTH,1.0f, 0);
//Update variables
m_worldVariable->SetMatrix((float*)&m_world);
m_viewVariable->SetMatrix((float*)&m_view);
m_projectionVariable->SetMatrix((float*)&m_projection);
//Render the cube
D3D10_TECHNIQUE_DESC techDesc;
m_technique->GetDesc(&techDesc);
for(UINT pass = 0; pass < techDesc.Passes ; pass++){
m_technique->GetPassByIndex(pass)->Apply(0);
m_device->DrawIndexed(36,0,0);
}
m_swapChain->Present(0,0);
}
与“Samples”文件夹下DirectX SDK(2010年6月)中关于DirectX10的第五篇教程一模一样,只是封装在一个对象中。
我的场景初始化如下:
HRESULT DXEngine::initStaticScene()
{
HRESULT hr;
//Vertex buffer creation and initialization
Vertex1Pos1Col vertices [] =
{
{ D3DXVECTOR3( -1.0f, 1.0f, -1.0f ), D3DXVECTOR4( 0.0f, 0.0f, 1.0f, 1.0f ) },
{ D3DXVECTOR3( 1.0f, 1.0f, -1.0f ), D3DXVECTOR4( 0.0f, 1.0f, 0.0f, 1.0f ) },
{ D3DXVECTOR3( 1.0f, 1.0f, 1.0f ), D3DXVECTOR4( 0.0f, 1.0f, 1.0f, 1.0f ) },
{ D3DXVECTOR3( -1.0f, 1.0f, 1.0f ), D3DXVECTOR4( 1.0f, 0.0f, 0.0f, 1.0f ) },
{ D3DXVECTOR3( -1.0f, -1.0f, -1.0f ), D3DXVECTOR4( 1.0f, 0.0f, 1.0f, 1.0f ) },
{ D3DXVECTOR3( 1.0f, -1.0f, -1.0f ), D3DXVECTOR4( 1.0f, 1.0f, 0.0f, 1.0f ) },
{ D3DXVECTOR3( 1.0f, -1.0f, 1.0f ), D3DXVECTOR4( 1.0f, 1.0f, 1.0f, 1.0f ) },
{ D3DXVECTOR3( -1.0f, -1.0f, 1.0f ), D3DXVECTOR4( 0.0f, 0.0f, 0.0f, 1.0f ) },
};
D3D10_BUFFER_DESC desc;
desc.Usage = D3D10_USAGE_DEFAULT;
desc.ByteWidth = sizeof(Vertex1Pos1Col) * 8;
desc.BindFlags = D3D10_BIND_VERTEX_BUFFER;
desc.CPUAccessFlags = 0;
desc.MiscFlags = 0;
D3D10_SUBRESOURCE_DATA data;
data.pSysMem = vertices;
hr = m_device->CreateBuffer(&desc,&data,&m_vertexBuffer);
if(FAILED(hr)){
MessageBox(NULL,TEXT("Vertex buffer creation failed"), TEXT("Error"),MB_OK);
return hr;
}
UINT stride = sizeof(Vertex1Pos1Col);
UINT offset = 0;
m_device->IASetVertexBuffers(0,1,&m_vertexBuffer,&stride,&offset);
//Index buffer creation and initialization
DWORD indices[] =
{
3,1,0,
2,1,3,
0,5,4,
1,5,0,
3,4,7,
0,4,3,
1,6,5,
2,6,1,
2,7,6,
3,7,2,
6,4,5,
7,4,6,
};
desc.Usage = D3D10_USAGE_DEFAULT;
desc.ByteWidth = sizeof(DWORD) * 36;
desc.BindFlags = D3D10_BIND_INDEX_BUFFER;
desc.CPUAccessFlags = 0;
desc.MiscFlags = 0;
data.pSysMem = vertices;
hr = m_device->CreateBuffer(&desc,&data,&m_indexBuffer);
if(FAILED(hr)){
MessageBox(NULL,TEXT("Index buffer creation failed"), TEXT("Error"),MB_OK);
return hr;
}
m_device->IASetIndexBuffer(m_indexBuffer,DXGI_FORMAT_R32_FLOAT,0);
//Set the primitive topology, i.e. how indices should be interpreted (here, as a triangle list)
m_device->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
D3DXMatrixIdentity(&m_world);
D3DXVECTOR3 eye(0.0f, 1.0f, -10.0f);
D3DXVECTOR3 at(0.0f, 1.0f, 0.0f);
D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
D3DXMatrixLookAtLH(&m_view, &eye, &at, &up);
D3DXMatrixPerspectiveFovLH(&m_projection, (float)D3DX_PI * 0.25f, m_width/(FLOAT)m_height, 0.1f, 100.0f);
return hr;
}
再一次,它是与我之前提到的教程完全相同的代码(但经过封装)。
当我在我的 IDE 中打开教程 Visual Studio 解决方案时,它可以正常工作并很好地显示场景中描述的内容,但是当我尝试运行此代码的“封装”版本时,除了背景颜色外什么也没有显示。 ..
注意:我的 Windows 消息泵工作正常,我什至可以按照我想要的方式处理用户输入,一切都很好。我的应用程序正确地执行了我的引擎初始化(我检查了每一个返回的错误代码,除了 S_OK
代码之外没有别的)。
我现在不知道去哪里搜索。我已经多次检查我的代码,它与教程完全一样,我已经检查了我封装的所有内容是否已正确设置和访问,等等,但我仍然无法显示除背景颜色之外的任何内容。 .
我想知道这里是否有人知道可能导致这种情况的原因,或者至少提示在哪里寻找......
编辑:使用的效果文件:
//--------------------------------------------------------------------------------------
// File: Tutorial05.fx
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
// Constant Buffer Variables
//--------------------------------------------------------------------------------------
matrix World;
matrix View;
matrix Projection;
//--------------------------------------------------------------------------------------
struct VS_INPUT
{
float4 Pos : POSITION;
float4 Color : COLOR;
};
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float4 Color : COLOR;
};
//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
PS_INPUT VS( VS_INPUT input )
{
PS_INPUT output = (PS_INPUT)0;
output.Pos = mul( input.Pos, World );
output.Pos = mul( output.Pos, View );
output.Pos = mul( output.Pos, Projection );
output.Color = input.Color;
return output;
}
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PS( PS_INPUT input) : SV_Target
{
return input.Color;
}
//--------------------------------------------------------------------------------------
technique10 Render
{
pass P0
{
SetVertexShader( CompileShader( vs_4_0, VS() ) );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PS() ) );
}
}
最佳答案
我认为,这可能是一个错误:
D3D(10 和 11)管道的输入汇编器阶段始终等待索引缓冲区的 DXGI_FORMAT_***_UINT
格式。 MSDN证明了这一点:
A DXGI_FORMAT that specifies the format of the data in the index buffer. The only formats allowed for index buffer data are 16-bit (DXGI_FORMAT_R16_UINT) and 32-bit (DXGI_FORMAT_R32_UINT) integers.
然后查看将缓冲区绑定(bind)到 IA 的代码:
m_device->IASetIndexBuffer(m_indexBuffer, DXGI_FORMAT_R32_FLOAT, 0);
我认为您应该针对您的情况使用 DXGI_FORMAT_R32_UINT,如下所示:
m_device->IASetIndexBuffer(m_indexBuffer, DXGI_FORMAT_R32_UINT, 0);
关于c++ - DirectX : Nothing is drawn on screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15368645/
我正在为 wordpress 制作一个菜单,我正在尝试获得一个“画出”像边框一样围绕着不同的菜单项。 至于现在,我有一个带有“绘制”圆圈的背景。 (我们称之为 bg.png)。 我可以得到一个菜单项周
我正在关注 this guide我正在尝试在屏幕上绘制一个四边形。我还看到了源代码,它是一样的,应该可以工作,但在我的例子中,屏幕上没有显示任何内容。我将 OpenGL 2.0 与顶点着色器一起使用,
我正在尝试使用 DirectX (10) 开发一个程序以在屏幕上显示。 问题是,它只显示我用来清除后备缓冲区的颜色。 (我为接下来的大量代码道歉)。 这是我的渲染函数: void DXEngine::
我遇到了一个奇怪的错误,即 tableViewCell 页脚在启动时未正确绘制。但是一旦细胞被回收,它们就会按预期出现。这是一个屏幕录像(注意回收后顶部单元格页脚的显示方式):https://www.
将Mathematica中的手绘对象与以编程方式生成的对象分开的最简单/最方便的方法是什么? 交互式绘图工具既方便又有用。但是,如果我在图的顶部绘制一些东西,则一旦重新生成图,它将丢失。有一个方便的解
我有一个所有者绘制的 TListBox (lbVirtualOwnerDraw),其内容会动态更新(每秒最多可以有 10 次更新)。列表框中一次最多可以包含 300 个项目。每个项目可能有大约 5 行
我正在使用以下代码段使用 SVG 绘制圆弧: https://jsfiddle.net/e6dx9oza/293/ 在调用describeArc方法计算路径时,会动态传入圆弧的起点和终点 Angula
请观看显示共享元素 Activity 转换的视频。这是从列表 Activity 到详细信息 Activity 的过渡。 [视频链接失效] 如您所见, ImageView 绘制在选项卡的前面。 我期望的
我有一个 wx.ScrolledWindow,它是使用 cairo 绘制的。我已经实现了缩放功能,现在可以重新绘制整个内容。但由于要绘制多达 200 条曲线,我应该考虑一个性能更高的解决方案。 我想到
我正在尝试旋转 Sprite ,同时保持相同的位置。 我将如何连续旋转 Canvas 上绘制的图像? 例如,我的假设是每 300 毫秒使用 setInterval 调用一个函数,但我不知道如何在 Ca
我正在尝试按照此处的示例以相同颜色绘制所有轮廓线:http://gnuplot.sourceforge.net/demo/contours.25.gnu 但是,该示例有效,但我自己的代码不起作用: s
我想要实现的是混合,我在彼此之上绘制两个四边形,都是透明的,最后绘制的四边形将完全取消前一个四边形的颜色,就好像它从未存在过一样。然而,除了那个其他四边形之外,它可能不会影响其后面的任何东西。因为我不
我尝试使用 Opencv4Android 2.4.6 在 Android 中进行快速角点检测。检测到关键点,但 View 未显示绘制的关键点,或 Features2d.drawKeypoints 不工
所以我正在做 Java 入门类(class)的项目,似乎我选择了一些超出我能力范围的东西。 :P 任何帮助将不胜感激。这就是我遇到的问题: You have a cursor that is cont
根据我的正常 Activity 经验,我的印象是 onResume()函数,您可以对 View 执行操作,并且它们已经呈现到屏幕上。 但是,我现在将一些代码转换为 Fragment在onResume(
我有一个顶点为 (0,0)、(100,0)、(100,100) 和 (0,100) 的多边形。我调试了程序,这些正是 java 正在绘制的线条。有些线条太长一个像素,而不是绘制一个精确的正方形: ht
我对 iPhone 开发非常陌生。 我使用 XCode 4 中的 Interface Builder 绘制了一个 View 。目前,里面唯一的东西是一个标签(取自 Interface Builder
我试图在其中一个表格单元格内绘制 svg 图像,但它根本不起作用。我看到了 div 但没有 svg 图像。如果我从 html 代码 () 创建 div 但从 javascript 中创建它不起作用..
我在 HighCharts 上遇到问题。 我必须使用 ajax 从 xml 内容中收集数据,以便将其绘制在 HighCharts 图表中。 我得到了我的数据。当我将鼠标移到它上面时,我可以看到我的点,
我正在使用自定义 ListView 选择器。一切正常,除了 state_focused 和 state_pressed 的可绘制对象绘制得比正常状态大。 我使用的是 ShapeDrawables,而不
我是一名优秀的程序员,十分优秀!