gpt4 book ai didi

c++ - DirectX 问题

转载 作者:行者123 更新时间:2023-11-30 04:35:10 25 4
gpt4 key购买 nike

我有几个关于使用 C++ 在 DirectX 中编程的问题。

我遇到的第一个问题是我的纹理无法在屏幕上正确显示。窗口创建时设置为800x600,纹理也是800x600,但加载程序时,只显示部分纹理。纹理加载和绘制的代码如下所示。

//This sets the image
helpFileTexture = new Texture(d3dDevice, L"../Resources/Help Guide.png");

//This is the draw function
helpFileTexture->Draw(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);

//Which calls this
void Texture::Draw(long xPos, long yPos, long width, long height)
{
sprite->Begin(NULL);
RECT imageRectangle;
imageRectangle.left = xPos;
imageRectangle.top = yPos;
imageRectangle.right = imageRectangle.left + width;
imageRectangle.bottom = imageRectangle.top + height;

sprite->Draw(texture, &imageRectangle, &D3DXVECTOR3(1.0f, 1.0f, 0.0f), &D3DXVECTOR3((float)xPos, (float)yPos, 0.0f), D3DCOLOR_XRGB(255, 255, 255));
sprite->End();
}

正如我所说,SCREEN_WIDTH 设置为 800,SCREEN_HEIGHT 设置为 600(这也与图像的尺寸相同)。它应该从左上角开始绘制,但只会显示部分图像。当可以看到整个图像时,窗口大小设置为大约 1100x1100。我在设置图像大小的编码中做错了什么吗?

接下来是我在隐藏光标时遇到了问题。我想在单击鼠标左键时隐藏光标,然后在松开时让它重新出现。但是光标并没有消失。其编码如下。

if(input->mouseButtons.rgbButtons[0])
{
d3dDevice->ShowCursor(FALSE);
GetCursorPos(&input->mousePosition);
SetCursorPos(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2);
input->mousePosition.x -= SCREEN_WIDTH / 2;
mainCamera->UpdateYaw(input->mousePosition.x * rotationSpeed);
indexYaw += mainCamera->GetYaw();
D3DXMatrixRotationY(&viewMatrix, indexYaw);
d3dDevice->SetTransform(D3DTS_VIEW, &viewMatrix);
}
else
{
d3dDevice->ShowCursor(TRUE);
}

如您所见,当单击鼠标左键以控制相机时,光标应该会消失,但它仍然显示。

最后两点是在对象和地形跟踪之间实现碰撞检测的最佳方法是什么,或者您能否将我链接到找到这些的好地方。

我知道我已经问了很多,但任何帮助都会很棒

最佳答案

您实现的修复不正确(缩放修复)。大小问题的原因是当使用 D3DXLoadTextureFromFile 方法加载纹理时,DirectX 将图像的大小更改为比实际大小最近的 2 的幂。这就是它看起来比屏幕大的原因。

因此,为了防止它这样做,您应该使用 D3DXLoadTextureFromFileEx 方法,并为参数 3 和 4 指定 D3DX_DEFAULT_NONPOW2。这将阻止 DirectX 放大纹理的大小。有关该方法的更多信息,请参阅 MSDN 页面:http://msdn.microsoft.com/en-us/library/bb172802(v=vs.85).aspx

注意:一定要使用 D3DPOOL_MANAGED 作为 D3DPOOL 选项,否则如果您使用 D3DPOOL_DEFAULT,您的模型将变得透明! (据我所知)。

关于c++ - DirectX 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5566040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com