Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ D3D9创建圆_C++_Geometry_Directx 9_Vertex Array_Drawing2d - Fatal编程技术网

C++ D3D9创建圆

C++ D3D9创建圆,c++,geometry,directx-9,vertex-array,drawing2d,C++,Geometry,Directx 9,Vertex Array,Drawing2d,早些时候,我发布了一个不同的问题,该问题给了我一个使用D3DPT_TRIANGLEFAN的bug,但我试图以不同的方式重新编码我的圆。唯一的问题是它不会吸引到屏幕上。。。我试过调试它,但一切似乎都很完美,这很奇怪。 这是我的整个“圆圈”课程(这是一个更大的项目——乒乓球游戏的一部分) 类循环:公共物理对象 { 公众: 圆(浮动x、浮动y、浮动r、D3D颜色列){ xVel=3; yVel=3; xLB=0.0; xRB=800; yUB=600; yLB=0; 这个->r=r; 这个->x=x;

早些时候,我发布了一个不同的问题,该问题给了我一个使用D3DPT_TRIANGLEFAN的bug,但我试图以不同的方式重新编码我的圆。唯一的问题是它不会吸引到屏幕上。。。我试过调试它,但一切似乎都很完美,这很奇怪。 这是我的整个“圆圈”课程(这是一个更大的项目——乒乓球游戏的一部分)

类循环:公共物理对象
{
公众:
圆(浮动x、浮动y、浮动r、D3D颜色列){
xVel=3;
yVel=3;
xLB=0.0;
xRB=800;
yUB=600;
yLB=0;
这个->r=r;
这个->x=x;
这->y=y;
用于(浮动i=0.0f;ileft)
{
如果(x-r+xVelx+20和&y+yVel>patles[i]>y和&y+yVely+80){
xVel*=-1;
}
}否则{
如果(x+r+xVel>桨[i]->x&&y+yVel>桨[i]->y&&y+yVel<桨[i]->y+80){
xVel*=-1;
}
}
}
如果(x+r+10+xVel>xRB | x-r+xVelyUB | | y-r+yVelx+=x;
这->y+=y;
对于(int i=0;i<360;++i)
{
点[i].x+=x;
点[i].y+=y;
}
}
}
void render()
{
更新();
d3ddev->SetTexture(0,0);
d3ddev->SetFVF((D3DFVF_XYZRHW | D3DFVF_DIFFUSE));
d3ddev->SetRenderState(D3DRS_照明,错误);
d3ddev->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
d3ddev->SetRenderState(D3DRS_字母可转换,真);
d3ddev->SetRenderState(D3DRS\u destlend,D3DBLEND\u INVSRCALPHA);
d3ddev->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
d3ddev->SetRenderState(D3DRS_FOGENABLE,false);
d3ddev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,360,&points,sizeof(360));
}
顶点[360];
私人:
浮子r;
};

提前感谢您的帮助!

一个明显的问题是第一个顶点应该是圆的中心。另外,请尝试
设置渲染状态(D3DRS\u CULLMODE,D3DCULL\u NONE)
以防您的缠绕顺序错误。这是唯一明显的问题吗?对不起,我现在对d3d9有点陌生。
    class Circle: public physicsObject
{
public:
    Circle(float x, float y, float r, D3DCOLOR col){
        xVel=3;
        yVel=3;
        xLB=0.0;
        xRB=800;
        yUB=600;
        yLB=0;
        this->r=r;
        this->x=x;
        this->y=y;
        for(float i = 0.0f; i<360.0f; i += 1.0f)
        {
            float angle = i;
            points[(int)i].x = x + (sinD(angle) * r);
            points[(int)i].y = y + (cosD(angle) * r);
            points[(int)i].z = 0;
            points[(int)i].Color = col;
        }
    }
    void update()
    {
        for(int i = 0; i < paddles.size(); ++i)
        {
            if(paddles[i]->left)
            {
                if(x - r + xVel < paddles[i]->x + 20 && y+yVel > paddles[i]->y && y+yVel< paddles[i]->y+80){
                    xVel *= -1;
                }
            }else{
                if(x + r + xVel > paddles[i]->x && y+yVel > paddles[i]->y && y+yVel< paddles[i]->y+80){
                    xVel *= -1;
                }
            }
        }
        if(x+r+10+xVel>xRB || x-r+xVel < xLB)
        {
            //MessageBox(0,"AWW SHEEIT","I LOSED",MB_OK);
            //ExitProcess(0);
        }   
        if(y+r+30+yVel > yUB || y-r+yVel < yLB)
            yVel*=-1;
        translate(xVel,yVel);
    }
    void translate(float x, float y)
    {
        if(GetAsyncKeyState(VK_SPACE))
        {
            gamestart = true;
        }
        if(gamestart){
            this->x+=x;
            this->y+=y;
            for(int i = 0; i < 360; ++i)
            {
                points[i].x+=x;
                points[i].y+=y;
            }
        }
    }
    void render()
    {
        update();
        d3ddev->SetTexture(0,0);
        d3ddev->SetFVF((D3DFVF_XYZRHW | D3DFVF_DIFFUSE)); 
        d3ddev->SetRenderState( D3DRS_LIGHTING, FALSE);
        d3ddev->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW);
        d3ddev->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
        d3ddev->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
        d3ddev->SetRenderState( D3DRS_ZENABLE, D3DZB_FALSE );
        d3ddev->SetRenderState( D3DRS_FOGENABLE, false);
        d3ddev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 360, &points, sizeof(360));
    }
    Vertex points [360];
private:
    float r;
};