Reply to topic  [ 266 posts ]  Go to page 1, 2, 3, 4, 5 ... 18  Next
 Aw.. shit. 
Author Message
Level 22
Level 22
User avatar

Cash on hand:
174,929.20
Posts: 2255
Joined: Sat Nov 17, 2012 11:10 am
Location: SR388
Group: Special Access
Post Aw.. shit.
So, The deal is, I was only able to be crazy and FHey at work inbetween classes, but now my job has cut me down to part time so that means less time to be on FH each day. I can still come on here to talk about serious stuff but wont be able to joke around.

I still have college work to do, I also still have more semesters to go (Alot). I will be finding more part-time work, it may be possible that those places don't have wifi. I am not even sure this current company will definitely keep me on as part-time so ofr a while I may have no job.

Right, in other news; if some people didn't hear, I'm making an MMORPG, no not with MMOMAKER or OGRE3D none of those restrictive pieces of crap. I'm making it in blender3D which means I need to program everything from the ground up but also means I have limitless control over all aspects of the game.

Right now I can't say much about the game over public forums, but I can describe some basic things that have been done and some things that need to be done.

The game; is not yet ready for it's own development thread.

It has currently finished it's μ (Mu) stage, like most MMO's it needed a spawn system and update/file system.

the Next stage is the λ (Lambda) Stage, in the lambda stage the map and general atmosphere of the game will be somewhat created (roughly).

after that the κ (kappa) stage will start, this is where the client interface will be built, including a chat system and drop down menus. the server interface and account and character handles will be programmed. -it's already somewhat started.

Ater that is the ι (iota) test, used as a synonym for "I ought to" where the system will be tested for bugs and general interface/gameplay related nuisances locally.

After a successful Iota test I will enter the θ (Theta) stage, the theta stage will contain character designer work, power designer work, weapon designer work ETC.

next is the η (eta) stage, where an enemy group will be created and spawn points set.

Then we have a ζ (Zeta) Test where a current dummy client will be submitted only to key FH members, and the server will be run by either Me (if I can) or fluffy.

After Zeta are 2 stages where any problems or changes that need to be delt with will be fixed.
ε (epsilon) Problems fixed
δ (delta) Changes made, quests made, more enemy groups made, stories written, more maps designed, Costume creator buffed up with cool stuff (this will be the stage where I will need lots of FH input).

Next is the γ (gamma) test, again a client will be distributed only to key FH members and we will test the finished product and then compile to EXE if possible and a license (ToS) will be written.

Next is the β (Beta) Test where the client will be opened to the public and the server will be hosted, hopefully by fluffy.

After the beta test any additional problems will be addressed, then we will go striaght from a live Beta test to updating the beta client to the α (Alpha) Standard Release.

then Profit?

at least thats the plan, I will tell you whats needed as it becomes necessary and will make an official dev thread in the dev forum after the eta stage is finished.

I will continue working on the MMO work or no work.

_________________
mepsipax

Image

got any?

His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.

_________________
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.


Tue Apr 15, 2014 11:32 pm
Profile E-mail
Level 39
Level 39
User avatar

Cash on hand:
2,187.55

Bank:
5,250.50
Posts: 21063
Joined: Sat Feb 14, 2009 11:44 pm
Group: Sysop
Post Re: Aw.. shit.
We'll still help you with your homework, bud. :)

.... at least we'll try.

_________________
Image
Yeap.

_________________
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
4 pcs.


Tue Apr 15, 2014 11:57 pm
Profile E-mail WWW
Level 38
Level 38
User avatar

Cash on hand:
435.45

Bank:
2,750,364.30
Posts: 10364
Joined: Sun Oct 26, 2008 5:47 am
Group: Dev Team
Post Re: Aw.. shit.
Sweet, dude! MMOs are pretty fun to make! What kind of system do you use for the server? Is it also completely from scratch? Are you using some kind of database, or just plain server memory+files?

_________________
My Pixiv
Image
Spoiler: show
OLD VERSION, BITCHES!
Image


Wed Apr 16, 2014 9:06 am
Profile E-mail
Lord Cumdrops
Lord Cumdrops
User avatar

Cash on hand:
423,083.55
Posts: 2017
Joined: Sun Jan 04, 2009 4:57 am
Location: Behind a corner
Group: Gurren Doujin Brigade
Post Re: Aw.. shit.
Im looking forward to this ;P It will be fun to test and ive feedback :)

_________________
LordofFlames. The somewhat unknown oldie!

Image

Image

Spoiler: show
Image

_________________
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.


Wed Apr 16, 2014 11:30 am
Profile E-mail
Level 20
Level 20
User avatar

Cash on hand:
1,859.50
Posts: 2051
Joined: Thu Aug 29, 2013 8:51 pm
Location: [nobody fills this out right, right?]
Group: Special Access
Post Re: Aw.. shit.
Convince your girlfriend to participate in some bondage play. Acquire tranquilizers. Tie her up and blindfold her. Tranq the bitch. Keep her in the closet and fuck her occasionally for fun but be on FH all the time.

Win:win

_________________
In just under one-thousand eight-bit bytes I have to confer some glorious shrine to myself by means of text, images, hyper links, embeded flash compositions and possibly formatting. I could abuse this easily. Ten hour clips on youtube embeded in a single vertical stack. Multi-megapixel long transparent GIFs causing scrollbar hell. Nuero-linguistic programs that fuck your mind like a fresh squid. Eye raping color schemes using ascii full-width blocks. Images or links to images of things that can not be unseen. Anything called "epilepsy" dot SWF. This is what I want to do. I am not a good person. I just know that would be a flagrant display of disrespect. I'll wait until I can get away with it.
NOW IN GLORIOUS TODD A.O.!
fluffco™ LLC takes no responsibility for anything, ever, at all, under any circumstances and is entirely fictional outside Colorado.


Wed Apr 16, 2014 9:45 pm
Profile E-mail
Level 22
Level 22
User avatar

Cash on hand:
174,929.20
Posts: 2255
Joined: Sat Nov 17, 2012 11:10 am
Location: SR388
Group: Special Access
Post Re: Aw.. shit.
Sorry for the late reply, I was in taiwan with 0 spare time.

Newpurple wrote:
Sweet, dude! MMOs are pretty fun to make! What kind of system do you use for the server? Is it also completely from scratch? Are you using some kind of database, or just plain server memory+files?


I am currently running a blender 249 and python API set-up. surprisingly servers and sch aren't built-in modules in blender so I'm having to use python to do most of the grunt work. So far only a few problems which have been averted.

the server will be based on kerberos security, the main server only accepts certain replys from the client software and makes calculations for battles ETC from there and reports the outcomes to the players and to a server-side Save file writing server, this save file writing server only listens to the main server, not to any ports or such, so hacking is practically impossible.

the save file server will make account folders, and character text documents as needed.

everything on the client side so far is a .blend, I want to fix that later by making them exe but not sure how to do it yet.

the client consists of a main client program (the map loader) and a series of other blender archives with the models and textures. I need to make an updater client and updater server, shouldn't be a problem.

_________________
mepsipax

Image

got any?

His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.

_________________
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.


Tue Apr 22, 2014 5:52 am
Profile E-mail
Level 22
Level 22
User avatar

Cash on hand:
174,929.20
Posts: 2255
Joined: Sat Nov 17, 2012 11:10 am
Location: SR388
Group: Special Access
Post Re: Aw.. shit.
Core Development Update:

The map loader is completely finished, the map design yet to be done but a small consideration.

I have begun work on the log-in/account creation client which currently has a couple windows, I have stopped development because there is no Font! OHSHI-

thats right, we have a font issue folks, I plan to make this game international so the western character set is one consideration and the chinese character set is another, the Korean and japanese character sets are also another consideration.

I have a chinese font and a western font, I need a korean font as well (Yom maybe?), currently only .ttf format is allowed. in addition if someone can find a good japanese .ttf font it would be helpful.

.ttf only please.

when the game is finished each font will be accessible from a dropdown menu as a language the first one being the language for that region (there will be multiple clients for each region, one for china one for japan, one for korea, one for the western countries.)

IF russian is not included in the typical western font set I will need a Russian .ttf font as well.

_________________
mepsipax

Image

got any?

His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.

_________________
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.


Tue May 06, 2014 7:45 am
Profile E-mail
Level 20
Level 20
User avatar

Cash on hand:
1,859.50
Posts: 2051
Joined: Thu Aug 29, 2013 8:51 pm
Location: [nobody fills this out right, right?]
Group: Special Access
Post Re: Aw.. shit.
Pyaou~ I use Liberation system-wide and it suits me very well for all scripts and languages in all cases. It's a perfectly readable and legible font that should suit your needs and you should be able to include it without any licensing concerns.

_________________
In just under one-thousand eight-bit bytes I have to confer some glorious shrine to myself by means of text, images, hyper links, embeded flash compositions and possibly formatting. I could abuse this easily. Ten hour clips on youtube embeded in a single vertical stack. Multi-megapixel long transparent GIFs causing scrollbar hell. Nuero-linguistic programs that fuck your mind like a fresh squid. Eye raping color schemes using ascii full-width blocks. Images or links to images of things that can not be unseen. Anything called "epilepsy" dot SWF. This is what I want to do. I am not a good person. I just know that would be a flagrant display of disrespect. I'll wait until I can get away with it.
NOW IN GLORIOUS TODD A.O.!
fluffco™ LLC takes no responsibility for anything, ever, at all, under any circumstances and is entirely fictional outside Colorado.


Tue May 06, 2014 9:26 pm
Profile E-mail
Level 22
Level 22
User avatar

Cash on hand:
174,929.20
Posts: 2255
Joined: Sat Nov 17, 2012 11:10 am
Location: SR388
Group: Special Access
Post Re: Aw.. shit.
fluffy wrote:
Pyaou~ I use Liberation system-wide and it suits me very well for all scripts and languages in all cases. It's a perfectly readable and legible font that should suit your needs and you should be able to include it without any licensing concerns.


fluffy wrote:
Pyaou~ I use Liberation system-wide and it suits me very well for all scripts and languages in all cases. It's a perfectly readable and legible font that should suit your needs and you should be able to include it without any licensing concerns.



I'll take a look into it.

I've run into a set-back blender 249 has no accomodation for ingame text unless it's a font thats been exported to an image with each letter in a grid. then I would need to program for each different character. with over 64k possible characters in unicode-8 I am not going to do that unless there is absolutely no other way, so. (this way also wont allow any text selection or copy pasta unless i program that too).

There is a Text object, but it only works in the GE in the newest blender and it sucks up memory like no one's business.

There is one other method but I will need programming help, I will need to write a python and C/Open GL script that automatically makes a UTF-8 textbox on a Material or Face of an object in blender and allows text input.

what does FH think?

_________________
mepsipax

Image

got any?

His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.

_________________
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.


Wed May 07, 2014 10:54 am
Profile E-mail
Level 39
Level 39
User avatar

Cash on hand:
2,187.55

Bank:
5,250.50
Posts: 21063
Joined: Sat Feb 14, 2009 11:44 pm
Group: Sysop
Post Re: Aw.. shit.
You should allow text selection on logs. How else would heroic escapades be archived for all eternity?

_________________
Image
Yeap.

_________________
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
4 pcs.


Wed May 07, 2014 10:57 am
Profile E-mail WWW
Level 20
Level 20
User avatar

Cash on hand:
1,859.50
Posts: 2051
Joined: Thu Aug 29, 2013 8:51 pm
Location: [nobody fills this out right, right?]
Group: Special Access
Post Re: Aw.. shit.
joshex wrote:
what does FH think?

>General Serious

So I won't post loli or nekomimi porn.

My opinion is to simply have a table of render surfaces buffered so you can print out text to these and map them to objects dynamically. This method should include a setting in the performance tab of the configurations to set this number to predefined values and a custom entered value by slider with snaps at acceptable performance levels. I would also populate the world based on these values by order of distance from the camera inside the field of view and then outside the field of view by angle from edge of field of view then by linear distance from camera.

There is also the possibility that you can use the font file as a resource file and have the glyphs loaded as vectors then go from there. The mappings should be straight forward and you might be able to parse strings pretty simply. Python likes parsing things.

_________________
In just under one-thousand eight-bit bytes I have to confer some glorious shrine to myself by means of text, images, hyper links, embeded flash compositions and possibly formatting. I could abuse this easily. Ten hour clips on youtube embeded in a single vertical stack. Multi-megapixel long transparent GIFs causing scrollbar hell. Nuero-linguistic programs that fuck your mind like a fresh squid. Eye raping color schemes using ascii full-width blocks. Images or links to images of things that can not be unseen. Anything called "epilepsy" dot SWF. This is what I want to do. I am not a good person. I just know that would be a flagrant display of disrespect. I'll wait until I can get away with it.
NOW IN GLORIOUS TODD A.O.!
fluffco™ LLC takes no responsibility for anything, ever, at all, under any circumstances and is entirely fictional outside Colorado.


Wed May 07, 2014 12:54 pm
Profile E-mail
Level 38
Level 38
User avatar

Cash on hand:
435.45

Bank:
2,750,364.30
Posts: 10364
Joined: Sun Oct 26, 2008 5:47 am
Group: Dev Team
Post Re: Aw.. shit.
I made a custom font like half a year ago together with a text system. (directx 11 doesn't have a text rendering system)
Had to draw every character in a large tiled image, then measure every letter and keep the measurements in a .txt which I would then load together with the image to create all letters. Shit was annoying and took time, but also interesting, and now useful since I can re-use it. I only support the basic ASCII, though because I was too lazy to add any other characters. However, All I'd need to do is make an image with other characters and load that too, so code-wise, there wouldn't be any more work to add for example asian characters. However, an image with 6000+ Kanji characters might be too much work. haha

_________________
My Pixiv
Image
Spoiler: show
OLD VERSION, BITCHES!
Image


Wed May 07, 2014 3:46 pm
Profile E-mail
Level 22
Level 22
User avatar

Cash on hand:
174,929.20
Posts: 2255
Joined: Sat Nov 17, 2012 11:10 am
Location: SR388
Group: Special Access
Post Re: Aw.. shit.
fluffy wrote:
joshex wrote:
what does FH think?

>General Serious

So I won't post loli or nekomimi porn.

My opinion is to simply have a table of render surfaces buffered so you can print out text to these and map them to objects dynamically. This method should include a setting in the performance tab of the configurations to set this number to predefined values and a custom entered value by slider with snaps at acceptable performance levels. I would also populate the world based on these values by order of distance from the camera inside the field of view and then outside the field of view by angle from edge of field of view then by linear distance from camera.


thats the problem, printing text to surfaces is not supported in blender 249.

fluffy wrote:
There is also the possibility that you can use the font file as a resource file and have the glyphs loaded as vectors then go from there. The mappings should be straight forward and you might be able to parse strings pretty simply. Python likes parsing things.


Oddly enough I came up with this exact thing this morning before coming online, But I don't know how to do it yet, the goal would be to get blender to regognise text file foramts as image formats then text would be sooo easy, however it might not inherently support text selection ETC. But so long as each glyph is coresponded to 1 character to python's knowledge I could program text selection with an object and IPOs. I would have to make a set length text grid (line by line) for it to work.

Newpurple wrote:
I made a custom font like half a year ago together with a text system. (directx 11 doesn't have a text rendering system)
Had to draw every character in a large tiled image, then measure every letter and keep the measurements in a .txt which I would then load together with the image to create all letters. Shit was annoying and took time, but also interesting, and now useful since I can re-use it. I only support the basic ASCII, though because I was too lazy to add any other characters. However, All I'd need to do is make an image with other characters and load that too, so code-wise, there wouldn't be any more work to add for example asian characters. However, an image with 6000+ Kanji characters might be too much work. haha


this sounds like what blender would have me do, but does it support text selection? it sounds like it's more indepth than the other blender 249 text tutorials.

as for asian characters I found a python program in source which functions as a chinese text input medium.

I'm gonna try something in line with fluffy's first comment and see if I can do it, but please do answer my questions and respond to my hypothesies.

time to try;
#define a basic text document
tex = open("DIR/filename.txt", 'r')
#calling an object then giving it a print command in it's brackets.
GameLogic.getCurrentController().owner(print tex)

Nope that wont work (from looking at it) but I'll still test it, might have to do owner.materials.setTexture(print tex), even that might not work.

oh well things to think about and try.

tex = open("DIR/ChineseTest.txt", 'r')
cont = GameLogic.getCurrentController()
own = cont.owner()
Me = own.getMesh()
ma = Me.materials()
Sh = ma.getShader()
Sh.setSource(tex)

TypeError: 'KX_GameObject' object is not callable.

well so much for that. but aparently we can put a program in there

http://www.blender.org/documentation/24 ... class.html

I'm also eyeballing the texture calls

http://www.blender.org/documentation/24 ... class.html

that has python C and openGL

Beware: 14 (drawingmode & 16384) 3d Polygon Text
this is a last resort because I'm not even sure it will display in the game, that and it eats up memory because each character is represented as a 3D mesh object, seriously 1 paragraph can cost you 50MB of ram that way.. highly not suggestable.

http://www.pygame.org/project-PyGame+Te ... 1693-.html

bang, and suddenly I find somethign useful, now to port it to blender.


Edit:
the above pygame thing wont work even if i had a copy of that guy's files.

my previous blender attempt listed above failed all I could do is write a custom texture, but theres no functionalty to use text.

the only thing I found that might work is python's curses module, which is new to me so it might take a while to get it right.

I'm more open to both fluffy and parpol's methods if you two would be so kind as to fill me in on the howtos.

_________________
mepsipax

Image

got any?

His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.

_________________
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.


Wed May 07, 2014 9:53 pm
Profile E-mail
Level 38
Level 38
User avatar

Cash on hand:
435.45

Bank:
2,750,364.30
Posts: 10364
Joined: Sun Oct 26, 2008 5:47 am
Group: Dev Team
Post Re: Aw.. shit.
Well my code was done entirely in c++. It is low level, so I doubt it'll work in python just like that.
My text system works as following.
First you need to Create a Font Object (Font is a class I made) and give it the file path for the font image. Then you also need to give it the file path for the .txt file with all the measurements. Once this is done, The font object will store all measurements for every letter as texture coordinates.
Next you create a Text object (Text is another class I made) with your text, and then you link the Font object to the Text object so that your text can be converted to vertices with positions and texture coordinates, and inserted into a vertex buffer. In order for this to work, you need to be able to select a vertex buffer, a constant buffer as well as the vertex shader, the geometry shader, and the fragment/pixel shader for draw calls. My text is just a bunch of positions with texture coordinates, and aren't converted to 2D billboards until at the Geometry shader stage to reduce communication . My text supports size, color and alpha, but can also be extended to support rotation, if you're willing to make a shader that rotates the text. These settings are sent to a constant buffer, which is accessed at the shader stages. In the geometry shader, the letter sizes and rotations are applied, and in the pixel/fragment shader the colors and transparency values are applied.

Anyway, here are my classes Font and Text.
The .h files are header files that declare stuff and gives you an overview of the methods and variables. C++ uses these to forward declare certain classes using their headers as interfaces.
Font.h
Spoiler: show
Code:
#pragma once
#include "Resource.h"
#include <iostream>
#include <fstream>
class Font
{
private:
unsigned int imageIndex;
unsigned int imageWidth;
unsigned int imageHeight;
int spacing;
struct Character
{
unsigned int posx; //pixel position.x in font image
unsigned int posy; //pixel position.y in font image
unsigned int width; //pixel width in font image
};
std::vector<Character> characters;
public:
Font();
void setImageIndex(unsigned int index) { imageIndex = index; }
void loadFontSettings(const char *filePath);
void loadText(std::vector<BBFont> *outData, const char *text);

unsigned int getImageIndex() { return imageIndex; }
~Font();
};

Font.cpp
Spoiler: show
Code:
#include "Font.h"


Font::Font()
{
spacing = 5;
characters = std::vector<Character>();
}

void Font::loadFontSettings(const char *filePath)
{
std::ifstream myfile (filePath);
if (myfile.is_open())
{
unsigned int number;
while(myfile >> number)
{
characters.push_back(Character());
//posx
characters.at(characters.size()-1).posx = number;
//posy
myfile >> number;
characters.at(characters.size()-1).posy = number;
//width
myfile >> number;
characters.at(characters.size()-1).width = number;
}
}
myfile.close();
}

void Font::loadText(std::vector<BBFont> *outData, const char *text)
{
unsigned int size = strlen(text);
BBFont current;
int posx = 0;
if(characters.size() == 0)
{
std::cout << "Error: No font loaded for text ( " << text << " )";
return;
}
for(unsigned int i = 0; i < size; i++)
{
if(text[i] >= 33 && text[i] < 127)
{
current.x   = (float)posx;
current.texCoords.x = (float)characters.at(text[i] - 33).posx;   // x1
current.texCoords.y = (float)characters.at(text[i] - 33).posy;   // y1
current.texCoords.z = (float)characters.at(text[i] - 33).width;   // width
current.texCoords.w = 75;   // height
outData->push_back(current);

posx += characters.at(text[i] - 33).width + 5;
}
else if(text[i] == 32) //space
{
posx += 25;
}
else
{
std::cout << "Error: unrecognizable character ( " << text[i] << " )";
}
}
}

Font::~Font()
{

}

Text.h
Spoiler: show
Code:
#pragma once
#include "Resource.h"
#include "Font.h"
#include "Object2D.h"
class Text : public Object2D
{
private:
Font *font;
const char *text;
std::vector<BBFont> *textData;
unsigned int vbStartIndex;
unsigned int allocatedSize;

public:
Text(std::vector<BBFont> *fontBillboards, const char *text, Vec2 pos = Vec2(0,0), Vec2 scale = Vec2(1,1), float rotation = 0, Vec4 tintAlpha = Vec4(1,1,1,1));
void setText( const char *text );
unsigned int getVBStartIndex()   { return vbStartIndex; }
const char   *getText()   { return text; }
unsigned int getTextSize()   { return strlen(text); }
unsigned int getAllocatedSize()   { return allocatedSize; }
void setFont( Font *font )   { this->font = font; }
void updateCB();
void updateTextData();
void setTextData(unsigned int bufferStartIndex, unsigned int allocatedSize);
~Text();
};

Text.cpp
Spoiler: show
Code:
#include "Text.h"

#ifdef _WIN32
#include "GraphicsDX11.h"
#else
#include "GraphicsOGL4.h"
#endif


Text::Text(std::vector<BBFont> *fontBillboards, const char *text, Vec2 pos, Vec2 scale, float rotation, Vec4 tintAlpha)
:Object2D(pos,scale,rotation,tintAlpha)
{
textData = fontBillboards;
this->text   = text;
font = NULL;
vbStartIndex = 0;
}

void Text::setText(const char *text)
{
this->text = text;
}

void Text::updateTextData()
{
if(!font)
{
throw std::exception("No font selected.");
return;
}
textData->clear();
font->loadText(textData, text);
}

void Text::setTextData(unsigned int bufferStartIndex, unsigned int allocatedSize)
{
vbStartIndex   = bufferStartIndex;
this->allocatedSize   = allocatedSize;
updateTextData();
}

void Text::updateCB()
{
CBFont cb;
cb.pos   = pos;
cb.scale   = scale;
cb.rotation   = Vec2(rotation,0);
cb.imageSize   = Vec2(1420,250);
cb.tintAlpha   = tintAlpha;

#ifdef _WIN32
GraphicsDX11::getInstance()->updateCBFont(cb);
#else
//GraphicsOGL4::getInstance()->updateCBFont(cb);
#endif
}

Text::~Text()
{

}


Shaders:

vsFont.glsl

Spoiler: show
Code:
#version 430 core
layout (location = 0) in vec2   vpos;
layout (location = 1) in vec2   vsize;
layout (location = 2) in float   rotation;
layout (location = 3) in vec4   tintAlpha;
layout (location = 4) in int   texIndex;

out vec2   gpos;
out vec2   gsize;
out float   grotation;
out vec4   gtintAlpha;
out int   gtexIndex;

void main()
{
gpos   = vpos;
gsize   = vsize;
grotation   = rotation;
gtintAlpha   = tintAlpha;
gtexIndex   = texIndex;
}

gsFont.glsl
Spoiler: show
Code:
#version 430 core

layout(points) in;
layout(triangle_strip, max_vertices = 4) out;

in vec2   gpos[];
in vec2   gsize[];
in float   grotation[];
in vec4   gtintAlpha[];
in int   gtexIndex[];

out vec2 UV;
out vec4 tintAlpha;
out int texIndex;

void main()
{
gl_Position   = vec4( gpos[0].x / 1024 * 2 - 1, gpos[0].y / 768 * 2 - 1, 0, 1 );
tintAlpha = gtintAlpha[0];
UV   = vec2( 0, 0 );
texIndex = gtexIndex[0];
EmitVertex();

gl_Position = vec4( gpos[0].x / 1024 * 2 - 1, (gpos[0].y + gsize[0].y) / 768 * 2 - 1, 0, 1 );
tintAlpha = gtintAlpha[0];
UV = vec2( 0, 1 );
texIndex = gtexIndex[0];
EmitVertex();

gl_Position = vec4( (gpos[0].x + gsize[0].x) / 1024 * 2 - 1, gpos[0].y / 768 * 2 - 1, 0, 1);
tintAlpha = gtintAlpha[0];
UV = vec2( 1, 0 );
texIndex = gtexIndex[0];
EmitVertex();

gl_Position = vec4( (gpos[0].x + gsize[0].x) / 1024 * 2 - 1, (gpos[0].y + gsize[0].y) / 768 * 2 - 1, 0, 1 );
tintAlpha = gtintAlpha[0];
UV = vec2( 1, 1 );
texIndex = gtexIndex[0];
EmitVertex();

EndPrimitive();
}

fsFont.glsl
Spoiler: show
Code:
#version 430 core
in vec2 UV;
in vec4 tintAlpha;
in int texIndex;

out vec4 color;

uniform sampler2D textureSampler;

void main()
{
color = texture2D(textureSampler, UV).rrrr;
}



Here is what a typical font and its corresponding txt file looked like
blackwhite4.png
Spoiler: show
Image

blackwhite4.txt
Spoiler: show
9 0 12
29 0 31
63 0 46
118 0 36
161 0 67
233 0 52
286 0 17
305 0 25
335 0 25
368 0 35
412 0 45
465 0 18
491 0 24
525 0 12
542 0 30
577 0 37
625 0 29
664 0 36
706 0 36
747 0 40
793 0 35
835 0 38
878 0 37
921 0 38
963 0 38
1012 0 12
1036 0 19
1068 0 42
1124 0 43
1180 0 41
1233 0 32
1272 0 60
1 85 47
53 85 40
96 85 44
146 85 46
198 85 37
242 85 36
281 85 47
335 85 42
385 85 25
413 85 29
452 85 42
497 85 35
537 85 49
596 85 42
645 85 51
702 85 37
742 85 51
800 85 44
846 85 39
887 85 46
937 85 41
983 85 47
1031 85 67
1100 85 44
1144 85 46
1191 85 41
7 173 22
34 173 30
67 173 22
99 173 46
150 173 44
202 173 18
238 173 35
283 173 37
323 173 34
360 173 37
403 173 38
444 173 28
474 173 37
517 173 35
561 173 11
573 173 23
605 173 36
644 173 10
665 173 55
729 173 35
769 173 39
815 173 37
855 173 37
902 173 25
929 173 33
963 173 27
995 173 34
1034 173 39
1074 173 55
1131 173 39
1170 173 38
1211 173 33
1246 173 33
1294 173 10
1317 173 33
1357 173 47

_________________
My Pixiv
Image
Spoiler: show
OLD VERSION, BITCHES!
Image


Fri May 09, 2014 7:23 am
Profile E-mail
Level 22
Level 22
User avatar

Cash on hand:
174,929.20
Posts: 2255
Joined: Sat Nov 17, 2012 11:10 am
Location: SR388
Group: Special Access
Post Re: Aw.. shit.
Newpurple wrote:
Well my code was done entirely in c++. It is low level, so I doubt it'll work in python just like that.
My text system works as following.
First you need to Create a Font Object (Font is a class I made) and give it the file path for the font image. Then you also need to give it the file path for the .txt file with all the measurements. Once this is done, The font object will store all measurements for every letter as texture coordinates.
Next you create a Text object (Text is another class I made) with your text, and then you link the Font object to the Text object so that your text can be converted to vertices with positions and texture coordinates, and inserted into a vertex buffer. In order for this to work, you need to be able to select a vertex buffer, a constant buffer as well as the vertex shader, the geometry shader, and the fragment/pixel shader for draw calls. My text is just a bunch of positions with texture coordinates, and aren't converted to 2D billboards until at the Geometry shader stage to reduce communication . My text supports size, color and alpha, but can also be extended to support rotation, if you're willing to make a shader that rotates the text. These settings are sent to a constant buffer, which is accessed at the shader stages. In the geometry shader, the letter sizes and rotations are applied, and in the pixel/fragment shader the colors and transparency values are applied.

Anyway, here are my classes Font and Text.
The .h files are header files that declare stuff and gives you an overview of the methods and variables. C++ uses these to forward declare certain classes using their headers as interfaces.
Font.h
Spoiler: show
Code:
#pragma once
#include "Resource.h"
#include <iostream>
#include <fstream>
class Font
{
private:
unsigned int imageIndex;
unsigned int imageWidth;
unsigned int imageHeight;
int spacing;
struct Character
{
unsigned int posx; //pixel position.x in font image
unsigned int posy; //pixel position.y in font image
unsigned int width; //pixel width in font image
};
std::vector<Character> characters;
public:
Font();
void setImageIndex(unsigned int index) { imageIndex = index; }
void loadFontSettings(const char *filePath);
void loadText(std::vector<BBFont> *outData, const char *text);

unsigned int getImageIndex() { return imageIndex; }
~Font();
};

Font.cpp
Spoiler: show
Code:
#include "Font.h"


Font::Font()
{
spacing = 5;
characters = std::vector<Character>();
}

void Font::loadFontSettings(const char *filePath)
{
std::ifstream myfile (filePath);
if (myfile.is_open())
{
unsigned int number;
while(myfile >> number)
{
characters.push_back(Character());
//posx
characters.at(characters.size()-1).posx = number;
//posy
myfile >> number;
characters.at(characters.size()-1).posy = number;
//width
myfile >> number;
characters.at(characters.size()-1).width = number;
}
}
myfile.close();
}

void Font::loadText(std::vector<BBFont> *outData, const char *text)
{
unsigned int size = strlen(text);
BBFont current;
int posx = 0;
if(characters.size() == 0)
{
std::cout << "Error: No font loaded for text ( " << text << " )";
return;
}
for(unsigned int i = 0; i < size; i++)
{
if(text[i] >= 33 && text[i] < 127)
{
current.x   = (float)posx;
current.texCoords.x = (float)characters.at(text[i] - 33).posx;   // x1
current.texCoords.y = (float)characters.at(text[i] - 33).posy;   // y1
current.texCoords.z = (float)characters.at(text[i] - 33).width;   // width
current.texCoords.w = 75;   // height
outData->push_back(current);

posx += characters.at(text[i] - 33).width + 5;
}
else if(text[i] == 32) //space
{
posx += 25;
}
else
{
std::cout << "Error: unrecognizable character ( " << text[i] << " )";
}
}
}

Font::~Font()
{

}

Text.h
Spoiler: show
Code:
#pragma once
#include "Resource.h"
#include "Font.h"
#include "Object2D.h"
class Text : public Object2D
{
private:
Font *font;
const char *text;
std::vector<BBFont> *textData;
unsigned int vbStartIndex;
unsigned int allocatedSize;

public:
Text(std::vector<BBFont> *fontBillboards, const char *text, Vec2 pos = Vec2(0,0), Vec2 scale = Vec2(1,1), float rotation = 0, Vec4 tintAlpha = Vec4(1,1,1,1));
void setText( const char *text );
unsigned int getVBStartIndex()   { return vbStartIndex; }
const char   *getText()   { return text; }
unsigned int getTextSize()   { return strlen(text); }
unsigned int getAllocatedSize()   { return allocatedSize; }
void setFont( Font *font )   { this->font = font; }
void updateCB();
void updateTextData();
void setTextData(unsigned int bufferStartIndex, unsigned int allocatedSize);
~Text();
};

Text.cpp
Spoiler: show
Code:
#include "Text.h"

#ifdef _WIN32
#include "GraphicsDX11.h"
#else
#include "GraphicsOGL4.h"
#endif


Text::Text(std::vector<BBFont> *fontBillboards, const char *text, Vec2 pos, Vec2 scale, float rotation, Vec4 tintAlpha)
:Object2D(pos,scale,rotation,tintAlpha)
{
textData = fontBillboards;
this->text   = text;
font = NULL;
vbStartIndex = 0;
}

void Text::setText(const char *text)
{
this->text = text;
}

void Text::updateTextData()
{
if(!font)
{
throw std::exception("No font selected.");
return;
}
textData->clear();
font->loadText(textData, text);
}

void Text::setTextData(unsigned int bufferStartIndex, unsigned int allocatedSize)
{
vbStartIndex   = bufferStartIndex;
this->allocatedSize   = allocatedSize;
updateTextData();
}

void Text::updateCB()
{
CBFont cb;
cb.pos   = pos;
cb.scale   = scale;
cb.rotation   = Vec2(rotation,0);
cb.imageSize   = Vec2(1420,250);
cb.tintAlpha   = tintAlpha;

#ifdef _WIN32
GraphicsDX11::getInstance()->updateCBFont(cb);
#else
//GraphicsOGL4::getInstance()->updateCBFont(cb);
#endif
}

Text::~Text()
{

}


Shaders:

vsFont.glsl

Spoiler: show
Code:
#version 430 core
layout (location = 0) in vec2   vpos;
layout (location = 1) in vec2   vsize;
layout (location = 2) in float   rotation;
layout (location = 3) in vec4   tintAlpha;
layout (location = 4) in int   texIndex;

out vec2   gpos;
out vec2   gsize;
out float   grotation;
out vec4   gtintAlpha;
out int   gtexIndex;

void main()
{
gpos   = vpos;
gsize   = vsize;
grotation   = rotation;
gtintAlpha   = tintAlpha;
gtexIndex   = texIndex;
}

gsFont.glsl
Spoiler: show
Code:
#version 430 core

layout(points) in;
layout(triangle_strip, max_vertices = 4) out;

in vec2   gpos[];
in vec2   gsize[];
in float   grotation[];
in vec4   gtintAlpha[];
in int   gtexIndex[];

out vec2 UV;
out vec4 tintAlpha;
out int texIndex;

void main()
{
gl_Position   = vec4( gpos[0].x / 1024 * 2 - 1, gpos[0].y / 768 * 2 - 1, 0, 1 );
tintAlpha = gtintAlpha[0];
UV   = vec2( 0, 0 );
texIndex = gtexIndex[0];
EmitVertex();

gl_Position = vec4( gpos[0].x / 1024 * 2 - 1, (gpos[0].y + gsize[0].y) / 768 * 2 - 1, 0, 1 );
tintAlpha = gtintAlpha[0];
UV = vec2( 0, 1 );
texIndex = gtexIndex[0];
EmitVertex();

gl_Position = vec4( (gpos[0].x + gsize[0].x) / 1024 * 2 - 1, gpos[0].y / 768 * 2 - 1, 0, 1);
tintAlpha = gtintAlpha[0];
UV = vec2( 1, 0 );
texIndex = gtexIndex[0];
EmitVertex();

gl_Position = vec4( (gpos[0].x + gsize[0].x) / 1024 * 2 - 1, (gpos[0].y + gsize[0].y) / 768 * 2 - 1, 0, 1 );
tintAlpha = gtintAlpha[0];
UV = vec2( 1, 1 );
texIndex = gtexIndex[0];
EmitVertex();

EndPrimitive();
}

fsFont.glsl
Spoiler: show
Code:
#version 430 core
in vec2 UV;
in vec4 tintAlpha;
in int texIndex;

out vec4 color;

uniform sampler2D textureSampler;

void main()
{
color = texture2D(textureSampler, UV).rrrr;
}



Here is what a typical font and its corresponding txt file looked like
blackwhite4.png
Spoiler: show
Image

blackwhite4.txt
Spoiler: show
9 0 12
29 0 31
63 0 46
118 0 36
161 0 67
233 0 52
286 0 17
305 0 25
335 0 25
368 0 35
412 0 45
465 0 18
491 0 24
525 0 12
542 0 30
577 0 37
625 0 29
664 0 36
706 0 36
747 0 40
793 0 35
835 0 38
878 0 37
921 0 38
963 0 38
1012 0 12
1036 0 19
1068 0 42
1124 0 43
1180 0 41
1233 0 32
1272 0 60
1 85 47
53 85 40
96 85 44
146 85 46
198 85 37
242 85 36
281 85 47
335 85 42
385 85 25
413 85 29
452 85 42
497 85 35
537 85 49
596 85 42
645 85 51
702 85 37
742 85 51
800 85 44
846 85 39
887 85 46
937 85 41
983 85 47
<span class="skype_c2c_print_container notranslate">1031 85 67</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8610318567&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">1031 85 67</span><span class="skype_c2c_free_text_span"></span></span></span></span>
1100 85 44
1144 85 46
1191 85 41
7 173 22
34 173 30
67 173 22
99 173 46
<span class="skype_c2c_print_container notranslate">150 173 44</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8615017344&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">150 173 44</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">202 173 18</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8620217318&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">202 173 18</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">238 173 35</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8623817335&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">238 173 35</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">283 173 37</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8628317337&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">283 173 37</span><span class="skype_c2c_free_text_span"></span></span></span></span>
323 173 34
360 173 37
403 173 38
444 173 28
<span class="skype_c2c_print_container notranslate">474 173 37</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8647417337&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">474 173 37</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">517 173 35</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8651717335&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">517 173 35</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">561 173 11</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8656117311&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">561 173 11</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">573 173 23</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8657317323&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">573 173 23</span><span class="skype_c2c_free_text_span"></span></span></span></span>
605 173 36
644 173 10
665 173 55
729 173 35
<span class="skype_c2c_print_container notranslate">769 173 39</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8676917339&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">769 173 39</span><span class="skype_c2c_free_text_span"></span></span></span></span>
815 173 37
<span class="skype_c2c_print_container notranslate">855 173 37</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8685517337&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">855 173 37</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">902 173 25</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8690217325&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">902 173 25</span><span class="skype_c2c_free_text_span"></span></span></span></span>
929 173 33
963 173 27
<span class="skype_c2c_print_container notranslate">995 173 34</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+8699517334&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">995 173 34</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">1034 173 39</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+86103417339&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">1034 173 39</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">1074 173 55</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+86107417355&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">1074 173 55</span><span class="skype_c2c_free_text_span"></span></span></span></span>
1131 173 39
1170 173 38
1211 173 33
1246 173 33
1294 173 10
<span class="skype_c2c_print_container notranslate">1317 173 33</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+86131717333&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">1317 173 33</span><span class="skype_c2c_free_text_span"></span></span></span></span>
<span class="skype_c2c_print_container notranslate">1357 173 47</span><span id="skype_c2c_container" class="skype_c2c_container notranslate" dir="ltr" tabindex="-1" onmouseover="SkypeClick2Call.MenuInjectionHandler.showMenu(this, event)" onmouseout="SkypeClick2Call.MenuInjectionHandler.hideMenu(this, event)" onclick="SkypeClick2Call.MenuInjectionHandler.makeCall(this, event)" skype_menu_props="{&quot;numberToCall&quot;:&quot;+86135717347&quot;,&quot;isFreecall&quot;:false,&quot;isMobile&quot;:false,&quot;isRtl&quot;:false}"><span class="skype_c2c_highlighting_inactive_common" dir="ltr" skypeaction="skype_dropdown"><span class="skype_c2c_textarea_span" id="non_free_num_ui"><img class="skype_c2c_logo_img" src="resource://skype_ff_extension-at-jetpack/skype_ff_extension/data/call_skype_logo.png" height="0" width="0"><span class="skype_c2c_text_span">1357 173 47</span><span class="skype_c2c_free_text_span"></span></span></span></span>


ok for blender all we need is the characters put into a texture in the same order as you have but starting with @,@ is also in it's normal space in the blender table.

I just made a low memory text file, it's only a little over 1kb I'll use it as part of the low quality mode for phones and low power computing devices.

I will also adapt your scripts to blender as necessary.

_________________
mepsipax

Image

got any?

His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.

_________________
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.
Click the icon to see the image in fullscreen mode  
1 pcs.


Sat May 10, 2014 5:36 am
Profile E-mail
Display posts from previous:  Sort by  
Reply to topic   [ 266 posts ]  Go to page 1, 2, 3, 4, 5 ... 18  Next
 

Similar topics

 
HOLY SHIT NEWS! #93
Forum: ./General Spam
Author: madassgamer
Replies: 9
HOLY SHIT NEWS! #55
Forum: ./General Spam
Author: madassgamer
Replies: 1
HOLY SHIT NEWS! #99
Forum: ./General Spam
Author: madassgamer
Replies: 1
HOLY SHIT NEWS! #102
Forum: ./General Spam
Author: madassgamer
Replies: 4
Holy flying shit, 100 posts!
Forum: ./General Spam
Author: KingGMY
Replies: 18
Top


Who is online

Users browsing this forum: No registered users and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Mods Database :: Imprint :: Crawler Feeds :: Reset blocks
Designed by STSoftware for PTF.

Portal XL 5.0 ~ Premod 0.3 phpBB SEO