Articles of directx

为什么一个模型可以有不同的顶点和正常大小?

我正在使用TinyObj来加载模型。 我发现许多obj文件有不同的顶点和正常大小,怎么会发生? 我认为在obj文件中一个正常应该对应一个顶点。 例如,我正在加载一个苹果模型,顶点大小为6492,正常大小为6557.如何处理这种情况? 有些文件有更多的顶点,有些有更多的法线。 这是否意味着我必须放弃模型的某些属性? 我也发现obj文件有正常的索引,但我不知道如何使用它。 这个问题是否重要? 在opengl / directx我只使用索引缓冲区中的顶点索引。 你能给我一些想法或参考吗?

用于DirectX 11的.obj文件阅读器

这是一个星期,我仍然无法解决这个问题。 我需要将.obj文件转换为我的框架可读和可绘制的数据。 我有一个主要问题:指标。 我想我得到的顶点正确(我在debugging器中检查,一切都很好),但是当我画我的模型总是出错。 我看到模型的形状,但没有看到一些三角形。 我认为这是一个顺时针/逆时针绘图的问题。 我从搅拌机中导出了一个立方体,看看如何完成,我拿着笔和纸,手工绘制,然后按照程序为我创建的索引,我看到它使用不同的索引顺序,在我的程序中不起作用。 对于i立方体,我使用“f”字所描述的索引创建36个顶点。 每个顶点都有纹理坐标和法向量。 从指数我拿顶点索引,我用这些来绘制立方体,但它不工作。 我跟着这个教程进入到我应该如何脚本的转换器( http://www.opengl-tutorial.org/beginners-tutorials/tutorial-7-model-loading/ ),我修改了代码,使其工作的DirectX绘图(这是类似于我认为的OpenGL),但它根本不工作。 void OBJLoader::loadOBJFromFile(char * fileName, std::vector<Vertex::Basic32> &output, std::vector<UINT> &vertexIndicesFinal) { UINT numberOfVertices = 0, numberOfNormals = 0, numberOfUVs = 0, numberOfFaces=0; std::vector<Vertex::Basic32> outputDaMettere; std::vector< UINT> vertexIndices, uvIndices, normalIndices; std::vector< XMFLOAT3 > temp_vertices; std::vector< XMFLOAT2 > temp_uvs; std::vector< XMFLOAT3 > temp_normals; std::vector<XMFLOAT3> outVertices; std::vector<XMFLOAT3> […]

移动物体时的阴影闪烁

使用阴影映射技术时,我的场景中闪烁着阴影。 我知道互联网上有很多处理这个问题的post,但是我的问题稍有不同。 我知道问题来自移动摄像机时的子纹理问题,但是我的场景使用了与摄像机不同的技术,光源稳定,场景内的对象正在移动相对眼睛概念(RTE)。 问题是在实现DirectX示例中所述的级联阴影映射和方差阴影映射时,除阴影闪烁(闪烁)之外,一切进展顺利。 闪烁是来自移动的物体,而不是相机。 所以当我尝试用相机移动来调整子纹理问题的时候,这个问题并不能解决问题,因为相机是稳定的,而物体却不是。

如何沿Y轴移动目标摄像机

我有一个相机在鼠标移动的目标点周围旋转。 如何将相机的位置向上/向下移动到目标位置? 所以当摄像机向上移动时,物体会向下和相反。 我试图改变目标vectory,相机位置vectory但它没有真正的工作: void Camera::move(float dir) { m_target.y += dir; } 和 void Camera::move(float dir) { m_pos.y += dir; } 我必须承认,我不擅长线性代数,很可能这就是我不理解它的原因。 我试图谷歌它,但所有的结果是关于向前/向后的相机移动,就像改变m_radius类成员一样容易。 我的相机的位置是通过半径,theta和phi角度来描述的(我猜测它是所谓的球形坐标)。 这是我如何设置位置m_pos ,然后调用XMMatrixLookAtLH setPosition(m_target.x + m_radius * cosf(m_theta) * cosf(m_phi), m_target.y + m_radius * sinf(m_theta), m_target.z + m_radius * cosf(m_theta) * sinf(m_phi)); setLookAt(XMLoadFloat3(&m_pos), XMVectorZero(), XMLoadFloat3(&m_up)); 目标始终设置为原点(0,0,0),因为我的所有模型数据都与原点相关。 我将目标位置效果添加到了setPosition()方法中,以防万一我需要改变它。

全屏+ Vsync =口吃

在我对游戏引擎中的一个口吃问题的研究中,我想我已经发现了这个问题,但是不知道为什么会这样,所以我问你是否有一个想法。 情况:DirectX10下win7简单引擎。 如果以全屏模式运行(只在全屏模式下运行),使用Vsync On和渲染循环的速度要比vsync ==> Stutter(驱动程序丢弃的帧)快得多。 我的基础解决scheme在这一刻:打电话给device.present()不比Vsync快! 我的问题: – 这里发生了什么? 看起来被调用的.present()是“caching”的帧,如果caching满了,就可以扔掉一帧==>它会造成口吃! – 为什么在完全相同的情况下(后台缓冲区分辨率,场景…)没有发生窗口模式? 编辑:这里是一个Pixdebugging屏幕(大图),显示口吃: http : //www.s33m3.be/PIX/PIX3.png您可以看到框架912,做了完全相同的工作量与其他框架,没有被GPU处理。 (无GPU启动/持续时间)。 debugging之后,对于这个帧来说,对.Present()的调用非常低(比其他帧的平均值.Present()快了10倍! 那么我怎么能在DirectX10中禁用这个“function”来丢弃帧呢? 我宁愿使用Present方法而不是放下框架!

如何根据directx9或slimdxDirect3d9中的精灵大小调整图像纹理?

我想知道是否有任何方法将我们的纹理调整到slimdx direct3d9或directx9中的精灵大小。 这就是说,如果我的图像大小是1024×768,精灵大小是500×500,那么我怎样才能在slimdx中调整图像的大小,以便在精灵上完全显示它,而不需要任何裁剪。

每一帧都要调用ID3D10Device :: RSSetState?

我正尝试用direct3D10创建一个ID3D10RasterizerState,然后调用 ID3D10Device :: RSSetState()与正确的信息。 但是,无论何时窗口被重新缩放,或者应用程序全屏时,rasterizerstate都会重置为默认状态。 我试图设置WM_SIZE消息的状态,但笨拙,似乎没有发生… 当我每一帧调用RSSetState()时,它都能正常工作,但是效率很低。 有谁知道这个解决scheme? 在msdn上似乎很lesslogging。 码: bool TestGameApp::InitGame() { D3D10_RASTERIZER_DESC desc; desc.AntialiasedLineEnable = TRUE; desc.CullMode = D3D10_CULL_NONE; desc.DepthBias = 0; desc.DepthBiasClamp = 0.0f; desc.FillMode = D3D10_FILL_SOLID; desc.FrontCounterClockwise = false; desc.MultisampleEnable = true; desc.ScissorEnable = FALSE; desc.SlopeScaledDepthBias = 0.0f; m_pD3DDevice->CreateRasterizerState(&desc,m_pRSState); m_pD3DDevice->RSSetState(m_pRSState); //…more code } WndProc中: switch( message ) { case WM_SIZE: { […]

DirectX中的SetTextureStage(0,D3DTSS_COLORARG2,0)是什么意思?

我试图将一些DirectX代码转换为Ogre3D,并想知道以下内容转换为: pDev->SetTextureStage(0, D3DTSS_TEXCOORDINDEX, 0) pDev->SetTextureStage(0, D3DTSS_COLORARG1, D3DTA_TEXTURE) pDev->SetTextureStage(0, D3DTSS_COLOROP, D3DTOP_MODULATE) pDev->SetTextureStage(0, D3DTSS_COLORARG2, 0) 这里发生的调制操作是什么? 纹理是否被背景调制? 还是它被归零? 我试过寻找这意味着什么,不幸的是我没有遇到任何有意义的事情。 任何帮助阐明这个问题将不胜感激。

为什么我不能创建direct3d对象?

我一直在使用VBScript,JavaScript和C#等语言进行专业编程。 作为一个爱好,我正在进入一些使用DirectX的c / c ++和游戏编程。 我遇到了无法创建direct3d对象的问题。 我正在使用Visual C ++ 2010 Express。 安装vc ++ 2010express后,我安装了2010年6月发布的DirectX。 我试图通过#pragma语句包含DirectX。 这是我到目前为止在我的winmain.cpp源文件中的代码: #include <Windows.h> #include <d3d11.h> #include <time.h> #include <iostream> using namespace std; #pragma comment(lib, "d3d11.lib") #pragma comment(lib, "d3dx11.lib") // program settings const string AppTitle = "Direct3D in a Window"; const int ScreenWidth = 1024; const int ScreenHeight = 768; // […]

如何用C ++创建模块化/可replace的游戏/引擎代码接口?

我已经花了一些时间,可以用c ++进行试验,同时学习一些关于游戏编程的知识。 我最喜欢的方式是从创建一个简单的游戏引擎开始,但是在创建游戏的时候有一些实验和大量的建议,而不是引擎,我忘记了引擎,只是尝试构建一个游戏。 在这样做的过程中,我只需要在渲染代码(ogre3d)和物理(项目符号)和input/输出(OIS)的基础上进行攻击,并且在基本游戏思想的实验上加载一个地图,走动它。 我知道没有什么特别的,但这对我来说是成就。 从现在开始,我想了解更多有关创建可重复使用的代码的详细信息,而不仅仅是一个游戏。 我相信这些技能可以转化为更多的游戏。 基本上我想从一切交织到能够分离和replace个别部分。 例如,在OpenGL中构建一个3d渲染器dll /,在DirectX中构建另一个(作为dll)。 或者其他方面如物理,声音,input,networking等。 我正在学习Linux上的一般dll编程和共享库,但希望了解更多有关游戏特定接口的信息。 我也知道,我以前提到的Ogre3d已经跨平台,并能够同时opengl和direct-x …我不是说我想要更换一个这样的库,更使它能够被拔掉,有东西否则插入。 所以你知道。 我的编程经验已经C了一些更近的​​C + +。 最近我一直在用PHP和C#.NET(主要是PHP)进行Web开发。 我也有与C#,Python,Perl等平均经验。我是一个所有行业的杰克,我拿起东西很快。 我所希望的不是用勺子代码,而是一些研究概念的好地方(虽然如果你提供的话,我不会拒绝代码);)