PDA

View Full Version : I want writting by Open gl



12-01-2002, 01:39 PM
hi,

I want design program by open gl
when user set the psition by the mouse
I allowed for user enter s(he) text

I have some code for writting but not interactvie with user


#include <gl\glut.h>
#include<string.h>


void bitmap_output(int x,int y, char*string,void *font)

{int len,i;
glRasterPos2f(x,y);
len=(int)strlen(string);
for(i=0;i<len;i++)
{
glutBitmapCharacter(font,string[i]);}}

void display (void)
{
glClear(GL_COLOR_BUFFER_BIT);
bitmap_output(10,35,"First Attempt",GLUT_BITMAP_TIMES_ROMAN_24);
bitmap_output(30,100,"Font with 9 by 15 pixels",GLUT_BITMAP_9_BY_15);
bitmap_output(70,150,"Helvetica Font ",GLUT_BITMAP_HELVETICA_18);
glFlush();
}

void reshape (int w ,int h){
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,w,0,h);
}

int main (void)
{glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(350,250);

glutCreateWindow("Font Program");
glClearColor(1,1,1,0);
glColor3f(0,0,0);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return(0);
}


how i can design this idea

I know must use key board and mouse function but I don't know how (when user enter character by keyboard display in the same time in work area(the view port or windows I designed)

regardes

moon girl

12-01-2002, 03:17 PM
I know Bob knows.

12-01-2002, 08:40 PM
WHERE IS Bob?? http://www.opengl.org/discussion_boards/ubb/frown.gif

Gavin
12-02-2002, 12:25 AM
So you are stuck on the text input?

Bob
12-02-2002, 12:59 AM
If you're talking about me, I'm here. Lucky for you I'm nice today, so I just give you some code. But I leave it up to you to figure out how it works though. http://www.opengl.org/discussion_boards/ubb/rolleyes.gif

Two new functions needed, mouse and keyboard callback.



void keyboard(unsigned char key, int, int)
{
if(enteringText == true)
{
switch(key)
{
case 13: // enter
enteringText = false;
break;
case 8: // backspace
text.pop_back();
break;
default:
text.push_back(key);
break;
}

glutPostRedisplay();
}
}

void mouse(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON &amp;&amp; state == GLUT_DOWN)
{
textX = x;
textY = windowHeight - y - 1;
enteringText = true;
text = std::string();
}
}

Some global variables and a new header needed.



#include <string>

bool enteringText = false;
std::string text;
int textX;
int textY;
int windowHeight;

Four functions need smaller modifications.
bitmap_output need to take a const char *string instead of a char *string. The reshape function must save the height if the window. Add this to the code: windowHeight = h;. The display function must display the string we type. Add this before flushing the output: bitmap_output(textX,textY,text.c_str(),GLUT_BITMAP _9_BY_15);. In the main function, you need to register the mouse and keyboard callback.



glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);

You can use backspace to delete characters and enter will end the input so no more characters are accepted. I hope this is what you wanted.

[This message has been edited by Bob (edited 12-02-2002).]

MOON-GIRL
12-02-2002, 03:17 AM
HI EVERY BODY http://www.opengl.org/discussion_boards/ubb/smile.gif


Gavin thank you for posting but what means stuck?? http://www.opengl.org/discussion_boards/ubb/biggrin.gif

=============
WELCOME Bob http://www.opengl.org/discussion_boards/ubb/smile.gif

thank you very much i use the code but I have problem with std


=============
this is my coding for all program

#include <gl\glut.h>
#include<string.h>


//using namespace std;

//gloabel varaible
bool enteringText = false;
std::string text;
int textX;
int textY;
int windowHeight;


void bitmap_output(int x,int y, const char*string,void *font)

{int len,i;
glRasterPos2f(x,y);
len=(int)strlen(string);
for(i=0;i<len;i++)
{
glutBitmapCharacter(font,string[i]);}
}

void display (void)
{
glClear(GL_COLOR_BUFFER_BIT);
bitmap_output(textX,textY,text.c_str(),GLUT_BITMAP _9_BY_15);

// bitmap_output(70,150,"Helvetica Font ",GLUT_BITMAP_HELVETICA_18);
glFlush();
}

void reshape (int w ,int h){
windowHeight=h;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,w,0,h);
}

//function of key board
void keyboard(unsigned char key, int, int)
{ if(enteringText == true)
{ switch(key) { case 13: // enter
enteringText=false; break;

case 8: //backspace text.pop_back();
break;
default:
text.push _(key);
break; }
glutPostRedisplay(); }}

//function of mouse
void mouse(int button, int state, int x, int y)
{ if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{ textX = x;
textY = windowHeight - y - 1;
enteringText = true;
text = std::string(); }}

int main (void)
{glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(350,250);
glutCreateWindow("Font Program");
glClearColor(1,1,1,0);
glColor3f(0,0,0);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
glutMainLoop();
return(0);
}


/// the compiler error

font.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\nn\font.cpp(10) : error C2653: 'std' : is not a class or namespace name
C:\Program Files\Microsoft Visual Studio\MyProjects\nn\font.cpp(10) : error C2146: syntax error : missing ';' before identifier 'text'
C:\Program Files\Microsoft Visual Studio\MyProjects\nn\font.cpp(10) : error C2501: 'string' : missing storage-class or type specifiers
C:\Program Files\Microsoft Visual Studio\MyProjects\nn\font.cpp(10) : fatal error C1004: unexpected end of file found
Error executing cl.exe.


=============================
I sooooo sorry but its first time for me coding by open gl

and I have some qustion in this code
Can I ask you??

regards

moon_girl

MOON-GIRL
12-02-2002, 04:36 AM
hi;


I read some books

and I expect I must use class??

I try but I don't Know how to use class correctly?

pleeeeeeeeeeeeeeese help me


MOON_GIRL

Deiussum
12-02-2002, 05:33 AM
#include <string>

instead of

#include <string.h>

The '92 ANSI/ISO standards for C++ introduced STL, and put all the common C++ headers into a "std" namespace and used the headers w/o the .h. The headers with the .h like iostream, basically put everything into the std namespace. Using the .h form is noted as being deprecated.

Also, all of the standard C headers were given headers for C++ in the form c<headername> so instead of #include <stdlib.h>, you could do #include <cstdlib> and everything in that header is put into a std namespace.

Anyway, the C string.h (or cstring) is still use ful for things like strcpy, etc., but you can also do most of the same stuff with the string class in the string header (no .h).

MOON-GIRL
12-02-2002, 06:53 AM
hi,


welcome Deiussum http://www.opengl.org/discussion_boards/ubb/smile.gif

thank you http://www.opengl.org/discussion_boards/ubb/smile.gif

this problem is solved

================
I REPLACE text.pop_back(); BY
text = text.substr(0, text.length()-1);
IT IS O.K

BUT when replace text.push_back(key);
text.append(key);

I have error

font.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\nn\font.cpp(58) : error C2664: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &__thiscall std::basic_string<char,struct std::char_traits<char>,class std::a
llocator<char> >::append(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)' : cannot convert parameter 1 from 'unsigned char' to 'const class std::basic_string<char,struct std::char_traits<char>,class s
td::allocator<char> > &'
Reason: cannot convert from 'unsigned char' to 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.
==================================


I want see member of std class how??


regards
MOON_GIRL

Deiussum
12-02-2002, 07:19 AM
It's actually the string class in the std namespace you want to see the members of.

Try change the append to this:

text += (char)key;

msdn.microsoft.com has some information on the STL classes like the string class, but they aren't quite as well documented as most of their other stuff is.

MOON-GIRL
12-02-2002, 08:17 AM
HI;

WELCOME Deiussum

I USE IT

no error in compiler or run

but nothing appear in the windows http://www.opengl.org/discussion_boards/ubb/frown.gif


MOON_GIR

MOON-GIRL
12-02-2002, 08:21 AM
thank fot all

my program it work good now

moon_girl