可能重复:
OpenGL还是DirectX?
不想引发战争,但真的想知道那两个主流图形库的利弊吗?
我有三个.cpp文件,名为MeshLoader.cpp,DynamicXMesh.cpp和StaticXMesh.cpp
我在MeshLoader.cpp文件中有一个名为FindTexturePath的函数,我想在DynamicXMesh.cpp和StaticXMesh.cpp文件中调用它.
我已经包括MeshLoader.cpp(#包括"MeshLoader.cpp")在启动文件XMesh文件,当然得到,说功能已经定义的错误...
我也尝试使用pragma和ifndef ...:
//This is "MeshLoader.cpp"
pragma once
#ifndef MLOAD
#define MLOAD
  char* FindTexturePath( char* TexturePath ,LPSTR FileNameToCombine){
      ...
      ...
      ...
  }
#endif
/////
//This is StaticXMesh.cpp
#include "MeshLoader.cpp"
...
...
...
this->StatXMeshTexturePath = FindTexturePath(StatXMeshTexturePath,d3dxMaterials[i].pTextureFilename);
...
...
/////同样调用DynamicXMesh.cpp
我希望我能够清楚地解释自己......谢谢你给我的时间......
我试图做一个DirectX教程,但我想用C编写应用程序,而不是用C++编写.所以我用C编写代码,但是当我尝试编译它时,我在"setupD3D"函数中遇到了很多错误.所以我只是将文件重命名为.cpp.但新代码也没有编译.我认为结合C和C++是个问题,或者有许多交叉引用.谁能告诉我这段代码中的问题是什么?
direct3d.h:
#include "main.h"
#ifndef DIRECT3D
#define DIRECT3D
int m_videoCardMemory;
char m_videoCardDescription[128];
ID3D11DeviceContext* m_deviceContext = 0;
D3DXMATRIX m_projectionMatrix;
D3DXMATRIX m_worldMatrix;
D3DXMATRIX m_orthoMatrix;
int setupD3D(BYTE vsync, HWND hwnd, float screenDepth, float screenNear);
void terminateD3D();
void beginScene(float red, float green, float blue, float alpha);
void endScene();
#endif
direct3d.cpp
#include "direct3d.h"
// code
main.h:
#ifndef MAIN_FUNC
#define MAIN_FUNC
#pragma comment(lib, "dxgi.lib")
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "d3dx11.lib")
#pragma comment(lib, "d3dx10.lib")
#include <Windows.h>
#include <dxgi.h>
#include <d3dcommon.h>
#include <d3d11.h>
#include <d3dx10math.h>
#include "direct3d.h"
int …我正在尝试在HLSL文件中定义一个简单的SamplerState以用于纹理.编译着色器时,出现错误:
error X3004: undeclared identifier 'Filter'
资源:
// part of render.hlsl
SamplerState linear_sample=
{
    Filter=MIN_MAG_MIP_LINEAR;
    AddressU = Wrap;
    AddressV = Wrap;
};
汇编:
hr=D3DX10CreateEffectFromFile("render.hlsl",NULL,NULL,"fx_4_0",D3D10_SHADER_ENABLE_STRICTNESS | D3D10_SHADER_DEBUG,0,dx_device,NULL,NULL,&dx_effect,&dx_err,NULL);'
我已经在MSDN上查看了,我的HLSL文件似乎没有任何问题.我编译不正确吗?
我遇到了GetCursorPos的问题.我用directx画一个光标所在的方块,但我的代码不起作用,我不明白为什么......
LPPOINT cursorPos = 0;
GetCursorPos(cursorPos);
square->setPosition(D3DXVECTOR2(40.0f,60.0f));  // as a test: works fine...
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
我也试过这个:
LPPOINT cursorPos = 0;
GetCursorPos(cursorPos);
float posX = cursorPos->x;  // no crash...
float posY = cursorPos->y;  // no crash...
std::cout << posX << posY <<std::endl; // CRASH!
我究竟做错了什么??
我正在尝试编写一个模板方法来为Direct3D创建着色器.用于创建每种类型着色器的API函数以及着色器的类型具有不同的名称.所以,我写了以下代码:
class Shader final
{
public:
    explicit Shader( _In_ ID3DBlob *const pBlob );
    template <class T>
    void Create
        ( std::weak_ptr<ID3D11Device>& pDevice
        , CComPtr<T>& pResource )
    {
        auto p_Device = pDevice.lock();
        if ( mp_Blob && p_Device )
        {
            HRESULT hr = E_FAIL;
            ID3D11ClassLinkage* pClassLinkage = nullptr; // unsupported for now
            pResource.Release();
            CComPtr<ID3D11DeviceChild> pRes;
            if ( std::is_same<T, ID3D11VertexShader>() )
            {
                hr = p_Device->CreateVertexShader
                    ( mp_Blob->GetBufferPointer()
                    , mp_Blob->GetBufferSize()
                    , pClassLinkage
                    , reinterpret_cast<ID3D11VertexShader**>( &pRes ) );
            }
            else if ( std::is_same<T, ID3D11HullShader>() )
            { …我正在阅读Frank D. Luna的DirectX 11 3D游戏编程简介,似乎无法理解我们为什么要在Pixel Shader中实现照明?如果你能给我发一些关于这个主题的参考页面,我将不胜感激.
谢谢.
换句话说,是否有任何GPU不支持OpenGL,而是支持其他图形渲染库,如DirectX,OpenCl.
所以我最近选择了图形编程,我想计算一个立方Bézier曲线.我在二次Bézier上找到了这个优秀的答案,但我不知道如何将其转换为立方Bézier曲线.
我有2个具有相同原点的矢量,我只想旋转一个以匹配另一个.但是,我无法找到数学能够计算两者之间的x角度,y角度和z角度(世界坐标).它也可以在局部坐标中获得这个角度,我不知道它是否有帮助但是前向矢量(局部Y)周围的旋转可以是任何无关紧要的.我只需要我的对象面向正确的方向.
我该怎么办?