游戏开发论坛

 找回密码
 立即注册
搜索
楼主: sphinxjimmy

一个关于3D场景绘制2D文字的问题

[复制链接]

23

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
 楼主| 发表于 2005-4-21 10:01:00 | 显示全部楼层

Re:一个关于3D场景绘制2D文字的问题

但是又出了点问题,我生成了个font类,把D3DXFONT_DESC d3dFont, LPD3DXFONT sfont声明成为public变量,然后声明两个public函数:
fontInit:memset(&d3dFont,0,sizeof(d3dFont));
d3dFont.Height=25;
d3dFont.Width=12;
d3dFont.Weight=500;
d3dFont.Italic=FALSE;
d3dFont.CharSet=DEFAULT_CHARSET;
LPD3DXFONT sfont;
D3DXCreateFontIndirect(g_pd3dDevice,&d3dFont,&sfont);
另外一个:
bool font::showText(string s,RECT rect,D3DCOLOR cor){
       
        char *str;
        strcpy(str,s.c_str());
        sfont->DrawText(NULL,"Hello World",-1,&rect,DT_TOP|DT_LEFT,0xffffffff);
        return 1;
}main函数开始生成对象font m_font;然后在render中调用m_font.showText("hello",rect,0xffffffff);编译没问题,但是如果运行就会出现对话框:Unhandled exception at 0x00412fca in CreateDevice.exe: 0xC0000005: Access violation reading location 0x00000000.,这是怎么回事啊?

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-4-21 12:38:00 | 显示全部楼层

Re:一个关于3D场景绘制2D文字的问题

指针出错而已,你究竟用那个版本的SDK?你不说我很难帮你

23

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
 楼主| 发表于 2005-4-21 13:16:00 | 显示全部楼层

Re:一个关于3D场景绘制2D文字的问题

我的是 DX9。0 Update (April 2005),谢谢哦

23

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
 楼主| 发表于 2005-4-21 17:15:00 | 显示全部楼层

Re:一个关于3D场景绘制2D文字的问题

好,我晚上吃完饭在来(7点多),非常感谢~

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-4-21 18:14:00 | 显示全部楼层

Re:一个关于3D场景绘制2D文字的问题

先别走,等我一下

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-4-21 18:21:00 | 显示全部楼层

Re:一个关于3D场景绘制2D文字的问题

LPD3DXSPRITE spr;
D3DXCreateSprite(pdev,&spr);
LPD3DXFONT pFont;
RECT rect={0,0,200,200};
D3DXCreateFont( g_pd3dDevice, 15, 0, FW_BOLD, 1, FALSE, DEFAULT_CHARSET,
                         OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
                         L"Arial", &g_pFont );//直接用你的试试
pFont->DrawTextA(spr,"hdm2968",strlen("hdm2968"),&rect,DT_TOP|DT_CENTER,0x00000000);
试试吧,我也不知道行不行

23

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
 楼主| 发表于 2005-4-22 10:01:00 | 显示全部楼层

Re:一个关于3D场景绘制2D文字的问题

哎,如果是写在一个函数里,就没问题,但是如果分开写,做一个font类,把创建font放在类函数“fontIint()”中,然后做一个showtext函数,来代替drawtext就不行,这是为什么,就象你说的,我本来以为是是Sprite的错,然后照你那样D3DXCreateSprite,还是不行,郁闷~~

23

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
 楼主| 发表于 2005-4-22 10:11:00 | 显示全部楼层

Re:一个关于3D场景绘制2D文字的问题

我把我的代码贴出来吧:
// File: CreateDevice.cpp
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#include <string>
#include <d3d9.h>
#include <strsafe.h>

#include "font.h"
LPDIRECT3D9             g_pD3D       = NULL;
LPDIRECT3DDEVICE9       g_pd3dDevice = NULL;
LPD3DXSPRITE spr;//////////////////////////////////////////////////////////
font m_font;/////////////////////////////////////////////////////////////////
HRESULT InitD3D( HWND hWnd )
{
     if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;

     D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
       
       if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
    {
        return E_FAIL;
    }

                m_font.fontInit(g_pd3dDevice);
        D3DXCreateSprite(g_pd3dDevice,&spr);/////////////////////////////////////////


    return S_OK;
}
VOID Cleanup()
{
。。。。。
}


VOID Render()
{
    。。。。
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
                      RECT rect={0,0,500,500};
                m_font.showText(spr,"hello",rect,0xffffffff);
               
                 g_pd3dDevice->EndScene();
    }

    g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );
}


LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    。。。
       return DefWindowProc( hWnd, msg, wParam, lParam );
}


INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
   。。。   
}
下面是我自己建的font类:
////////////////////////////////////////////////////////////////////////////
////////////////////////              font.h                /////////////////////
///////////////////////////////////////////////////////////////////////////
#include <string>
#include <windows.h>
#include <d3dx9.h>
#include <string>
#include <d3dx9.h>
#include "d3dx9core.h"
using namespace std;
class font{
public:
        font();
        ~font();
        bool showText(LPD3DXSPRITE spr,string s,RECT rect,D3DCOLOR cor);
        bool fontInit(LPDIRECT3DDEVICE9 g_pd3dDevice);
        D3DXFONT_DESC d3dFont;
        LPD3DXFONT sfont;
};
////////////////////////////////////////////////////////////////////////////
////////////////////////              font.cpp                //////////////////
///////////////////////////////////////////////////////////////////////////
#include "font.h"

font::font(){
          sfont = NULL;
}
font::~font(){
        if( sfont )
        {
            sfont->Release();
                }

}
bool font::showText(LPD3DXSPRITE spr,string s,RECT rect,D3DCOLOR cor){
       
        char *str;
        strcpy(str,s.c_str());
        sfont->DrawText(spr,"Hello World",-1,&rect,DT_TOP|DT_LEFT,0xffffffff);
       
        return 1;
}
bool font::fontInit(LPDIRECT3DDEVICE9 g_pd3dDevice){
       
        memset(&d3dFont,0,sizeof(d3dFont));
        d3dFont.Height=25;
        d3dFont.Width=12;
        d3dFont.Weight=500;
        d3dFont.Italic=FALSE;
        d3dFont.CharSet=DEFAULT_CHARSET;
        LPD3DXFONT sfont;
        D3DXCreateFontIndirect(g_pd3dDevice,&d3dFont,&sfont);       

        return 1;
}
       

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-4-22 12:20:00 | 显示全部楼层

Re:一个关于3D场景绘制2D文字的问题

记忆中.h文件不要放执行代码,只放声明,定义要在一个.cpp文件中

23

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
 楼主| 发表于 2005-4-22 12:50:00 | 显示全部楼层

Re: Re:一个关于3D场景绘制2D文字的问题

hdm2968: Re:一个关于3D场景绘制2D文字的问题

记忆中.h文件不要放执行代码,只放声明,定义要在一个.cpp文件中

我知道呀,我的.h中没有放执行代码,只有声明啊,我全定义到.cpp中了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 13:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表