2011-04-04 15 views
5

Şu anda opengl oluşturmayı içerir bazı belirli metin/font vurgulama yapar Linux sistemleri için bir metin düzenleyicisi yazmaya arıyorum. Linux ile iyi çalışan bir C++ grafik oluşturma kitaplığı için önerileri olan var mı (özellikle şimdilik ubuntu)?yapma c bir 3d metin editörü ++

Ve 3d metin oluşturma ile başlamak için tavsiye büyük beğeni topluyor!

DÜZENLEME: Sadece 3d metninin oluşturulmasında projenin sıkı bir gerekliliktir netleştirmek için.

+1

Bir ödül verdiniz; Bu yüzden, aldığınız cevaplardan henüz memnun olmadığınız anlaşılıyor. Aradığın şey hakkında detay ekleyebilir misin? – JCooper

+0

Yapmak istediğim, bazı 3B nesneleri kullanan sözdizimi vurgulayan bir metin düzenleyicisidir. Bu bir başlangıç ​​olsa da, opengl'de sadece yazı tipi oluşturmayı değil. Bazı cevaplar, hedeflediğim platform olmayan bir pencere perspektifinden geliyordu. Aslında, farklı yüzeyler üzerinde 3d metin oluşturabilen bir kütüphane bulmak isterdim, ancak eğer böyle bir kütüphane kurmaya başlamak için nereden başlayacağınızı umuyorum. – shuttle87

+0

"Farklı yüzeylerde" ne demek istiyorsun? Metni bir silindir veya küre etrafında işlemek mi istiyorsunuz? – JCooper

cevap

4

, olurdu. 3D, ekstrüde metni oluşturmak için, ben bu çağrı yapmak:

#include <FTGL/ftgl.h> 
#include <FTGL/FTFont.h> 
... 
FTFont* font = new FTExtrudeFont("path_to_Fonts/COOPBL.ttf"); 
font->Depth(.5); // Text is half as 'deep' as it is tall 
font->FaceSize(1); // GL unit sized text 
... 
FTBBox bounds = font->BBox("Text"); 
glEnable(GL_NORMALIZE); // Because we're scaling 
glPushMatrix(); 
glScaled(.02,.02,.02); 
glTranslated(-(bounds.Upper().X() - bounds.Lower().X())/2.0,yy,zz); // Center the text 
font->Render("Text"); 
glPopMatrix(); 
glDisable(GL_NORMALIZE); 
9

OpenGL seviyesinde bunu temelde sadece üç yolu vardır:

Raster yazı tipleri.

Kullanım glBitmap veya glDrawPixels ekrana piksel dikdörtgen demet çizmek. Bunu yapmanın dezavantajları çoktur: Her bir karakteri açıklayan veriler CPU'nuzdan her karede grafik kartına ve çerçevedeki her karaktere gönderilir. Bu önemli bant genişliğine sahip olabilir.
Temeldeki OpenGL uygulamasının, görüntü verilerini CPU ve çerçeve arabelleği arasında bir şekilde 'kaydırması' kesinlikle gerekir.
Birçok 3D grafik çipi, bitmapler çizmek için tasarlanmamıştır. Bu durumda OpenGL yazılım sürücüsü, piksellerin doğrudan çerçeve arabelleğe eklenebilmesi için 3D donanımın tamamen çizim bitene kadar beklemesi gerekir. Yazılım bunu yapana kadar, donanım boşta oturuyor.
Bitmapler ve Drawpixels, ekranın kenarlarına paralel olacak şekilde hizalanmış olmalıdır, bu nedenle döndürülen metin mümkün değildir.
Bitmapler ve Drawpixels ölçeklendirmesi mümkün değildir.
Raster yazı tiplerinin önemli bir avantajı vardır - ve bu da yalnızca Software OpenGL uygulamalarında, diğer yaklaşımlardan daha FASTER olma ihtimalidir ... durumun 3D donanım üzerindeki tersi.

Geometrik yazı tipleri. Geometrik ilkelleri kullanarak satır karakterlerini çizin - çizgiler, üçgenler, her neyse. Bunun dezavantajları şunlardır:
Bazı karakterler çizmek için gereken üçgen sayısı çok büyük olabilir - özellikle de iyi görünmelerini istiyorsanız. Bu performans için kötü olabilir.
Yazı tasarlama hem zor hem de maliyetlidir.
Renkli kenarlıklar, gölgeler, vb. Yazı tipleri yapmak diğer iki sorunu önemli ölçüde artırır.

Avantajlar şunlardır: Geometrik yazı tipleri ölçeklendirilebilir, döndürülebilir, bükülmüş, şekil alabilir, kalıptan geçirilebilir.
Süslü aydınlatma modellerini, çevre haritalamasını, tekstüreini vb. Kullanabilirsiniz.
3D dünyada kullanılıyorsa, bunlarla çakışma tespiti yapabilirsiniz.
Geometrik yazı tipleri güzelce ölçeklenir. Kötü takma eserler sergilemezler ve genişledikçe "bulanık" olmazlar.

Doku eşlemeli yazı tipleri. Genellikle, tüm yazı tipi bir veya iki büyük doku haritasında depolanır ve her harf tek bir dörtgen olarak çizilir. Dezavantajları:
İhtiyacınız olan doku haritasının boyutu, özellikle hem büyük hem de küçük harfe ihtiyacınız varsa - ve/veya fontun büyük nokta boyutlarında güzel görünmesini istiyorsanız oldukça büyük olabilir. Bu özellikle, yalnızca sınırlı doku eşlemi boyutlarını destekleyen bir donanım sorunudur (örn. 3Dfx Voodoo'lar yalnızca 256x256'ya kadar harita oluşturabilir)
MIPmapping'i kullanırsanız, yazı tipini ölçeklendirmek, bir yazıyı bulanıklaştırır. MIPmapping'i kullanmazsanız, korkunç takma adlara bakarsınız.

Avantajlar şunlardır:
Genel olarak - yazı tipinin her harfi için tam renkli bir görüntü kullanabilirsiniz. Doku fontları döndürülebilir ve ölçeklendirilebilir - her zaman "düz" görünmelerine rağmen.
Diğer yazı tiplerini doku haritalarına dönüştürmek kolaydır.
Onları 3D sahnede çizebilir ve doğru şekilde yanacaktır.
HIZ! Dokulu fontlar, her bir harf için donanıma gönderilecek bir dörtgenli gerektirir. Muhtemelen Raster ya da Geometrik yazı tiplerinden daha büyük bir büyüklük sırasına sahiptir. Düşük uçlu 3D donanımlar, basit dokulu çokgenler çizmek için son derece optimize edildiğinden, hızlandırıcı da artırılır, çünkü rendererde 'hızlı yoldaysınız'. (Ikaz: yalnızca yazılım OpenGL'ın, dokulu yazı üzerine YAVAŞ olacak bazı Font kütüphanelerine

Bağlantılar:.

+2

Mekiğin 87 kaçmaya başlayacağı tuzakları özetlemek için iyi bir iş çıkardın. Başım ağrısını istediklerini anlamadıklarını hissediyorum. – drewish

1

Size tavsiye ederim QT, GNOME için KDE veya GTk + 'nın temelidir. Her ikisi de OPENGL ve metin için destek var. QT ile animasyon da dahil olmak üzere gelişmiş grafikler (QGraphicsView) yapabilirsiniz ... QT Demo Uygulamasına bir göz atın.