|
|
Author |
Message |
joshex
Level 22
Posts: 2257 |
Joined: Sat Nov 17, 2012 11:10 am |
Cash on hand: 175,593.20
Location: SR388 |
Group: Special Access |
|
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
got any?
His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.
|
Tue Apr 15, 2014 11:32 pm |
|
|
Pantsman
Level 39
Posts: 21063 |
Joined: Sat Feb 14, 2009 11:44 pm |
Cash on hand: 2,187.55
Bank: 5,250.50
Group: Sysop |
|
Re: Aw.. shit.
We'll still help you with your homework, bud. .... at least we'll try.
_________________
Yeap.
_________________
1 pcs.
|
4 pcs.
|
|
Tue Apr 15, 2014 11:57 pm |
|
|
Parpol
Level 38
Posts: 10364 |
Joined: Sun Oct 26, 2008 5:47 am |
Cash on hand: 435.45
Bank: 2,750,364.30
Group: Dev Team |
|
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
- Spoiler: show
- OLD VERSION, BITCHES!
|
Wed Apr 16, 2014 9:06 am |
|
|
LordofFlames
Lord Cumdrops
Posts: 2017 |
Joined: Sun Jan 04, 2009 4:57 am |
Cash on hand: 423,083.55
Location: Behind a corner |
Group: Gurren Doujin Brigade |
|
Re: Aw.. shit.
Im looking forward to this ;P It will be fun to test and ive feedback
_________________ LordofFlames. The somewhat unknown oldie!
- Spoiler: show
_________________
1 pcs.
|
1 pcs.
|
|
Wed Apr 16, 2014 11:30 am |
|
|
fluffy
Level 20
Posts: 2051 |
Joined: Thu Aug 29, 2013 8:51 pm |
Cash on hand: 1,859.50
Location: [nobody fills this out right, right?] |
Group: Special Access |
|
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 |
|
|
joshex
Level 22
Posts: 2257 |
Joined: Sat Nov 17, 2012 11:10 am |
Cash on hand: 175,593.20
Location: SR388 |
Group: Special Access |
|
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
got any?
His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.
|
Tue Apr 22, 2014 5:52 am |
|
|
joshex
Level 22
Posts: 2257 |
Joined: Sat Nov 17, 2012 11:10 am |
Cash on hand: 175,593.20
Location: SR388 |
Group: Special Access |
|
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
got any?
His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.
|
Tue May 06, 2014 7:45 am |
|
|
fluffy
Level 20
Posts: 2051 |
Joined: Thu Aug 29, 2013 8:51 pm |
Cash on hand: 1,859.50
Location: [nobody fills this out right, right?] |
Group: Special Access |
|
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 |
|
|
joshex
Level 22
Posts: 2257 |
Joined: Sat Nov 17, 2012 11:10 am |
Cash on hand: 175,593.20
Location: SR388 |
Group: Special Access |
|
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
got any?
His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.
|
Wed May 07, 2014 10:54 am |
|
|
Pantsman
Level 39
Posts: 21063 |
Joined: Sat Feb 14, 2009 11:44 pm |
Cash on hand: 2,187.55
Bank: 5,250.50
Group: Sysop |
|
Re: Aw.. shit.
You should allow text selection on logs. How else would heroic escapades be archived for all eternity?
_________________
Yeap.
_________________
1 pcs.
|
4 pcs.
|
|
Wed May 07, 2014 10:57 am |
|
|
fluffy
Level 20
Posts: 2051 |
Joined: Thu Aug 29, 2013 8:51 pm |
Cash on hand: 1,859.50
Location: [nobody fills this out right, right?] |
Group: Special Access |
|
Re: Aw.. shit.
joshex wrote: what does FH think? > General SeriousSo 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 |
|
|
Parpol
Level 38
Posts: 10364 |
Joined: Sun Oct 26, 2008 5:47 am |
Cash on hand: 435.45
Bank: 2,750,364.30
Group: Dev Team |
|
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
- Spoiler: show
- OLD VERSION, BITCHES!
|
Wed May 07, 2014 3:46 pm |
|
|
joshex
Level 22
Posts: 2257 |
Joined: Sat Nov 17, 2012 11:10 am |
Cash on hand: 175,593.20
Location: SR388 |
Group: Special Access |
|
Re: Aw.. shit.
fluffy wrote: joshex wrote: what does FH think? > General SeriousSo 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.htmlI'm also eyeballing the texture calls http://www.blender.org/documentation/24 ... class.htmlthat 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-.htmlbang, 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
got any?
His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.
|
Wed May 07, 2014 9:53 pm |
|
|
Parpol
Level 38
Posts: 10364 |
Joined: Sun Oct 26, 2008 5:47 am |
Cash on hand: 435.45
Bank: 2,750,364.30
Group: Dev Team |
|
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
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
- Spoiler: show
- OLD VERSION, BITCHES!
|
Fri May 09, 2014 7:23 am |
|
|
joshex
Level 22
Posts: 2257 |
Joined: Sat Nov 17, 2012 11:10 am |
Cash on hand: 175,593.20
Location: SR388 |
Group: Special Access |
|
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
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="{"numberToCall":"+8610318567","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8615017344","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8620217318","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8623817335","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8628317337","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8647417337","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8651717335","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8656117311","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8657317323","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8676917339","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8685517337","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8690217325","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+8699517334","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+86103417339","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+86107417355","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+86131717333","isFreecall":false,"isMobile":false,"isRtl":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="{"numberToCall":"+86135717347","isFreecall":false,"isMobile":false,"isRtl":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
got any?
His name is not Robert Paulsen, His name is Gregory Matthew Bruni, he won so hard.
|
Sat May 10, 2014 5:36 am |
|
|
|
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
|
|
|
|