我有一个 C++ 函数,它将 LPSTR 类型变量拆分为一个字符数组 (char*) 示例:
this->XMeshTexturePath = FindTexturePath(XMeshTexturePath,d3dxMaterials[i].pTextureFilename);
//the value of XMeshTexturePath is: Models\\Textures\\
//the value of d3dxMaterials[i].pTextureFilename is: BlaBlaBla\\BlaBla\\Cyrex.x
//The Result(XMeshTexturePath) should be like this:"Models\\Textures\\Cyrex.x"
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试编写的功能:
int FindTextLength(char* Text){
int length
Run Code Online (Sandbox Code Playgroud)
h=0; for(int i=0;i
char* FindTexturePath( char* TexturePath ,LPSTR FileNameToCombine){
int FileLength=0;
int PathAndFileLength=0;
char *FileName = new char;
char *TexPathAndName = new char;
strcpy(TexPathAndName, FileNameToCombine);
PathAndFileLength = FindTextLength(TexPathAndName);
for(int i=0; i<PathAndFileLength; i++){
if( TexPathAndName[i] != NULL){
if(TexPathAndName[i] != '\\'){
FileName[FileLength] = TexPathAndName[i];
FileLength++;
}
else
FileLength …Run Code Online (Sandbox Code Playgroud) 我正在查看Xna Framework Game类的源代码,特别是它如何进行Draw调用,我可以在GraphicsDeviceManager.EndDraw()中看到对GraphicsDevice.Present()的调用,但我找不到对GraphicsDevice.BeginScene的调用()或GraphicsDevice.EndScene(),甚至不在GraphicsDevice类本身.任何人都知道他们如何处理这种情况
我想知道是否有办法生成3D对象的单个静态图像(1个单个对象表示为三角形列表),使用OpenGL或DirectX,可以让您知道定义对象的特定三角形已被使用生成形成渲染图像的每个像素.我引用了OpenGL和DirectX,因为它们是广泛使用的API图形,如果有人知道实现以前高速工作的其他方法我也会对他/她的答案感兴趣.我目前使用我自己的渲染管道软件实现来跟踪关系,但我想使用图形卡提供的功能和效果(主要是抗锯齿,阴影和特定的皮肤渲染技术).
非常感谢您的帮助
我正在使用XNA(使用DirectX)进行一些图形编程.我有一个围绕一个点旋转的盒子,但旋转有点奇怪.
一切似乎有人拿了一个指南针并旋转180度,所以N是180,W是90等.
我似乎找不到一个说明方向的来源,所以我可能只是没有使用正确的关键字.
有人可以帮我找到XNA/DirectX的定位,以及一个说明这一点的页面吗?
我正在保存我的驱动X/Y坐标,然后使用将坐标转换为米的函数,并为每个点添加1280(因此它很适合2560x2560图像),然后在'点'之间绘制一个多边形,导致某种赛车线.但是,一旦我生成多边形并将其保存为图像,它就会以某种方式垂直翻转.垂直翻转图像将使其与轨道位图完美匹配.有人告诉我这是因为DirectX内部有Y轴翻转.为什么DirectX使用翻转的Y轴?
我想在游戏中做一些鱼眼剔除.因此,对于列出的每个对象,我想检查是否在相机的截头.我是这样做的:
D3DXVECTOR3 cameraPos;
D3DXVECTOR3 pos;
D3DXVECTOR3 cameraVector;//where camera is looking( camera->eye() - camera->pos() )
D3DXVECTOR3 direction = pos - cameraPos;
normalize( &direction );
normalize( &cameraVector );
float dot = cameraVector.x * direction.x + cameraVector.y * direction.y + cameraVector.z * direction.z;
//float cosvalue = cos( dot ); // i was calculatin cos of cos :)
float cosvalue = dot;
float angle = acos (cosvalue) * 180.0f / PI;
if( angle < 45.0f ) draw();
Run Code Online (Sandbox Code Playgroud)
但我得到了奇怪的结果.例如(角度<50.0f)到处都画,但没有我想要的地方,所以鱼眼是空的.!(角度<50.0f)绘制我想要的东西.但是(角度<40)没有任何吸引力:(如果是我的角度计算或者浮动问题,我不是舒尔:(任何人?
我试图通过使用if(caps.VertexShaderVersion < D3DVS_VERSION(i, 0)){return false;}我想要检查的着色器模型来检测我的图形卡在C++中具有的最高着色器模型是什么,但我只能达到3.
问题是我已经检查了我的显卡(Gigabyte GeForce GTX 470)并且它有DirectX 11所以不应该有Shader Model 5吗?或者我正在检查Shader模型的方式有问题吗?
假设我有三角网格,那么我在三角形之间有很多重复的位置,在这种情况下索引缓冲区可能变得非常方便.
但是如果我也需要法线,那么就没有增益,因为所有三角形都有不同的法线.所以元组{position,normal}是唯一的.如果添加纹理坐标和其他功能,那么我不明白为什么需要索引缓冲区?
我在遵循DirectX上的rastertek教程的同时,还研究了David Abrahams(http://www.boost.org/community/exception_safety.html)的“ 通用组件中的异常安全性” 。
为什么(据所有人所知)在rastertek教程中以这种方式设置了异常处理,并且提供了什么级别的保护?
例如:
mhresult = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, &mfeatureLevel, 1,
D3D11_SDK_VERSION, &mswapChainDesc, &mswapChain, &mdevice, NULL, &mdeviceContext);
if (FAILED(mhresult))
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果在对CreateDevice的调用中发生未处理的异常,在我们检查mhresult的结果之前程序不会崩溃吗?
是调用带有HResult返回值的方法,还是仅返回布尔值,这是否有所不同?
result = mEstablishHW();
if (!result)
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
是否有其他方法可以提供强大的异常安全性而又不影响性能?
我正在使用DirectX 11处理卷渲染程序.
我渲染到窗口(HWND)和纹理(ID3D11Texture2D).
虽然HWND总是看起来正确的渲染,但ID3D11Texture2D对于小于64x64的渲染大小,我看起来很糟糕:

我想知道DirectX 11中是否存在纹理的最小大小限制.
不幸的是,我只能找到有关最大纹理大小限制的信息.
directx ×10
c++ ×4
opengl ×2
xna ×2
3d ×1
directx-11 ×1
directx-9 ×1
geometry ×1
index-buffer ×1
orientation ×1
render ×1
rotation ×1
shader ×1
vector ×1
visual-c++ ×1