Articles of directx10

我如何重复一个四边形纹理的一部分?

我想重复纹理的一个选定的部分成一个四边形。 我正在看这个线程 ,但是解决scheme涉及改变我的HLSL。 有没有办法做到这一点,而不改变我的着色器设置? SamplerState SampleType { Filter = MIN_MAG_MIP_LINEAR; AddressU = Wrap; AddressV = Wrap; }; float4 TexturePixelShader(PixelInputType input) : SV_Target { float4 textureColor; // Sample the pixel color from the texture using the sampler at this texture coordinate location. textureColor = shaderTexture.Sample(SampleType, input.tex); return textureColor; } 这是我目前的纹理计算: // Get desired texture coordinates. tLeft […]

重用VertexBuffer或新的VertexBuffer对象?

我现在想在directX10中渲染位图字体,而且我想尽可能高效地完成。 因为这个问题,我很难开始devise我的devise。 那么我应该重用一个VertexBuffer还是制作多个VertexBuffer对象? 目前我在程序中为每个Quad对象分配一个dynamic的VertexBuffer。 如果没有任何东西在我的屏幕上移动,我将不必映射/取消映射VertexBuffer。 对于字体,我可以在每个文本框或类似的地方分配一个缓冲区的地方实现类似的方法。 search后,我读了关于重用所有对象的单个VertexBuffer。 顶点caching也出现了。 这有什么优点/缺点,比我以前的方法快吗? 对于最后,还有其他的方法,我应该看看在屏幕上渲染许多二维四边形? 先谢谢你。

从不同的线程加载纹理

我正在尝试从不同的线程加载纹理,但每次都会失败,如下所示: D3DX10CreateShaderResourceViewFromFile closures我的multithreading例程使纹理加载正确。 如何让设备从不同线程的纹理加载?

SlimDX Direct3D10雪碧延伸窗口大小

我想用SlimDX Direct3D10绘制一个精灵位图,但是我坚持这个问题,我可以在屏幕上看到我的图像,但是根据窗口的大小,它会被拉伸。 这个问题看起来像这样: 我在Direct3D9和Direct2D中得到了相同的绘制精灵的一般想法,因为我只是调整RenderTarget的大小或者用新的BackBuffer重新初始化Device 。 我该如何解决这个问题,使精灵保持独立于窗口大小的相同尺寸? 我看到两个潜在的问题: 我不知道是否和如何设置不同的变换来调整窗口大小(我宁愿调整后台缓冲区大小,只转换用于定位和缩放的精灵) 我想我需要更新backbuffer或者在窗体的resize事件中做一些事情。 这是我的渲染代码: using DiscSim; using SlimDX; using SlimDX.Direct3D10; using SlimDX.DXGI; using System.Windows.Forms; using System.Drawing; using Device = SlimDX.Direct3D10.Device; using Vector2 = SlimDX.Vector2; using Resource = SlimDX.Direct3D10.Resource; namespace DiscSimSlimDX { class Camera_DX10 : Camera { private RenderTargetView renderTarget; private Device device; private SwapChain swapChain; private Sprite sprite; private […]

DirectXCollision.h缺失

我正在使用DirectX10,六月发布,我正在尝试 #include <DirectXCollision.h> 所以我可以使用边界对象,但它似乎并不存在。 我缺less一些基本的东西吗?

LPD3DX10FONT :: DrawTextA / W混淆了深度缓冲区!

为什么调用这个函数搞乱了深度缓冲? 我在某个地方看到它会轻微地改变混合状态,但是说实话,我甚至不知道这意味着什么。 这是怎么回事,为什么这样做,我该怎么办? 这是我的代码…实例化: RECT rct; D3DXCOLOR fontColor = D3DXCOLOR(255,0,0,255); LPD3DX10FONT m_font; LPD3DX10SPRITE m_sprite; 接着… rct.left=200; rct.right=780; rct.top=200; rct.bottom=rct.top+20; D3DX10CreateFont(device, 16, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Verdana", &m_font); D3DX10CreateSprite(device, 256, &m_sprite); 接着… m_sprite->Begin(D3DX10_SPRITE_SAVE_STATE); std::ostringstream oss; oss << "This ruins the depth buffer!!!" << agents[0].State(); std::string test = oss.str(); m_font->DrawTextA(m_sprite, test.c_str(), […]

vector.size()而不是文字types打破我的绘制代码

我正在写一个简单的类来同时绘制我场景中的所有debugging行。 在绘制循环中的代码是这样的:(如果我把例如2,而不是temporary2DVerts.size() ,我用//THIS LINE标记,代码工作正常。)当我运行下面的代码行打破/ / //HERE 。 访问冲突读取位置0x00000000。 似乎创建缓冲区行不工作,但为什么? 什么解决scheme? D3D10_BUFFER_DESC bd; bd.Usage = D3D10_USAGE_DYNAMIC; bd.ByteWidth = sizeof(VERTEX) * temporary2DVerts.size();// THIS LINE bd.BindFlags = D3D10_BIND_VERTEX_BUFFER; bd.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE; bd.MiscFlags = 0; device->CreateBuffer(&bd, NULL, &pBuffer); void* pVoid; pBuffer->Map(D3D10_MAP_WRITE_DISCARD, 0, &pVoid); //HERE memcpy(pVoid, &temporary2DVerts[0], sizeof(temporary2DVerts[0]) * temporary2DVerts.size()); pBuffer->Unmap(); device->IASetInputLayout(screenVertexLayout); device->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_LINELIST); UINT stride = sizeof(VERTEX); UINT offset = […]

渲染问题:深度缓冲+混合:他们如何一起工作?

此图像描述了我遇到的问题: http : //i42.tinypic.com/282kzlf.jpg 你所看到的包括两个图像: 图像A(与外星人概念艺术thingy)深度值.98,图像上的白色部分是alpha值为0.0f 图像B(与玩游戏buttonthingy),深度值.99,一个固体图像没有任何透明度值。 现在,当我第一次设置这个时,我期望图像A通过图像A完全透明的地方让图像B的颜色。 但事实并非如此 问题1:为什么不呢? 问题2:我能做些什么来解决这个问题? 有多种方法可以解决这个问题吗? 问题3:部分透明度问题有所不同吗? 如果是这样,我该如何使它与局部透明度一起工作呢? 谢谢。

呈现全屏渐变或纹理

在Direct3D 10/11中用渐变或纹理填充屏幕背景最简单的方法是什么? 我正在构建一个Windows 8 metro应用程序,在这个应用程序中,相机不会移动,我在D3D中渲染一些内容,但是我需要用纯色来填充背景。 我是否需要弄清矩形的大小和位置,并将其放置在3D空间中,还是可以有一些简单的解决scheme? 我根本不关心深度,因为我所有的内容都被sorting回去,所以我不使用任何深度缓冲区,所以我可以开始绘制到背景。

如何在DX10中使用DXUTCamera创建第三个人物视图?

我正在创建一个3D飞行游戏,并使用DXUTCamera作为我的观点。 我可以让相机承担角色的位置,但是我想在第三人称角色中看到我的角色。 这是我的第一人称视角的代码: //Put the camera on the object. D3DXVECTOR3 viewerPos; D3DXVECTOR3 lookAtThis; D3DXVECTOR3 up ( 5.0f, 1.0f, 0.0f ); D3DXVECTOR3 newUp; D3DXMATRIX matView; //Set the viewer's position to the position of the thing. viewerPos.x = character->x; viewerPos.y = character->y; viewerPos.z = character->z; // Create a new vector for the direction for the viewer to […]