PDA

View Full Version : xin hỏi



ngocquang19877
15-11-2003, 16:34
các bác làm ơn cho bít đạon code mẫu về cách tạo 1 text 3d bay bay,text 2d em đã vẽ được rùi,nhưng chỉ ở dạng đứng ì 1 chỗ,chán lém

.có cách nào làm cho 1 vật phát sáng(như mặt trời í mà)có cáhc nào tái tạo effect light của đèn pin kô hả mấy bác?khi mà đã có nguồn sáng bình thường rùi.

rắc rối với normal

tại seo em tạo 1 nguồn sáng ,khi add nó vô scene,chỉ có chiếu sáng được 1 bên. còn bên kia thì sáng như mặt trời vậy á.cái hình của em là tam giác

CrazyBabe
17-11-2003, 01:15
Pó chân.
Text bay bay ? Đã 3D rùi thì cứ xoay, morph hoặc là rotate thì thành bay đúng kô nào ?
Vật phát sáng thì dùng kết hợp những hiệu ứng blending+lighting lại. Quan trọng là nguồn sáng thực hay nó chỉ phát sáng thui ?
Chiếu đèn pin ? Như các game hiện tại làm (đèn của halflife chẳng hạn nhé) thì nó chỉ là một cái box dùng alpha blending để vẽ thôi. Nếu muốn oai như DoomIII thì dùng Pixel Shader 2.0 để vẽ cho thực. Thực ra cũng chỉ là viết lại pipeline thôi mà (hì, phét thế chứ thực ra dựng bằng PS2.0 khó vãi...). Cái này còn phải kết hợp với lighting map (fastest) hoặc realtime lighting (slow) nữa mới thực được.
Chuyện nguồn sáng chỉ áp được một bên là do config cullface, bạn xem lại xem xem cullface của bạn config thế nào hén, chính xác là nó sẽ...đen sì.
Rắc rối với normal vector hay normal vertex hay là normal display zị ? Nói rõ cái đê.

gtechvn
17-11-2003, 18:46
Nếu muốn làm đèn pin thì cách hay nhất là tình toán texture theo nguồn sáng rồi generate realtime, sau đó áp dụng multitexture là đảm bảo hiệu ứng rất đẹp lại đơn giản. Nếu làm vertex shader thì e là nhiều máy chạy không nổi
Còn làm text 3D thì bạn sử dụng true type font (.ttf) là xong

(code openGL)

HFONT font;
base = glGenLists(256); //Chon 256 font

font = CreateFont( -12, // Height Of Font
0, // Width Of Font
0, // Goc do
0, //Huong cua goc do
FW_BOLD,
FALSE, //Cho nay la italic
FALSE, // Underline
FALSE, // Strikeout
ANSI_CHARSET,
OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,
FF_DONTCARE|DEFAULT_PITCH,
"VNI-Times"); // Font Name

SelectObject(hDC, font);

wglUseFontOutlines(hDC, 0, 255, base, 0.0f, 0.2f, WGL_FONT_POLYGONS, gmf);

Muốn in gì chỉ việc call list glCallLists ra

Còn Font 2D thì đơn giản nhất là làm từ bitmap

Còn để nò bay bay hay quay quay thì đúng như Craze nói đó cứ thêm vào hàm bay bay quay quay là được thui

ngocquang19877
18-11-2003, 08:12
ờm.hình như cái bác chỉ em là opengl hả?vì em thấy có chữ gl.thành thật xin lỗi bác là em chỉ đang học dx thui.xin bác bỏ qua và...chỉ lại em.
hì.chán bác này quá.í là làm seo vẽ được tex3td bi giờ????.em dùng hfont craetefont,rùi dùng hàm drawtext để vẽ lên.nhưng hình như nếu có 1 shape đi ngang qua thì text sẽ bị che :( .hông bít nó có phải là 3d hay chưa???mà hàm bay bay ,quay quay là hàm gì???em chỉ là amateur thui.

gtechvn
18-11-2003, 08:57
Trong DirectX bạn có thể dùng hàm D3DXCreateText để tạo text 3D, tuy nhiên hàm này không hỗ trợ multi-line text

HRESULT WINAPI D3DXCreateText(
LPDIRECT3DDEVICE9 pDevice,
HDC hDC,
LPCTSTR pText,
FLOAT Deviation,
FLOAT Extrusion,
LPD3DXMESH *ppMesh,
LPD3DXBUFFER *ppAdjacency,
LPGLYPHMETRICSFLOAT pGlyphMetrics
);

Code sơ lược như sau

Bạn tạo 1 HDC để vẽ ra và một font theo ý bạn

HDC hdc;
HFONT font;

hdc=CreateCompatibleDC(NULL);

font=CreateFont(10, //Height
0, //Width
0, //Escapement
0, //Orientation
FW_NORMAL, //Weight
false, //Italic
false, //Underline
false, //Strikeout
DEFAULT_CHARSET,//Charset
OUT_DEFAULT_PRECIS, //Output Precision
CLIP_DEFAULT_PRECIS, //Clipping Precision
DEFAULT_QUALITY, //Quality
DEFAULT_PITCH|FF_DONTCARE, //Pitch and Family
"VNI-Times");

SelectObject(hdc, font);

Sau đó chỉ việc áp dụng hàm đó thôi

ID3DXMesh *mesh;

hr=D3DXCreateText(g_d3d_device, //Device
p_dc, //GDI Device Context
"Hello World", //Text
0.001f,
0.4f, //Extrusion depth (Theo trục Z)
&mesh, //Mesh
NULL, //Thông tin về Adjacency
NULL); //GlyphMetrics

Coi như xong
g_text_mesh->DrawSubset(0);


//Bạn tra thêm MSDN để biết thông tin các tham số
//Tất nhiên bạn cũng phải release các đối tượng

Còn cái việc quay quay thì quá dễ rồi trước khi vẽ cái gì, gọi hàm cho nó quay quay, vẽ cái đó, tắt hàm quay

gtechvn
18-11-2003, 10:29
Mà có thật cậu không biết hàm bay bay quay quay không, Trời
D3DXMatrixRotationX, D3DXMatrixRotationZ, ....

ngocquang19877
09-12-2003, 07:39
cam on bac muon van lan :)

quydo089
02-05-2004, 13:00
ko biet file *.bly dung chuong trinh nao de chay nhi?